Как синхронизировать строки локализованных раскадровки после изменения раскадровки в Xcode 5
Я только начинаю искать локализацию приложений IOS в XCode 5, и я попытался добавить итальянскую локализацию:
![Adding Italian Localization]()
Xcode 5 автоматически генерирует файл Main.strings с единственной записью, для единственной метки, помещенной в файл Main.storyboard:
/* Class = "IBUILabel"; text = "Label"; ObjectID = "PeT-4z-NSf"; */
"PeT-4z-NSf.text" = "Etichetta";
![XCode 5 generated file]()
Если позже я модифицирую файл Main.storyboard, добавляя новую кнопку в представление, то как я могу сообщить Xcode 5, если возможно, добавить отсутствующие строки локализации в файл Main.strings? Должен ли я добавить новую запись вручную, посмотрев поле "Идентификатор объекта" в "Интерфейс-Builder" (он работает, но я не знаю, так ли оно предназначено для обновления локализации раскадровки)? Могу ли я запустить что-то вроде genstrings в файле Main.storyboard, чтобы извлечь текст всех ярлыков и добавить новые в локализованные файлы Main.strings?
Ответы
Ответ 1
Оформить заказ BartyCrouch, он отлично решит вашу проблему. Также он с открытым исходным кодом, активно поддерживается и может быть легко установлен и интегрирован в ваш проект.
Установите BartyCrouch через Homebrew:
brew install bartycrouch
Либо установите его через Mint:
mint install Flinesoft/BartyCrouch
Обновляйте файлы Storyboards/XIBs Strings:
$ bartycrouch update
Это сделает именно то, что вы искали.
Чтобы поддерживать файлы Storyboards/XIBs Strings со временем обновленными, я настоятельно рекомендую добавить сценарий сборки (инструкции по добавлению сценария сборки здесь):
if which bartycrouch > /dev/null; then
bartycrouch update -x
bartycrouch lint -x
else
echo "warning: BartyCrouch not installed, download it from https://github.com/Flinesoft/BartyCrouch"
fi
В дополнение к постепенному обновлению файлов Storyboards/XIBs Strings это также гарантирует, что ваши файлы Localizable.strings
будут обновляться новыми ключами, добавленными в код с использованием NSLocalizedString
, и будут отображаться предупреждения для дублированных ключей или пустых значения.
Обязательно закажите BartyCrouch на GitHub для получения дополнительной информации.
Ответ 2
Файл, который Xcode не обновляет автоматически (по крайней мере версия версии 5.x), это приложение Localizable Strings
. Вы можете создать новый файл из Main.storyboard
следующим образом:
В проекте Navigator (крайняя левая панель) щелкните файл Main.storyboard
. На панели "Утилиты" (самая правая панель) щелкните значок Показать инспектор файлов. Это самый левый значок в синем на изображении ниже:
.
На правой панели, которая появится, один из разделов будет Локализация:
![Localization section]()
Снимите флажок English (Localizable Strings)
и в появившемся окне отметьте Удалить локализованные файлы ресурсов с диска и нажмите кнопку Удалить (у вас нет для проверки удаления, и в этом случае Xcode попросит разрешения переопределить его, когда вы его построите дальше).
Затем снова проверьте English (Localizable Strings)
, чтобы построить его с нуля.
Ответ 3
Использование Xcode 6 для меня работало:
Я изменил локализацию для языка из "Локализованные строки" в "Интерфейс Builder...", например, предложенный в вопрос SO, отправленный h.orim. Однако настройка не изменилась, она по-прежнему была установлена на "Локализованные строки". Следующий шаг теперь - сделать это снова, поэтому Xcode найдет только что созданную раскадровку и покажет приглашение с вопросом, следует ли ее использовать или заменить. Теперь нажмите "Использовать файл" вместо "Заменить", иначе это произойдет снова.
Теперь у вас должна быть локализованная раскадровка на нужном языке. После того, как вы вернетесь к "Localizable Strings", у вас будет файл, содержащий все текущие строки, используемые в раскадровке, с вашими прежними переводами.
Ответ 4
Вы можете использовать script под названием UpdatStoryboardStrings для этого!
Получить его здесь: https://github.com/AppliedIS/iOSL10n
Использование для использования: http://blog.appliedis.com/2013/05/22/localization-of-an-xcode-ios-app-part-2/
Ответ 5
Другой способ - сделать это вручную, выбрав в раскадровке поле для перевода. Перейдите в "Identity Inspector" и скопируйте ID объекта (что-то вроде HP8-op-SmX).
![инспектор идентичности]()
После этого откройте файл langage раскадровки (Main.strings, в большинстве случаев) и пройдите мимо идентификатора объекта. В зависимости от ваших потребностей вам просто нужно добавить .text или .placeholder.
"HP8-op-SmX.placeholder" = "My translated placeholder text";
"HP9-op-VvD.text" = "My translated text";
Сохранить, очистить и построить. Это немного больно, но может сэкономить много времени, если вам нужно всего лишь перевести несколько вещей.
Ответ 6
С Xcode 6+ в идеале разработчикам не нужно вручную управлять файлами строк. Используйте экспорт XLIFF, чтобы автоматически собирать строки языка разработки для отправки переводчикам, а затем использовать импорт XLIFF для обновления файлов строк с помощью переводов.
https://developer.apple.com/library/ios/documentation/MacOSX/Conceptual/BPInternational/LocalizingYourApp/LocalizingYourApp.html#//apple_ref/doc/uid/10000171i-CH5-SW9
Другой вариант - использовать ibtool --export-strings-file
напрямую.
https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/ibtool.1.html
Ответ 7
Есть два варианта:
Вариант 1
Xcode может "перезагрузить" файл путем преобразования файла в тип файла [Interface Builder Cocoa Touch Storyboard] или в тип файла [Localizable Strings].
Выберите базовый файл раскадровки в Навигаторе проекта
Найдите раздел "Локализация" в Инспекторе файлов.
Если ваш файл в настоящее время является [Localizable Strings], измените его на [Interface Builder Cocoa Touch Storyboard] или наоборот.
Xcode должен был преобразовать вашу раскадровку в текущую версию, сохраняя при этом ваши старые усилия по локализации. Здесь вы можете изменить файл обратно на исходный тип файла, если хотите.
Вариант 2
Используйте ibtool для извлечения строк из вашей раскадровки.
Откройте приложение "Терминал"
Найдите свой каталог Base.lproj
Используйте эту строку для извлечения строк:
ibtool MainStoryboard.storyboard --generate-strings-file file_name.strings
После того, как ibtool извлечет строки в file_name.strings, вы можете скопировать и вставить их в исходный файл .strings