Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix again: translation keywords #6

Merged

Conversation

am-mokhtari
Copy link
Contributor

Hi Again 😁

سلام مهندس @alisalehi1380 ، لطف دارید، من تا مهندس شدن راه زیاد دارم...
از توجهتون ممنونم. ✨
من نمیخواستم توی کدهاتون خیلی دست ببرم و برای همین فقط بخش مد نظر رو تغییر دادم. ولی اینطور که شما گفتید بهتره. 🚀
با drop کامیت ها مشکل داشتم، چون بعد از حذف میگفت از repo عقب تری و عجله کردم برنچ رو پاک کردم...
برم سر اصل مطلب

تنها بخشی که یه مقدار مورد بحث هست به نظرم کد:

if (str_contains($value, ':'))

هستش که دلیلشو بگم چرا نوشتم و بعد شما راهنماییم کنید.

فکر میکنم که تابع 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 ها رو عوض میکنه.

بخاطر این موضوع به نظرم برسی وجود اینکه اصلا کلمه ای هست و بعد اقدام به استخراج کردن بهتر اومد ولی سر و ته قضیه چیزی نمیشه و خب هرطور شما صلاح بدونید.
هرموقع نظرتونو بفرماید من اطاعت میکنم و کامیت میکنم. 🎈

@am-mokhtari am-mokhtari changed the title fix 2 : translation keywords fix again: translation keywords Sep 4, 2024
@alisalehi1380
Copy link
Owner

alisalehi1380 commented Sep 8, 2024

با سلام و وقت بخیر
نفرمایید. عزیزین.❤️

کلا سعی کن روی گیت خیلی مسلط بشی چون توی پکیج های مهم اینطور نیست که اون PR رو ببندی و یکی دیگه ایجاد کنی!
image
اگه از 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;

در کل هم ببخشید اگه دیر جواب میدم. چون همونطور که خودت هم میدونی اپن سورس درامدی نداره. از این رو در تایم خالی روش وقت میزارم. بازم ببخشید اگه خیلی دیر به دیر جواب میدم.🙏

@am-mokhtari
Copy link
Contributor Author

am-mokhtari commented Sep 8, 2024

سلام ممنون. دقیقا مشکلم برای drop کردن سر force بود که نمیدونستم و بعد که دیلیت کردم فهمیدم که من پوش معمولی رو میزدم و این مورد باید فورس باشه.
با توجه به کدی که توی پیام قبلی پیشنهاد دادید حدس زدم که خیلی وقت پیش کدهاشو نوشته باشید چون سبکش فرق داشت. (نمیدونم بر چه اساس اینجوری فکر کردم.)
دقیقا نمیدونم props چه مفهومی داره پس به زبون خودم بگم 😅 (لطف کنید یادم بدید ممنون میشم). به نظرم توی حالت فعلی لاراول مواردی که توی شرط ما صدق نمیکنن تقریبا تعداد برابری با مواردی که صدق میکنن دارن برای همین تعدادشون جوری نبود که بگم بیخیالشون شیم، و این که برای جملات قابل قبول هم دوتا تابع اجرا میشه رو میدونستم ولی اینطور حساب کردم که فرض کنیم برای همه ی جملات تابعی پرهزینه تر اجرا بشه بهتره یا برای نصف جملات تابع پرهزینه و کم هزینه و نصف دیگه کم هزینه؟ به نظرم اومد مورد دوم اصولی تر باشه ولی نمیدونم... الان کد پیشنهادی شما ظاهرش بهتره... همین رو اعمال میکنم.
معمولا اول هرموضوعی سخت فکر میکنم ولی بعدا متوجهش میشم 😅 شاید تاثیر دانشگاهه 😂
درمورد اینکه دیر جواب میدید اصلا اشکالی نداره. من چون این پکیج خیلی کارایی داره و دوست نداشتم این عیب رو داشته باشه مخصوصا که 23 تا ستاره داره و دلم میخواد با خیال راحت زحمت ترجمه رو بهش بسپریم نه که هربار بگم یادم باشه ویژگی: ها رو ادیت کنم.
درمورد کد، الان ادیت میکنم و احتمالا وقتی پیامم رو دیدید میتونید مرج کنید. خداروشکر کار تکمیله 🚀
فقط این مورد رو نمیدونم که بعدش ریپو فورک شده رو دیلیت کنم یا نه...

@am-mokhtari
Copy link
Contributor Author

Congratulation @alisalehi1380 🌟
Done. 🚀

دوس ندارم کشش بدم ولی بگم که الان که if رو مثل کد پیشنهادی شما نوشتم str_replace هم به برای همه ی پیام ها انجام میشه. به نظرم مهم نیست. مرج کنید

@alisalehi1380
Copy link
Owner

اره من دیشب حواسم به اون نبود. این اوکیه.

فقط حواست باشه که باید فقط قسمتی از کد رو که میخوای تغییر بدی، تغییر بدی. نه کل سورس کد رو! الان توی اون لاین های بین توابع، فاصله ها رو حذف کردی. ولی در کل اوکیه.
دقیقا همین کد رو بزار جای اون تابع.

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;
}

@alisalehi1380
Copy link
Owner

alisalehi1380 commented Sep 9, 2024

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 کردی اون ریپو دیگه برای خودت هست. هر کاری میتونی بکنی توش.

@am-mokhtari
Copy link
Contributor Author

am-mokhtari commented Sep 9, 2024

ممنون بابت توضیحات 🙌
الان کد رو هم اوکیش میکنم

@am-mokhtari am-mokhtari force-pushed the fix/translation-keywords branch from ca75cf8 to 4fe94ef Compare September 9, 2024 18:25
@am-mokhtari am-mokhtari closed this Sep 9, 2024
@am-mokhtari am-mokhtari force-pushed the fix/translation-keywords branch from a01b7ed to e52f481 Compare September 9, 2024 18:37
@am-mokhtari am-mokhtari reopened this Sep 9, 2024
@am-mokhtari
Copy link
Contributor Author

انجام شد. 🚀
ممنون بابت همه چی ♥ خوش حال شدم ازین همکاری و تبادل نظر ✨

@alisalehi1380 alisalehi1380 merged commit c18e097 into alisalehi1380:master Sep 9, 2024
@alisalehi1380
Copy link
Owner

عزیزین. منم همین طور. ❤️

انشالله که تو پروژه های بزرگ تر سعادت همکاری با شما رو داشته باشیم. ✌️

@am-mokhtari
Copy link
Contributor Author

ان‌شاءالله ✨

@am-mokhtari am-mokhtari deleted the fix/translation-keywords branch September 9, 2024 22:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants