Можно ли обновить строки локализованной раскадровки?
Я локализовал часть своего приложения, создав раскадровку base.lproj и 3 строковых файла. Это было месяц назад, и после этого я добавил новый контроллер представления в приложение, но кнопки и метки этого контроллера не отображаются в строковых файлах.
Можно ли обновить эти 3 прикрепленных файла строки раскадровки или я должен добавить новые переводы строк программно с использованием NSLocalizableString и Localizable.strings?
16 ответов
Есть два варианта:
Опция 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
Посетите для получения дополнительной информации: https://conyac.cc/business/columns/localization_guide_ios
Проверьте BartyCrouch, он отлично решит вашу проблему. Также он с открытым исходным кодом, активно поддерживается и может быть легко установлен и интегрирован в ваш проект.
Установите BartyCrouch через Homebrew:
$ brew install bartycrouch
Инкрементно обновляйте файлы Storyboards/XIBs Strings:
$ bartycrouch interfaces -p "/absolute/path/to/project"
Это сделает именно то, что вы искали.
Чтобы файлы Storyboards/XIBs Strings обновлялись с течением времени, я настоятельно рекомендую добавить сценарий сборки (инструкции по добавлению сценария сборки здесь):
if which bartycrouch > /dev/null; then
# Incrementally update all Storyboards/XIBs strings files
bartycrouch interfaces -p "$PROJECT_DIR"
# Add new keys to Localizable.strings files from NSLocalizedString in code
bartycrouch code -p "$PROJECT_DIR" -l "$PROJECT_DIR" -a -s
else
echo "warning: BartyCrouch not installed, download it from https://github.com/Flinesoft/BartyCrouch"
fi
В дополнение к постепенному обновлению файлов Storyboards/XIBs Strings это такжеобеспечитLocalizable.strings
файлы обновляются новыми ключами в коде, используя NSLocalizedString
,
Не забудьте проверить BartyCrouch на GitHub для получения дополнительной информации.
Вы можете вручную добавить ключ в свой файл локализации. Вы можете найти ключевой объект, выбрав его в редакторе раскадровки. Давайте посмотрим на Object-ID
в личном инспекторе. Это похоже "nwc-b2-19c"
На вашей локализации обновите или добавьте перевод. Например:
"nwc-b2-19c.title" = "Translated title";
Этот не для всех, но он не требует никаких дополнительных инструментов в терминале, и это легко для небольших ручных изменений. (Не учитывайте это, когда хотите автоматизировать свой процесс.)
Шаг 0: Настройка языка раскадровки
- База (с английскими текстами)
- Английский (файл локализуемых строк не существует, так как базовый файл английский)
- другие языки (файлы локализуемых строк)
Этот шаг выполняется только один раз.
Теперь, когда я добавляю что-то в раскадровку, я делаю следующее
Шаг 1: добавьте файл локализуемых английских строк
просто отметьте английскую позицию.
Это создает совершенно новый английский локализуемый файл строк со всеми строками
Шаг 2: скопируйте новые позиции в другие языковые файлы
и перевести их
Шаг 3: снять отметку с английского, удалить соответствующий файл локализуемых строк
файл был нужен только для получения новых позиций
Это простой и быстрый процесс, все делается в редакторе раскадровки
Наконец, моим решением было (элементарно, но эффективно) скопировать предыдущие переводы и вставить их в новый файл, созданный снятием флажка и установкой флажка Язык локализации.
Это было бы полезно в некоторых случаях, таких как мой, когда вам нужно изменить только один или два текста.
Я думаю, что лучше всего использовать встроенные локализации экспорта / импорта:
- В Навигаторе проектов выберите папку проекта
- Выберите "Редактор"> "Экспорт для локализации",
- Все переводы остались на своих местах и XCode автоматически добавляет пропущенные строки. Кроме того, перед импортом вы можете отредактировать.xliff в XLIFF Editor (например, онлайн - http://xliff.brightec.co.uk/), а затем вам не нужно делать это в XCode.
- затем Editor > Import Localizations и выберите сохраненный файл.xliff.
PS Если вы не хотите редактировать в XLIFF Editor и пропустили шаг 3, XCode не может сохранить новые строки. В этом случае откройте.xliff в XLIFF Editor, повторно сохраните без изменений и импортируйте новый файл.
Когда вы нажимаете на раскадровке, например, на Main.storyboard... Справа вы видите меню локализации (см. Прикрепленное изображение). Если вы снимите галочку и еще раз отметите язык, файл будет сгенерирован снова. Поэтому я обычно копирую содержимое, снова генерирую файл и затем вставляю содержимое, которое я скопировал и уже перевел.
Это способ, которым я использую для обновления словаря.
У меня там огромная раскадровка с множеством строк. Два языка основаны на английском и другом арабском. Задача состояла в том, чтобы добавить некоторые поля и метки в раскадровку и добавить для них локализацию без каких-либо сценариев и NSLocalizableStrings.
Для меня помогло следующее:
Первое: убедитесь, что у вас есть git, чтобы предотвратить непредвиденные изменения.
- Перейти к целевому экрану в xcode и нажать
Editor
->Export For Localization...
, Сохраните файл ar.xliff где-нибудь. - Скачать XLIFF Edtior.
- Откройте файл ar.xliff и внесите изменения.
- Импортируйте этот файл в xcode. Готово! Вы обновили файл строк раскадровки.
Вот скрипт для извлечения строк из раскадровок и xibs и объединения их с существующими переводами.
Для автоматического запуска сценария при создании проекта поместите сценарий в корневой каталог проекта и добавьте этап " Выполнить сценарий" со следующей строкой к целевым этапам сборки в настройках проекта.
./mergegenstrings.py PathToSourceDir
Или вы можете запустить скрипт на Терминале вручную, когда захотите.
Скрипт работает ibtool
как ответил Та Леанг. Также работает genstrings
извлекать и объединять строки, помеченные NSLocalizedString
в вашем исходном коде. Сценарий основан на сценарии в этом посте, который объединяет строки после запуска genstrings
,
Самый простой и очень менее рискованный подход - просто скопируйте идентификатор объекта из раскадровки и добавьте новый ключ для ключа в локализованном файле, как показано ниже:
1: Скопируйте идентификатор объекта, как показано ниже, из раскадровки для компонента:
2: Добавить новый ключ в локализованный файл, как показано ниже:
"DjF-dn-0ay.text" = "Borrar datos y restablecer";
Примечание. Это очень менее рискованный подход, если вы хотите обновить только несколько компонентов, в противном случае вы можете воссоздать локализованный файл для раскадровки.
Xlifftool доступен как приложение для Mac и хорошо работает. Он показывает все переводимые строки и объекты из info.plist, локализуемые строки и раскадровку.
Загрузите его здесь для Mac: https://itunes.apple.com/lv/app/xlifftool/id1074282695?mt=12
Шаг 1: в Xcode выберите папку проекта в навигаторе проекта. Затем выберите Editor/Export for Localization...
Ваши переводимые строки будут включены в файл xliff на языке, который вы выбрали для локализации в Xcode.
Шаг 2: Откройте этот файл с помощью xlifftool и переведите или обновите свои переводы, которые были сделаны ранее.
Шаг 3: Затем загрузите обратно в свой проект с помощью Editor/Import Localizations...
Вариант 1
Xcode может "перезагрузить" файл, преобразовав файл в любой[Interface Builder Cocoa Touch Storyboard]
тип файла или [Localizable Strings]
тип файла.
Выберите базовый файл раскадровки в навигаторе проекта. Найдите раздел " Локализация " в инспекторе файлов. Если ваш файл в настоящее время[Localizable Strings]
, измените его на [Interface Builder Cocoa Touch Storyboard]
или наоборот.
Xcode должен был преобразовать вашу раскадровку в текущую версию, сохранив при этом ваши старые усилия по локализации. Здесь вы можете вернуться к исходному типу файла, если хотите.
Вариант 2
Использованиеibtool
для извлечения строк в раскадровке.
Откройте приложение "Терминал".
Найдите свойBase.lproj
directory
Используйте эту строку для извлечения строк:
ibtool MainStoryboard.storyboard --generate-strings-file file_name.strings
После того, как ibtool извлечет строки в file_name.strings
, вы можете скопировать и вставить его в исходный .strings
файл.
Это мой простой способ обновить новый текст из раскадровки или XIB в строку локализации
1- используйте этот скрипт http://tredje.se/dev/trouble/?x=entry:entry150917-204052
2 - выберите строку локализации, которую вы хотите обновить, и переключите строку языка с "Строка локализации" на "Раскадровка конструктора интерфейса".
3- переключи обратно:)
Готово.
Добавьте новый язык для локализации. Тот, который вам не нужен.
Он создаст, например, индонезийский.strings, который будет содержать все названия кнопок раскадровки и т.д., которые вам нужны, скопируйте и вставьте их все во все другие файлы language.string, которые у вас есть.
Вы можете снять флажок с языком. Когда появляется сообщение "Хотите удалить английскую локализацию для Main.storyboard?" установите флажок "Удалить локализованные файлы ресурсов с диска". Тогда строковый файл будет удален. Установите флажок снова, чтобы добавить новый файл строки, вы получите последний файл со всем вновь добавленным текстом.