ترجمههای لاراول رو قطعی کن
خلاصهٔ کاملتر
نویسنده میگه مدلهای زبانی ذاتاً غیرقطعیان، یه سؤال رو دو بار بپرسی ممکنه دو جواب بگیری، پس نمیشه کامل روشون ابزار ساخت. ولی به گفتهٔ او اگه کار رو به دو بخش استدلال (کار مدل) و اجرا (کار اسکریپت) بشکنی، بازم خروجی قطعی میگیری. اپ لاراولیشون ترجمهها رو به هفت زبان داره و lang/en مرجع اصلیه؛ هر بار یه فیچر جدید میره بالا، کلیدهای تازه باید تو آلمانی، فرانسوی، اسپانیایی، ایتالیایی، پرتغالی و هلندی هم اضافه بشن.
مشکل اینجاست که وقتی به ایجنت میگی «ترجمههای جامونده رو پر کن»، خودش شروع میکنه به grep زدن و diff گرفتن؛ هم توکن بیشتری میسوزه، هم اشتباه میکنه. پس اسکریپت مسئول پیدا کردن کلیدهای کمشدهست و مدل فقط ترجمه و تصمیمهای سلیقهای مثل لحن و حفظ اصطلاحهای برند رو انجام میده. خود اسکریپت سادهست: روی فایلهای lang/en و زبان مقصد میگرده و کلیدهای هر فایل رو با هم مقایسه میکنه:
$sourceTranslations = require $sourceFile;
$targetTranslations = require $targetFile;
$missingKeys = array_diff_key($sourceTranslations, $targetTranslations);به گفتهٔ نویسنده فرقش تو عمل معلوم میشه: ایجنت وقتی خودش گشت گفت ۵۶ کلید تو هر زبان کمه، ولی با اجرای اسکریپت عدد درست ۴۷ شد. همون اسکریپت هر بار نتیجهٔ یکسان میده، فارغ از اینکه چه مدلی با چه سطح تلاشی اجراش کنه. یه نکتهٔ ریز هم هست: array_diff_key() فقط کلیدهای سطح اول رو مقایسه میکنه و چون فایلهای زبان اون پروژه آرایهٔ تودرتو ندارن، همین کافیه.
اسکریپت بخشی از یه skill به اسم translate-files تو Claude Code هست و کنار SKILL.md تو پوشهٔ scripts/ نشسته. اولین قانون skill اینه که به خروجی اسکریپت اعتماد کن و خودت فایلها رو grep و diff نکن. بقیهاش قانونهای ترجمهست: placeholderهای لاراول مثل :count و :name دستنخورده بمونن، علامت | جمعبندی سر جاش بمونه و دو طرفش جدا ترجمه بشه، و اصطلاحهای برند که تو references/brand-terms.md لیست شدن ترجمه نشن.
آخر کار اسکریپت دوباره اجرا میشه و باید فقط یه خط برگردونه که چیزی جا نمونده، بعدش هم php -l روی فایل میخوره تا یه آپاستروف سرگردون فایل رو خراب نکرده باشه. نویسنده میگه این skill رو مستقیم صدا نمیزنه؛ یه skill دیگه به اسم create-pr قبل از ساختن pull request صداش میکنه و بعد تغییرها رو کامیت میکنه.
نکات کلیدی:
- ایجنت بدون اسکریپت ۵۶ کلید کمشده گزارش داد، با اسکریپت عدد درست ۴۷ شد
- پروژه هفت زبان داره و lang/en مرجع اصلی کلیدهاست
- array_diff_key() فقط کلیدهای سطح اول رو مقایسه میکنه، که برای فایلهای زبان بدون آرایهٔ تودرتو کافیه
- اعتبارسنجی دو مرحلهایه: اجرای دوبارهٔ اسکریپت و بعد php -l روی فایل ترجمه
- اسکریپت مستقل PHP جای Artisan command انتخاب شد تا skill به یه پروژهٔ خاص گره نخوره




