Как упростить локализацию iPhone?

Мне нужно локализовать приложение для разработки на английском и испанском языках.

Несмотря на то, что я следую примеру Apple, использую NSLocalizedString и создаю nibs для обоих, я уже потерял трек новой строки, которую нужно локализовать, и с удивлением обнаружил, что мне нужно переделать перья на испанский, когда я меняю мастер.

(Подобно этому http://www.gigliwood.com/weblog/Cocoa/A_Great_Need_for_Be.html)

Интересно, существует ли лучший/альтернативный/более автоматический способ.

Я знаю использование gettext и poedit и задаюсь вопросом, можно ли использовать что-то подобное.

Или, если существует некоторый script или инструмент для этого.

Ответы

Ответ 1

Здесь действительно нелегко исправить ситуацию. Для каждого языка должны быть индивидуально размещены НИБ. В какой-то мере это улучшает общий пользовательский интерфейс, потому что разные языки на самом деле часто нуждаются в разной компоновке, чтобы выглядеть лучше. Русские и немецкие языки являются "более крупными" в экранной недвижимости, чем английский. Китайцы часто могут быть намного меньше, а другой макет выглядит лучше с китайскими иероглифами. Арабский и иврит - справа налево и могут нуждаться в радикальных изменениях в макете. Автоматизированная компоновка проста, но достигается благодаря ее разным уровням уродливости на всех языках. Когда дается выбор между легким для разработчика и уродливым против сложного для разработчика и красивым, Apple почти всегда выбирает последнее. Тем не менее, Apple все еще не сделала это почти так же легко, как только могли.

Итак, первый урок состоит в том, чтобы сохранить ваши NIB просто. Это проще на iPhone, чем на Mac, потому что iPhone не имеет привязок, а iPhone NIB вообще проще в любом случае. Вы также можете использовать текстовую инъекцию для NIB, которые имеют очень небольшое количество текста (например, название). "Text injection" - это причудливый способ сказать "использовать розетку для метки и установить ее в локализованный текст при загрузке представления".

ibtool может вытаскивать строки из NIB и также вставлять их обратно, что может быть полезно. Я использовал iLocalize, что полезно для работы с контрактными локализаторами, но на самом деле не помогает с проблемой, о которой вы говорите.

Я попытался избавиться от NIB и просто использовать код, думая, что это упростит ситуацию, но на самом деле этого не произошло. Легче было изложить каждый язык в NIB, чем придумать логику компоновки, которая хорошо смотрится на всех языках (см. Первый абзац). Ввод текста полезен только в нескольких местах. Если вы можете разделить свои NIB на те, которые должны быть локализованы, а те, которые этого не делают, это может быть полезно. На iPhone я обнаружил, что менее половины моих NIB действительно имеют в них текстовые или локализованные изображения.

Конечно, вы должны прочитать Темы программирования интернационализации, но мне жаль, что на ваш вопрос действительно нет простого ответа. Продукты доставки, локализованные на 19 языках, я чувствую вашу боль.

Ответ 2

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

Если вы использовали ibtool для генерации строк из nibs

ibtool --generate-strings-file

Вы можете импортировать их в новые наконечники для каждого языка.

ibtool --import-strings-file

Это инструменты командной строки, поэтому они доступны для сценариев. Взгляните на 'man ibtool'

Ответ 3

Что я делаю, так это то, что я создаю IBOutlets для всего текста ui в моем файле nib (UILabel, UITextField, UITextView и т.д.), и я автоматически назначаю его свойства text/placeHolder желаемой NSLocalizaedString.

Учитывая, что я предоставил переводы определенной строки в разных языках, переведенная версия текста появится в файле nib при изменении локали iPhone.

Надеемся, что другие найдут это полезным