Как локализовать числа для приложения для iPhone?

В моем приложении для iPhone мне нужно к количествам экранного объекта, которые я тогда локализую, так как английский язык делает различие исключительных и множественных, я делаю следующее

//псевдокод

if (objectList.count == 1)
{
   NSLog(@"%@", NSLocalizedString(@"1 object", @"display one objects");
}
else
{
  NSLog(@"%@", NSLocalizedString(@"%d objects", @"display multiple objects");
}

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

Как эта страница объясняет, существует две вещи, которые могут отличаться между языками:

  • Форма, как формы множественного числа создаются, отличается. Это - проблема с языками, которые имеют много неисправностей. Немецкий язык, например, является решительным случаем. Хотя английский и немецкий язык являются частью той же языковой семьи (германский праязык), почти регулярное формирование из форм существительного во множественном числе (добавляющий‘) едва найдено на немецком языке.
  • Количество форм множественного числа отличается. Это несколько удивительно для тех, у кого только есть опыт с Romanic и германскими языками с тех пор здесь, число является тем же (существует два).

Как я должен иметь дело с этим в своем коде?

10
задан zvolkov 27 October 2009 в 18:43
поделиться

1 ответ

NSLocalizedString будет считываться со строковой таблицы в вашем app bundle. Поэтому список языков, которые вам необходимо поддерживать, известен во время компиляции. Вместо того, чтобы беспокоиться о том, как кодировать все возможные языки, просто поддерживайте те, которые вы поддерживаете.

Если ваш переводчик приходит к вам и говорит, что для поддержки марсианского языка вам нужно отдельное написание четных и нечетных чисел, вы можете настроить ваш код затем, на что-то вроде:

if (objectList.count == 1) {
    NSLocalizedString(@"ObjectCount1", @"display one");
} else if (objectList.count % 2 == 0) {
    NSLocalizedString(@"ObjectCountEven", @"display even");
} else if (objectList.count % 2 == 0) {
    NSLocalizedString(@"ObjectCountOdd", @"display odd");
}

en. lproj/Localizable.strings:

ObjectCount1 = "1 object";
ObjectCountEven = "%d objects";
ObjectCountOdd = "%d objects"; // same as ObjectCountEven

mars.lproj/Localizable.strings:

ObjectCount1 = "1 object-o";
ObjectCountEven = "%d object-e";
ObjectCountOdd = "%d object-o"; // same as ObjectCount1

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

11
ответ дан 3 December 2019 в 18:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: