Как работает инкрементная локализация? - PullRequest
7 голосов
/ 06 декабря 2011

Я пытаюсь создать свое первое локализованное приложение. У меня есть все строки в коде, переведенные с использованием NSLocalizedString (для использования с genstrings инструментом). Теперь я натыкаюсь на ibtool. Как работает инкрементная локализация? Что касается страницы руководства, я должен написать что-то вроде этого:

$ ibtool --previous-file path/to/prev.xib \
--incremental-file path/to/inc.xib --localize-incremental \
--write path/to/new.xib mod.xib

Где взять инкрементный файл? Насколько я понимаю, если я использую систему контроля версий (git / svn), «старый» файл находится всего в нескольких коммитах назад, инкрементальный файл - это diff, а путь / к / new.xib - это недавно созданный xib-файл. мод.ниб для меня загадка. Может кто-нибудь объяснить мне, как это работает? Кроме того - как мне начать локализацию XIB, если нет доступных предыдущих версий (т.е. не инкрементная, а начальная локализация)?

Ответы [ 2 ]

12 голосов
/ 08 декабря 2011

Я думаю, что их выбор терминологии, особенно для --incremental-file, вызывает путаницу. Идея состоит в том, что у вас есть старая версия xib на двух языках (исходный и целевой), и с тех пор вы изменили ее на исходном языке и хотите обновить версию на целевом языке, чтобы она соответствовала.

Давайте рассмотрим пример. Ранее у вас был home.xib на английском языке (исходный язык), и у вас был кто-то, чтобы перевести его на французский (целевой язык). С тех пор вы разработали новую функцию, и теперь у вас есть обновленная версия home.xib на английском языке, в которой вы добавили UILabel и UITextField и перемещали вещи. Команда, которую вы показали, может помочь вам получить обновленную версию home.xib на французском языке, чтобы у нее были новые UILabel и UITextField и чтобы все перемещалось, как на английском языке. Обратите внимание, что любой текстовый контент, который вы установили в своих новых UILabel и UITextField, будет добавлен на английском языке, и затем его необходимо будет перевести на французский xib (но вы можете автоматизировать это, добавив --import-strings-file и предоставив переводы в еще одном файле) .

Итак, если мы сопоставим команду, которую вы показали, с этим примером:

  • --previous-file path/to/prev.xib указывает старый английский xib
  • --incremental-file path/to/inc.xib указывает на старый французский xib
  • --write path/to/new.xib указывает новый французский xib, который будет создан
  • mod.xib указывает новый английский xib

Что касается вашего другого вопроса относительно того, как вы начнете процесс, на самом деле это зависит от того, как вы будете локализовывать свои xibs. Очевидно, вы создадите новые языковые версии XIBS (в XCode вы просто добавляете язык в список языков XIB, и локализованные XIB создаются автоматически). И затем, если вы сами локализуете их в Интерфейсном Разработчике, то вы просто внесете соответствующие изменения (перевод текста и любое необходимое изменение размера) в локализованные xibs. Или вы можете извлечь текст в xibs в .strings файлы, перевести их и вставить их в соответствующую языковую версию этих xibs. Для этого вы снова будете использовать ibtool, но с --generate-strings-file для фазы извлечения и с --import-strings-file для фазы ввода.

3 голосов
/ 11 февраля 2013

Я написал скрипт для проектов git, который автоматизирует необходимые шаги (как описано в ответ выше) для переноса изменений на другой язык.

Использование:

migrate_changes.sh <target_language> <xib file without ending>

Пример:

После того, как вы внесете изменения в файл xib на английском языке, запустите скрипт в корневом каталоге вашей папки ресурсов.1014 *

migrate_changes.sh de MyViewController

Источник:

#!/bin/sh

LANG_FROM='en'
LANG_TO=$1
XIB_FILE=$2

FROM_FILE=${LANG_FROM}.lproj/${XIB_FILE}.xib
PREV_FILE=${LANG_FROM}.lproj/${XIB_FILE}_old.xib
TO_FILE=${LANG_TO}.lproj/${XIB_FILE}.xib

# checkout old version of xib file
git show `git log -2 --format="%H" $FROM_FILE | tail -n 1`:./$FROM_FILE > $PREV_FILE

# merge changes
ibtool --previous-file $PREV_FILE --incremental-file $TO_FILE --localize-incremental --write $TO_FILE $FROM_FILE

# remove previous version
rm $PREV_FILE
...