في 14 من لغاتنا الـ 42، لا تقتصر صيغة الجمع المسماة "one" على العدد 1 فقط
اللغات
تحتوي سلسلة نصية في التطبيق مثل "One habit left today" على صيغة جمع مرافقة هي "%d habits left today". يختار نظام Android بينهما حسب الفئة: تستخدم الإنجليزية "one" للعدد 1 و"other" لكل ما عداه. أما في الروسية فتُستخدم الفئة "one" للأعداد 1 و21 و31 و41 وهكذا. أخطأ فحص الترجمة لدينا في ذلك مرتين في اليوم نفسه، مرة في كل اتجاه.
الترجمة الصحيحة التي رفضها
في 2 نوفمبر، أعدنا تشغيل حزمة الترجمة على التطبيق التجريبي الخاص بها. بالنسبة للفئة "one" في الروسية، كتب النموذج "Осталась %d привычка на сегодня": أي "%d habit left today"، مع الرقم. قارن فحصنا هذه الصيغة بصيغة "one" الإنجليزية، فوجد فيها %d غير موجودة في الإنجليزية، ورفضها بوصفها عنصرًا نائبيًا مُختلَقًا. كان النموذج محقًا. فالمستخدم الذي بقي لديه 21 عادة يحصل على هذه الصيغة، لذا يجب أن تعرض الرقم. غيّرنا الفحص: يجوز للصيغة إضافة العدد الذي تستخدمه صيغة "other" الإنجليزية. وفي التشغيل التالي كتب النموذج جميع السلاسل النصية الـ 350 في التطبيق التجريبي.
الترجمة الخاطئة التي كان سيقبلها
سمح الفحص نفسه بالمرور للعكس. فلو كتب النموذج "Осталась одна привычка" (أي "one habit left")، لما فُقد شيء من السلسلة النصية، فمرّ الفحص، وكان سيُخبر المستخدم الذي بقي لديه 21 عادة بأن لديه عادة واحدة. كانت القاعدة القديمة تسمح لأي صيغة "one" بحذف الرقم، لأن "one" في الإنجليزية تعني 1 فقط.
أما الآن فيعرف الفحص الأعداد التي تغطيها كل فئة، انطلاقًا من بيانات CLDR، وهي قواعد الجمع في يونيكود التي يستخدمها Android وICU. يجب أن تعرض الصيغة المخصصة لفئة تغطي عدة أرقام العددَ. أما الصيغة المخصصة لرقم واحد فيجوز لها حذفه: فـ "one" في الألمانية تعني 1 فقط، لذا فإن "Noch eine Gewohnheit" صحيحة هناك.
حيث لا تعني "one" العدد 1 فقط
في 14 من لغات الهدف الـ 41 التي تعرفها بيانات CLDR في Babel 2.10، تغطي "one" أكثر من العدد 1:
- 1، 21، 31، 41…: الروسية، الأوكرانية، الصربية، المقدونية.
- 0 و1: الفرنسية، البرتغالية، الفارسية، الأرمينية، الكانادية، البنجابية، الأمهرية. ستُعرض "Une habitude restante" للعدد 0 من العادات.
- 1 و11: الغيلية الاسكتلندية. 1، 101، 201…: السلوفينية، حيث تغطي "two" أيضًا 102 و202.
- كل عدد لا ينتهي بـ 4 أو 6 أو 9: الفلبينية.
في رسائل ICU، يغيّر فرعٌ خاصٌّ به هذا السلوك. فعند استخدام =0{…} في الرسالة، يبقى العدد «واحد» في الفرنسية محصورًا في الرقم 1 فقط، ويأخذ الفحص ذلك في الحسبان.
تم التحقق مقابل سلاسل Android النصية الخاصة
قبل إطلاق القاعدة، شغّلناها على الرسائل الجمع في سلاسل إطار عمل Android: 897 ترجمة في 39 من لغاتنا. لم تُظهر أي تنبيهات. وضع مترجمو Google الرقم في كل فرع يغطي عدة أرقام، بما في ذلك صيغة «المفرد» في الروسية، حتى حيث تخصص الإنجليزية فرعًا خاصًا للرقم 1. وعندما أزلنا الرقم يدويًا من فرع «المفرد» الروسي واحد، أخبرنا الفحص بأن الصيغة تُستخدم أيضًا للأرقام 21 و31 و41 و51.
القاعدة موجودة في translation-checks 1.2.0، متاحة مجانًا على GitHub، لرسائل ICU، وفي Polyglot 1.2.0 لجمعيات Android ورسائل ICU على حد سواء. الفحوصات الأخرى التي أضفناها هذا الأسبوع موجودة في ملاحظة حول أحرف من نص آخر.