Международная плюрализация Lib для Objective-C? - PullRequest
14 голосов
/ 27 февраля 2011

Я интернационализирую свое приложение и ищу решение, как работать с множественными формами. Я наткнулся на проект Mozilla PluralForm , который по существу абстрагирует проблему множественного числа для интернационализации. Вот как это работает:

  1. Существует ряд «множественных правил», которым могут следовать языки. Каждый язык вписывается в одно и только одно из множества правил множественного числа (документация Mozilla содержит 15 правил потенциального множественного числа). Например, в языках с правилом 0 (например, в китайском) нет множественных форм, и поэтому существует только одна необходимая словоформа. В языках с правилом 1 (например, немецком) каждое слово имеет две различные формы множественного числа. И так далее, в зависимости от соответствия правил.

  2. Когда вы программируете интернационализированную строку, вы передаете не только строку, которая должна быть интернационализирована, но и число, которое вы хотите умножить на существительное:

    print("You have " + num + " " + PluralForm.get(num, downloads) + ".");

    В Objective-C можно было бы сделать это по-другому:

    NSString *str = [NSString stringWithFormat:NSLocalizedStringFromTable(@"%d Items"), myNumber];

    Конечно, этот приведенный выше пример Objective-C не решает проблему множественного числа.

  3. Когда функция PluralForm.get получает вызов, в зависимости от используемого в настоящее время языка, она применяет форму множественного числа и извлекает нужную интернационализированную строку из файла строк в зависимости от того, какое конкретное подправило ей следует следовать.

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

Я бы хотел использовать систему, как при программировании приложений для iPhone. Есть ли доступный проект или код, который портирует PluralForm в Mozilla на target-c?

Ответы [ 2 ]

4 голосов
/ 28 марта 2013

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 элемента обработано";

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

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

0 голосов
/ 27 июня 2012

Взглянув на реализацию Mozilla PluralForm.jsm , будет довольно легко реализовать собственную версию PluralForm.get в Objective-C.

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...