Я интернационализирую свое приложение и ищу решение для решения множественных форм. Я наткнулся на проект Mozilla PluralForm, который существенно абстрагирует проблему множественных чисел для интернационализации. Вот как это работает:
-
Существует ряд "множественных правил", которым могут следовать языки. Каждый язык вписывается в одно и только одно из множества правил множественного числа (документация Mozilla имеет 15 возможных множественных правил). Например, на языках с правилом 0 (например, на китайском) нет множественных форм, и поэтому существует только одна необходимая форма слова. На языках с правилом 1 (например, на немецком языке) каждое слово имеет две различные множественные формы. И так далее, в зависимости от того, как правила совпадают.
-
Когда вы программируете интернационализированную строку, вы не только передаете интернационализированную строку, но и номер, который вы хотите разделить на существительное с помощью:
print("You have " + num + " " + PluralForm.get(num, downloads) + ".");
В Objective-C можно сделать это по-другому:
NSString *str = [NSString stringWithFormat:NSLocalizedStringFromTable(@"%d Items"), myNumber];
Конечно, этот пример Objective-C не решает проблему множественных форм.
-
Когда функция PluralForm.get получает вызов, в зависимости от языка, который в настоящее время используется, он применяет множественную форму и вытаскивает соответствующую интернационализированную строку из файла строк в зависимости от того, какое конкретное под-правило должно следовать.
Преимущество PluralForm ясно (по крайней мере для меня). Он абстрагирует фактические языковые правила от кодера, так что их не нужно дублировать во всех местах, где вам приходится иметь дело с множественной формой.
Я бы хотел использовать такую систему, как при программировании приложений для iPhone. Есть ли проект или код, который порты Mozilla PluralForm для objective-c?