Как работает инкрементная локализация?

Я пытаюсь создать свое первое локализованное приложение. У меня есть все строки в коде переведены с использованием 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 ответа

Решение

Я думаю, что их выбор терминологии, особенно для --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 указывает старый французский сиб
  • --write path/to/new.xib указывает новый французский XIB, который будет создан
  • mod.xib указывает новый английский XIB

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

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

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

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

Пример:

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

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
Другие вопросы по тегам