در 14 زبان از 42 زبان ما، صیغه جمع به نام «one» فقط برای 1 نیست
زبانها
رشته «یک عادت برای امروز باقی مانده» در یک اپلیکیشن، همخانوادهای به نام «%d عادت برای امروز باقی مانده» دارد. اندروید بر اساس دستهبندی بین آنها انتخاب میکند: انگلیسی از «one» برای 1 و از «other» برای بقیه استفاده میکند. در روسی، دسته «one» برای 1، 21، 31، 41 و به همین ترتیب به کار میرود. بررسی ترجمه ما دو بار در همان روز، یک بار در هر جهت، آن را اشتباه تشخیص داد.
ترجمهای درست که رد شد
در 2 نوامبر، کیت ترجمه خود را دوباره روی اپلیکیشن نمونه اجرا کردیم. برای «one» در روسی، مدل «Осталась %d привычка на сегодня» نوشت: «%d عادت برای امروز باقی مانده»، همراه با عدد. بررسی ما آن را با صیغه «one» انگلیسی مقایسه کرد، یک %d یافت که انگلیسی آن را نداشت و آن را به عنوان یک placeholder ساختگی رد کرد. مدل درست گفته بود. کاربری که 21 عادت باقیمانده دارد این صیغه را میبیند، پس باید عدد را نشان دهد. ما بررسی را تغییر دادیم: یک صیغه میتواند عددی را که صیغه «other» انگلیسی استفاده میکند، اضافه کند. اجرای بعدی، هر 350 رشته اپلیکیشن نمونه را نوشت.
ترجمهای نادرست که قبول میشد
همان بررسی، حالت مخالف را قبول میکرد. اگر مدل «Осталась одна привычка» («یک عادت باقی مانده») نوشته بود، چیزی از رشته از بین نمیرفت، پس قبول میشد و به کاربری که 21 عادت باقیمانده داشت گفته میشد که یک عادت دارد. قانون قدیمی اجازه میداد هر صیغه «one» عدد را حذف کند، زیرا در انگلیسی «one» فقط 1 است.
اکنون بررسی میداند هر دسته کدام اعداد را پوشش میدهد، از CLDR، یعنی قواعد جمع یونیکد که اندروید و 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{…} در پیام، «one» فرانسوی فقط 1 را نگه میدارد و بررسی این را در نظر میگیرد.
بررسیشده با رشتههای خود اندروید
پیش از انتشار قاعده، آن را روی پیامهای جمع در رشتههای چارچوب Android اجرا کردیم: 897 ترجمه در 39 زبان ما. هیچ موردی را علامت نزد. مترجمان گوگل عدد را در هر شاخهای که چند عدد را پوشش میدهد قرار دادهاند، از جمله شاخه «یک» در روسی، حتی در مواردی که انگلیسی برای 1 شاخهای مستقل دارد. وقتی بهصورت دستی عدد را از یکی از شاخههای «یک» روسی حذف کردیم، بررسی نشان داد که این شکل برای 21، 31، 41 و 51 نیز استفاده میشود.
قاعده در translation-checks نسخه 1.2.0، رایگان در GitHub، برای پیامهای ICU و در Polyglot نسخه 1.2.0 برای جمعهای Android و پیامهای ICU هر دو موجود است. سایر بررسیهایی که این هفته اضافه کردیم در یادداشت درباره حروف الفبای دیگر آمدهاند.