Closed am-mokhtari closed 2 months ago
با سلام و وقت بخیر نفرمایید. عزیزین.❤️
کلا سعی کن روی گیت خیلی مسلط بشی چون توی پکیج های مهم اینطور نیست که اون PR رو ببندی و یکی دیگه ایجاد کنی! اگه از phpstorm استفاده میکنی اینجاست.
یه راه دیگه: اگه دیگه خیلی تلاش کردی و نشد میتونه یه بار دیگه پروژه رو Pull کنی. یه برنچ هم نام برنچی که باهاش PR زدی ایجاد کنی. تغییراتتو با git push -f به صورت force پوش کنی رو ریپویی که فورک کردی. بعد خواهی دید که تغییراتت میشینه روی PR ت. 😎
در خصوص اون str_contains هم بستگی داره! شما این طور در نظر گرفتی که تعداد جملاتی که props میگیره کمتر از جملاتی هست که props نمیگیره! آیا تضمینی وجود داره که برای همه این طور باشه؟🤔
این رو هم در نظر بگیر که درسته که شما برای جملاتی که props ندارن یک بار str_contains رو اجرا میکنی و تمام. ولی در واقع برای جملاتی که props دارن داری 2 تا تابع رو اجرا میکنی! هم str_contains و هم preg_replace_callback م😃
بزار دلیلی هم من ننوشتم رو بهت بگم. یکی از اصلی ترین دلیل هاش این هست که اون if باعث میشه کد یه indent بخوره و بره داخل تر! و همین یعنی کاهش پرفورمنس! (من این پکیج رو خیلی وقت پیش نوشتم. اگر الان بخوام بنویسم اصلی به این شکل و شمایل نمینوسم و تو یه فایل همشو اوکی میکنم. اونم با 4-5 تا تابع و تمام.)
با این حالت اوکیه ام.
$modifiedValue = str_contains($value, ':')
? preg_replace_callback(
'/(:\w+)/',
fn($match) => '{' . $match[0] . '}'
)
: $value;
در کل هم ببخشید اگه دیر جواب میدم. چون همونطور که خودت هم میدونی اپن سورس درامدی نداره. از این رو در تایم خالی روش وقت میزارم. بازم ببخشید اگه خیلی دیر به دیر جواب میدم.🙏
سلام ممنون. دقیقا مشکلم برای drop کردن سر force بود که نمیدونستم و بعد که دیلیت کردم فهمیدم که من پوش معمولی رو میزدم و این مورد باید فورس باشه.
با توجه به کدی که توی پیام قبلی پیشنهاد دادید حدس زدم که خیلی وقت پیش کدهاشو نوشته باشید چون سبکش فرق داشت. (نمیدونم بر چه اساس اینجوری فکر کردم.)
دقیقا نمیدونم props چه مفهومی داره پس به زبون خودم بگم 😅 (لطف کنید یادم بدید ممنون میشم). به نظرم توی حالت فعلی لاراول مواردی که توی شرط ما صدق نمیکنن تقریبا تعداد برابری با مواردی که صدق میکنن دارن برای همین تعدادشون جوری نبود که بگم بیخیالشون شیم، و این که برای جملات قابل قبول هم دوتا تابع اجرا میشه رو میدونستم ولی اینطور حساب کردم که فرض کنیم برای همه ی جملات تابعی پرهزینه تر اجرا بشه بهتره یا برای نصف جملات تابع پرهزینه و کم هزینه و نصف دیگه کم هزینه؟ به نظرم اومد مورد دوم اصولی تر باشه ولی نمیدونم... الان کد پیشنهادی شما ظاهرش بهتره... همین رو اعمال میکنم.
معمولا اول هرموضوعی سخت فکر میکنم ولی بعدا متوجهش میشم 😅 شاید تاثیر دانشگاهه 😂
درمورد اینکه دیر جواب میدید اصلا اشکالی نداره. من چون این پکیج خیلی کارایی داره و دوست نداشتم این عیب رو داشته باشه مخصوصا که 23 تا ستاره داره و دلم میخواد با خیال راحت زحمت ترجمه رو بهش بسپریم نه که هربار بگم یادم باشه ویژگی:
ها رو ادیت کنم.
درمورد کد، الان ادیت میکنم و احتمالا وقتی پیامم رو دیدید میتونید مرج کنید. خداروشکر کار تکمیله 🚀
فقط این مورد رو نمیدونم که بعدش ریپو فورک شده رو دیلیت کنم یا نه...
Congratulation @alisalehi1380 🌟 Done. 🚀
دوس ندارم کشش بدم ولی بگم که الان که if
رو مثل کد پیشنهادی شما نوشتم str_replace
هم به برای همه ی پیام ها انجام میشه. به نظرم مهم نیست. مرج کنید
اره من دیشب حواسم به اون نبود. این اوکیه.
فقط حواست باشه که باید فقط قسمتی از کد رو که میخوای تغییر بدی، تغییر بدی. نه کل سورس کد رو! الان توی اون لاین های بین توابع، فاصله ها رو حذف کردی. ولی در کل اوکیه. دقیقا همین کد رو بزار جای اون تابع.
private function translateRecursive($content, $google): array
{
$trans_data = [];
foreach ($content as $key => $value) {
if (is_array($value)) {
$trans_data[$key] = $this->translateRecursive($value, $google);
continue;
}
$hasProps = str_contains($value, ':');
$modifiedValue = $hasProps
? preg_replace_callback(
'/(:\w+)/',
fn($match) => '{' . $match[0] . '}',
$value
)
: $value;
$translatedValue = $google->translate($modifiedValue);
$trans_data[$key] = $hasProps
? str_replace(['{', '}'], '', $translatedValue)
: $translatedValue;
}
return $trans_data;
}
https://vuejs.org/guide/components/props.html https://laravel.com/docs/11.x/blade#slot-attributes
م props در Vue به این معنا ست که کامپوننتی برای اجرای صحیح ش نیاز به یک سری دیتا داره. اگر میخوای از اون استفاده کنی باید حتما اون دیتا رو بهش پاس بدی. بعدا لاراول هم از این فیچر الهام گرفت و در template engin Blade اون رو آورد. در لاراول slot => میشه دیتایی که از فرزنده به والد منتقل میشه. props => دیتایی که از والد به فرزند منتقل میشه.
و به طور کلی وقتی یه دیتایی رو برای کارکرد صحیح یک قسمت به سمت ش ارسال میکنی، ( مثل همین جا attribute:
) مرسومه میگن props.
فقط این مورد رو نمیدونم که بعدش ریپو فورک شده رو دیلیت کنم یا نه...
وقتی ریپو یی رو fork کردی اون ریپو دیگه برای خودت هست. هر کاری میتونی بکنی توش.
ممنون بابت توضیحات 🙌 الان کد رو هم اوکیش میکنم
انجام شد. 🚀 ممنون بابت همه چی ♥ خوش حال شدم ازین همکاری و تبادل نظر ✨
عزیزین. منم همین طور. ❤️
انشالله که تو پروژه های بزرگ تر سعادت همکاری با شما رو داشته باشیم. ✌️
انشاءالله ✨
Hi Again 😁
سلام مهندس @alisalehi1380 ، لطف دارید، من تا مهندس شدن راه زیاد دارم... از توجهتون ممنونم. ✨ من نمیخواستم توی کدهاتون خیلی دست ببرم و برای همین فقط بخش مد نظر رو تغییر دادم. ولی اینطور که شما گفتید بهتره. 🚀 با drop کامیت ها مشکل داشتم، چون بعد از حذف میگفت از repo عقب تری و عجله کردم برنچ رو پاک کردم...
برم سر اصل مطلب
تنها بخشی که یه مقدار مورد بحث هست به نظرم کد:
هستش که دلیلشو بگم چرا نوشتم و بعد شما راهنماییم کنید.
فکر میکنم که تابع
preg_replace
کل حروف رشته رو مورد برسی قرار میده تا رشته هایی که مطابق باregex
هستند رو پیدا کنه. توی فایل هایی که باید ترجمه بشن پیام های زیادی هستند که شامل کلمه ی کلیدی نیستند، و اگر ما همه رو مستقیما بهpreg_replace
بدیم ، پیام های زیادی بدون اینکه شامل کلمه کلیدی باشن تمام کاراکترهاشون مورد برسی قرار میگیرن. هرچند کهstr_contains
هم رشته رو پیمایش میکنه ولی تا زمانی که اولین:
رو پیدا کنه و پیچیدگی کمتری داره و برسی regex پیچیده تر از برسی برابری کاراکترهاست.اینجا شاید بهتر گفته باشه:
In general, it tends to be slower and more resource-intensive than str_contains because it involves compiling and executing a regular expression engine, which can lead to higher time complexity, often O(nm) or worse, where n is the length of the string and m is the length of the pattern
source
more...
البته اینکه برای متن بالا تابع
preg_match
رو برسی کردم بخاطر اینه کهpreg_replace
ابتدا عملیاتی مشابهpreg_match
انجام میده و فقط بعد از این که پیدا شدند میاد و match ها رو عوض میکنه.بخاطر این موضوع به نظرم برسی وجود اینکه اصلا کلمه ای هست و بعد اقدام به استخراج کردن بهتر اومد ولی سر و ته قضیه چیزی نمیشه و خب هرطور شما صلاح بدونید. هرموقع نظرتونو بفرماید من اطاعت میکنم و کامیت میکنم. 🎈