תארו לעצמכם: אתם משיקים אפליקציה עם לוקליזציה לרוסית, והמשתמש רואה '2 товаров' במקום '2 товара'. נשמע מוכר? צוות מפתחי המובייל שלנו עם חמש שנות ניסיון נתקל בזה עשרות פעמים. פלורליזציה נכונה אינה גחמה—זו דרישה לפרסום בחנות והיסוד לאמון המשתמשים. באנגלית יש רק שתי צורות: one ו-other. ברוסית יש ארבע: one, few, many ו-other. התעלמות מכך היא באג מובטח בלוקליזציה לכל שפה סלאבית. הפתרון שלנו מבוסס על תקן CLDR (Common Locale Data Repository), הנתמך על ידי כל המסגרות המודרניות. לפי הנתונים שלנו, יישום פלורליזציה בתחילת פרויקט מפחית באגי לוקליזציה ב-80%, והחיסכון בתיקון שגיאות אלה יכול להגיע ל-70% מתקציב הלוקליזציה. קבלו ייעוץ על יישום פלורליזציה בפרויקט שלכם היום.
אילו בעיות פלורליזציה נכונה פותרת?
שגיאות דקדוקיות בממשק המשתמש. סיומות שגויות (לדוגמה, '5 пользователей' במקום '5 пользователей' ברוסית) מפחיתות את האמון במוצר. בעיות בפרסום בחנות: חוקים מחמירים דורשים לוקליזציה נכונה, אחרת דחיית שחרור. עלויות עבודה נוספות: אם לא מתכננים פלורליזציה מראש, שכתוב קוד לכל שפה חדשה הוא יקר ומסוכן.
למה CLDR הוא התקן הנכון היחיד
CLDR מספק מערכת חוקים אוניברסלית לכל השפות. שימוש בתנאים מותאמים אישית המבוססים על אופרטור % מוביל לבאגים למספרים שברים, שליליים ואפס. לדוגמה, CLDR לרוסית מחזיר 'other' עבור מספרים 0, 0.5, 1.5, 2.1, לא 'few'. הפתרון המקורי (plurals.xml / stringsdict) אמין פי חמישה מאשר לוגיקת if מותאמת אישית—הוא מבטל באגים למספרים לא סטנדרטיים.
דוגמאות לצורות ברוסית לפי CLDR
| קטגוריית CLDR | מספר לדוגמה | צורת מילה |
|---|---|---|
| one | 1, 21, 31 | товар |
| few | 2, 3, 4, 22 | товара |
| many | 5, 6, 7, 11 | товаров |
| other | 0, 1.5, 2.1 | товара |
איך ליישם פלורליזציה בכל פלטפורמה?
אנדרואיד. השתמשו בקובץ res/values-ru/plurals.xml:
<plurals name="items_count">
<item quantity="one">%d товар</item>
<item quantity="few">%d товара</item>
<item quantity="many">%d товаров</item>
<item quantity="other">%d товара</item>
</plurals>קריאה: <plurals name="items_count"> <item quantity="one">%d товар</item> <item quantity="few">%d товара</item> <item quantity="many">%d товаров</item> <item quantity="other">%d товара</item> </plurals> . ה-resources.getQuantityString(R.plurals.items_count, count, count) הראשון מיועד לבחירת צורה, ה-count השני להחלפה ב-count. טעות נפוצה: העברת ארגומנט אחד בלבד—ואז המספר לא מוחלף במחרוזת.
iOS. צרו %d (פורמט plist) עם המפתח וחוקים מקוננים. המבנה כולל Localizable.stringsdict וקטגוריות CLDR. עבור חבילות Swift עם Xcode 15+, השתמשו ב-String Catalog—עורך חזותי לצורות פלורליזציה.
קריאה: NSStringLocalizedFormatKey—בוחר אוטומטית את הצורה הנכונה.
Flutter. החבילה String(format: NSLocalizedString("items_count", comment: ""), count) מספקת את המתודה intl:
Intl.plural(
count,
zero: 'нет товаров',
one: '$count товар',
few: '$count товара',
many: '$count товаров',
other: '$count товара',
locale: 'ru',
);או דרך קבצי ARB עם יצירת Intl.plural()—תארו פלורליזציה ב-Intl.plural( count, zero: 'нет товаров', one: '$count товар', few: '$count товара', many: '$count товаров', other: '$count товара', locale: 'ru', ); עם תחביר ICU.
React Native. השתמשו ב-flutter gen-l10n עם התוסף app_ru.arb או ב-i18next המקורי (זמין מ-RN 0.70+). ידנית: i18next-icu מחזיר 'one'/'few'/'many'/'other', ולפיו בוחרים את הצורה מאובייקט התרגומים.
const pluralRules = new Intl.PluralRules('ru');
const form = pluralRules.select(count);
const translations = {
one: `${count} товар`,
few: `${count} товара`,
many: `${count} товаров`,
other: `${count} товара`,
};
console.log(translations[form]); השוואת גישות
| פלטפורמה | מנגנון | מספר צורות (רוסית) | יצירה |
|---|---|---|---|
| אנדרואיד | Intl.PluralRules | 4 (one/few/many/other) | ידנית או דרך שירות לוקליזציה |
| iOS | new Intl.PluralRules('ru').select(count) / String Catalog | 4 (one/few/many/other) | ידנית או דרך Xcode |
| Flutter | const pluralRules = new Intl.PluralRules('ru'); const form = pluralRules.select(count); const translations = { one: `${count} товар`, few: `${count} товара`, many: `${count} товаров`, other: `${count} товара`, }; console.log(translations[form]); / ARB | 4 (one/few/many/other) | אוטומטית דרך gen-l10n |
| React Native | plurals.xml / stringsdict | 4 (one/few/many/other) | ידנית |
איך לבדוק פלורליזציה במקרי קצה?
בדקו בהכרח את המספרים 0, 1, 2, 5, 21, 1.5, 1-. ברוסית, 21 שייך לצורת 'one', ו-1.5 ל-'other'. עבור כל שפה, ערכים אלה שונים. כתבו בדיקות יחידה שעוברות על כל מספרי הקצה ובודקות שהצורה הנכונה מוחזרת. השתמשו בטבלת CLDR ליצירה אוטומטית של ערכות בדיקה.
שגיאות טיפוסיות והפתרונות שלהן
- שימוש רק ב-one ו-many ללא התחשבות ב-few לשפות סלאביות—באגים למספרים 2, 3, 4.
- סדר ארגומנטים שגוי באנדרואיד—המספר לא מוחלף אם מועבר פרמטר אחד בלבד.
- התעלמות ממספרים שברים (לדוגמה, 1.5)—ללא CLDR צורת 'other' לא מיושמת.
- לוגיקת if מותאמת אישית המבוססת על אופרטור %—כשמוסיפים שפה חדשה, תצטרכו לשכתב תנאים.
הפתרון שלנו מבטל שגיאות אלה לחלוטין על ידי הקפדה על CLDR ובדיקות אוטומטיות על ערכי קצה.
מה כלול בעבודה
- ביקורת על בסיס הקוד והתרגומים הנוכחיים.
- פיתוח תכנית פלורליזציה לכל שפות היעד.
- יישום פתרונות מקוריים (
Intl.plural,i18next-icu, ARB, i18next). - כתיבת בדיקות למקרי קצה (0, 1, 2, 5, 21, 1.5).
- תיעוד והדרכת צוות.
לצוות שלנו חמש שנות ניסיון בפיתוח מובייל והוא יישם 30+ פרויקטים עם לוקליזציה. אנו מבטיחים התנהגות נכונה של צורות פלורליזציה בכל המכשירים. עלות היישום מחזירה את עצמה בחודשים הראשונים לאחר הפרסום בזכות הפחתת דוחות באגים.
לוח זמנים: מארבע שעות (ביקורת + החלפת hardcode) ועד יומיים (אם יש פלורליזציה במספר שפות ורכיבים מותאמים אישית). צרו קשר לביקורת על הפרויקט שלכם—נציע את הפתרון האופטימלי. בקשו ייעוץ היום כדי להימנע מבאגי לוקליזציה.







