Подтвердить что ты не робот

Как синхронизировать строки локализованных раскадровки после изменения раскадровки в 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?

4b9b3361

Ответ 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. На панели "Утилиты" (самая правая панель) щелкните значок Показать инспектор файлов. Это самый левый значок в синем на изображении ниже:

File inspector is the leftmost icon.

На правой панели, которая появится, один из разделов будет Локализация:

Localization section

Снимите флажок English (Localizable Strings) и в появившемся окне отметьте Удалить локализованные файлы ресурсов с диска и нажмите кнопку Удалить (у вас нет для проверки удаления, и в этом случае Xcode попросит разрешения переопределить его, когда вы его построите дальше).

Затем снова проверьте English (Localizable Strings), чтобы построить его с нуля.

Ответ 3

Использование Xcode 6 для меня работало:

Я изменил локализацию для языка из "Локализованные строки" в "Интерфейс Builder...", например, предложенный в вопрос SO, отправленный h.orim. Однако настройка не изменилась, она по-прежнему была установлена ​​на "Локализованные строки". Следующий шаг теперь - сделать это снова, поэтому Xcode найдет только что созданную раскадровку и покажет приглашение с вопросом, следует ли ее использовать или заменить. Теперь нажмите "Использовать файл" вместо "Заменить", иначе это произойдет снова.

Теперь у вас должна быть локализованная раскадровка на нужном языке. После того, как вы вернетесь к "Localizable Strings", у вас будет файл, содержащий все текущие строки, используемые в раскадровке, с вашими прежними переводами.

Ответ 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