Как упростить локализацию iPhone? - PullRequest
13 голосов
/ 22 мая 2009

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

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

(Так же, как это http://www.gigliwood.com/weblog/Cocoa/A_Great_Need_for_Be.html)

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

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

Или, если существует какой-либо сценарий или инструмент для этого.

Ответы [ 3 ]

17 голосов
/ 22 мая 2009

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

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

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

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

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

2 голосов
/ 05 сентября 2011

Что я делаю, так это то, что я создаю IBOutlets для всего текстового интерфейса в моем файле пера (UILabel, UITextField, UITextView и т. Д.), И я назначаю его свойства text / placeHolder для требуемой NSLocalizaedString программно.

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

Надеюсь другие найдут это полезным

2 голосов
/ 29 ноября 2009

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

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

ibtool --generate-strings-file

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

ibtool --import-strings-file

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

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