1

Я не уверен, как правильно использовать NSNumberFormatter для следующего случая и правильно сохранить локализацию/интернационализацию.Интернационализация номеров и величин

Выход на английском языке:

0 bananas 
1 banana 
5 bananas 

Что я должен сделать, чтобы правильно держать интернационализация/локализации?

ответ

4

Интернационализация множественных чисел - сложная проблема. Я не эксперт, но на разных языках существуют различные схемы множественного числа, выходящие за пределы простого английского языка. «1 - единственное, все остальные - множественные». Некоторые языки имеют разные формы для 0, 1, 2, 3 и> 3. Учитывая сложность языков, возможно, существуют еще более сложные схемы.

Ничего в Какао, включая NSNumberFormatter, предоставляет любую помощь за пределами обычной локализации строк NSLocalizedString и друзей. Итак, вы можете использовать NSLocalizedString с такими ключами, как «0 бананов», «1 банан», «2 банана», «3 банана» и «% d бананы». Затем используйте переключатель, чтобы загрузить его для фактического количества бананов, которые вы хотите отформатировать.

Другой подход заключается в том, чтобы использовать и использовать строку типа «бананы:% d».

Или вы можете комбинировать методы, предоставляя локализованные строки для 0, 1 и> 1 и предлагать переводчикам, что они переключаются на стиль пунта, если эти формы недостаточны для их языка.

1

Кен хорошо ответил.

Я бы добавил это.

В первом приближении лучше давать переводчикам полные фразы, поскольку грамматика варьируется между языками. Но этого недостаточно. Вы должны быть готовы обработать некоторые запросы от команды перевода. Например, на французском языке, лодка переводится в le bateau, самолет в l'avion (и не le Avion). Довольно часто переводчики используют трюки, чтобы избежать такой ситуации, вводя специальные случаи, но это не всегда возможно и не желательно.

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

Со временем и опытом вы привыкнете к этому. Я работал более 10 лет на программном обеспечении, локализованном на многих языках (от 7 до 23, я думаю, не совсем уверен около 23 тыс.). Вы узнаете, где вещи становятся проблематичными и некоторые особенности этих языков. К сожалению, проблем не так много: множественные числа, жанры, схватки являются наиболее распространенными. Форматы обычно хорошо обрабатываются API-интерфейсом системы. Это очень интересно!

0

Я только что разместил JJPluralForm, адаптацию для PluralForm от Mozilla.

При том, что вам не придется беспокоиться о делать все if-else, switch-case кода, чтобы сделать локализации в коде, который становится невозможным поддерживать в качестве числа локализаций растут (русские есть 3 множественное число правил, арабские имеет 6 , и т. д.).

Что-то вроде примера вы дали могли быть обработаны с:

[[JJPluralForm sharedManager] pluralStringForNumber:numberOfBananas 
            withPluralForms:NSLocalizedString(@"N_BANANAS_PLURAL_STRING", @"") 
            localizeNumeral:YES]; 

Каждый Localizable.strings file затем локализовать N_BANANAS_PLURAL_STRING в виде списка разделенных точкой с запятой форм множественного числа. Для английского языка это будет "%@ banana;%@ bananas".

Для получения дополнительной информации посетите проект.

Смежные вопросы