Подтвердить что ты не робот

Международная плюрализация Lib для Objective-C?

Я интернационализирую свое приложение и ищу решение для решения множественных форм. Я наткнулся на проект 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?

4b9b3361

Ответ 1

Smartling (платформа управления переводом) выпустила библиотеку с открытым исходным кодом для управления множественными номерами в iOS. После того, как вы столкнулись с многочисленными клиентами, имеющими проблемы с множественными множественными номерами iOS, и не нашли решения, которые будут работать, как мы и наши клиенты хотели, мы решили создать собственный.

Библиотека берет ключи для множественных строк и расширяет их, чтобы содержать множественную форму, основанную на множественных правилах CLDR. Библиотека предоставляет альтернативную функцию NSLocalizedString под названием SLPluralizedString для поиска.

Английский исходный файл будет выглядеть так:

"%d Items Processed##{one}"   = "1 Item Processed";    
"%d Items Processed##{other}" = "%d Items Processed";

И вы должны использовать функцию SLPluralizedString для поиска строки:

SLPluralizedString(@"%d Items Processed", numItems, @"Number of items processed");

У переведенного русского файла будет соответствующее количество ключей/значений для языка:

"%d Items Processed##{one}"   = "%d элемент обработан";
"%d Items Processed##{few}"   = "%d элемента обработано";
"%d Items Processed##{many}"  = "%d элементов обработано";
"%d Items Processed##{other}" = "%d элемента обработано";

Фактический код не должен меняться в зависимости от языка. Одна функция будет работать на всех языках и возвращать соответствующую переведенную строку.

Не стесняйтесь делиться комментариями, улучшениями и т.д.

Ответ 2

От взгляда на Mozilla реализация PluralForm.jsm должно быть довольно просто реализовать собственную версию PluralForm.get в Objective-C.

Сначала вы извлекаете номер множественного правила из вашей локализации и используете его для выбора соответствующего получателя, который реализует правило. Есть 16 выражений (1) которые возвращают индекс правильной множественной формы для использования для данной цифры. К счастью, они, похоже, написаны в подмножестве JavaScript, который также является допустимым кодом C... Булевы и тройные выражения с некоторыми модульными операциями, смешанными в.

Множественные формы предоставляются вашими переводчиками в виде списка с разделителями с запятой в локализованной строке для данного слова. Порядок форм описан в списке множественных правил. Вы разделите их точкой с запятой и с помощью индекса от получателя выберите соответствующую форму.

Технически, никаких проблем. Единственная проблема заключается в том, что я не знаю, как правильно вывести код и уважать лицензию MPL.

(1) Реализация содержит 17-е правило для Бретона, но его формы еще не задокументированы, поэтому...