لماذا تختلف صيغة الجمع من لغة إلى أخرى
تتبع الفئات zero وone وtwo وfew وmany وother قواعد CLDR لكل لغة. في الإنجليزية لا تعني one إلا 1؛ وفي الفرنسية تشمل 0 و1؛ وتضيف الروسية والبولندية few وmany؛ وتستخدم العربية الفئات الست كلها؛ وليس لليابانية إلا فئة واحدة هي other. لذلك تصبح الرسالة ذات الفرعين المكتوبة للإنجليزية ناقصة بمجرد ترجمتها.
تقرأ الأداة هذه القواعد في متصفحك (Intl.PluralRules): الفئات والأعداد التوضيحية المعروضة هي فئات اللغة نفسها، دون جدول يحتاج إلى صيانة.
فخّ =1 مع gen-l10n
يصبح الفرع =1 فئة one في الشيفرة التي يولّدها flutter gen-l10n. وفي الفرنسية تنطبق هذه الفئة على الصفر أيضًا: مع count = 0 ستظهر عبارة «1 article restant». فضّل فئة one مع العدد داخل النص، أو أضف فرع =0: تقترحه الأداة خانة اختيار. التفاصيل في دليل صيغ الجمع والعناصر النائبة في ICU.
كيف تستخدم النتيجة
- انسخ سطر
"key": "{count, plural, …}" الخاص بكل لغة إلى ملف app_xx.arb المقابل.
- أضف بيانات
@key الوصفية مرة واحدة، في ملف القالب.
- شغّل
flutter gen-l10n: غياب فرع other أو قوس غير مغلق يوقف التوليد مع ذكر اسم الملف.
للتحقق بعد ذلك من أن أي ترجمة لم تحذف عنصرها النائب أو تُعِد تسميته، استخدم فاحص المفاتيح الناقصة في ملفات ARB.
حدود الأداة
تولّد الأداة البنية لا الترجمة: أنت من يكتب نص كل صيغة. ولا تعالج رسائل select ولا صيغ الجمع المتداخلة، ولا تضاعف علامات الاقتباس المفردة إن فعّلت use-escaping في l10n.yaml.