Можно ли обновить строки локализованной раскадровки?

Я локализовал часть своего приложения, создав раскадровку base.lproj и 3 строковых файла. Это было месяц назад, и после этого я добавил новый контроллер представления в приложение, но кнопки и метки этого контроллера не отображаются в строковых файлах.

Можно ли обновить эти 3 прикрепленных файла строки раскадровки или я должен добавить новые переводы строк программно с использованием NSLocalizableString и Localizable.strings?

16 ответов

Есть два варианта:

Опция 1

Xcode может "перезагрузить" файл путем преобразования файла в тип файла [Interface Builder Cocoa Touch Storyboard] или в тип файла [Localizable Strings].

  1. Выберите базовый файл раскадровки в Навигаторе проекта
  2. Найдите раздел " Локализация " в Инспекторе файлов.
  3. Если ваш файл в настоящее время является [Localizable Strings], измените его на [Interface Builder Cocoa Touch Storyboard] или наоборот.
  4. Xcode должен был преобразовать вашу раскадровку в текущую версию, сохраняя при этом ваши старые усилия по локализации. Здесь вы можете изменить файл обратно на исходный тип файла, если хотите.

Вариант 2

Используйте ibtool, чтобы извлечь строки из вашей раскадровки.

  1. Откройте приложение "Терминал"
  2. Найдите свой каталог Base.lproj
  3. Используйте эту строку для извлечения строк:

    ibtool MainStoryboard.storyboard --generate-strings-file file_name.strings

  4. После того, как 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: снять отметку с английского, удалить соответствующий файл локализуемых строк

файл был нужен только для получения новых позиций

Это простой и быстрый процесс, все делается в редакторе раскадровки

Наконец, моим решением было (элементарно, но эффективно) скопировать предыдущие переводы и вставить их в новый файл, созданный снятием флажка и установкой флажка Язык локализации.

Это было бы полезно в некоторых случаях, таких как мой, когда вам нужно изменить только один или два текста.

Я думаю, что лучше всего использовать встроенные локализации экспорта / импорта:

  1. В Навигаторе проектов выберите папку проекта
  2. Выберите "Редактор"> "Экспорт для локализации",
  3. Все переводы остались на своих местах и ​​XCode автоматически добавляет пропущенные строки. Кроме того, перед импортом вы можете отредактировать.xliff в XLIFF Editor (например, онлайн - http://xliff.brightec.co.uk/), а затем вам не нужно делать это в XCode.
  4. затем Editor > Import Localizations и выберите сохраненный файл.xliff.

PS Если вы не хотите редактировать в XLIFF Editor и пропустили шаг 3, XCode не может сохранить новые строки. В этом случае откройте.xliff в XLIFF Editor, повторно сохраните без изменений и импортируйте новый файл.

Когда вы нажимаете на раскадровке, например, на Main.storyboard... Справа вы видите меню локализации (см. Прикрепленное изображение). Если вы снимите галочку и еще раз отметите язык, файл будет сгенерирован снова. Поэтому я обычно копирую содержимое, снова генерирую файл и затем вставляю содержимое, которое я скопировал и уже перевел.

Это способ, которым я использую для обновления словаря.

У меня там огромная раскадровка с множеством строк. Два языка основаны на английском и другом арабском. Задача состояла в том, чтобы добавить некоторые поля и метки в раскадровку и добавить для них локализацию без каких-либо сценариев и NSLocalizableStrings.

Для меня помогло следующее:

Первое: убедитесь, что у вас есть git, чтобы предотвратить непредвиденные изменения.

  1. Перейти к целевому экрану в xcode и нажать Editor -> Export For Localization..., Сохраните файл ar.xliff где-нибудь.
  2. Скачать XLIFF Edtior.
  3. Откройте файл ar.xliff и внесите изменения.
  4. Импортируйте этот файл в xcode. Готово! Вы обновили файл строк раскадровки.

Вот скрипт для извлечения строк из раскадровок и xibs и объединения их с существующими переводами.

Для автоматического запуска сценария при создании проекта поместите сценарий в корневой каталог проекта и добавьте этап " Выполнить сценарий" со следующей строкой к целевым этапам сборки в настройках проекта.

./mergegenstrings.py PathToSourceDir

Или вы можете запустить скрипт на Терминале вручную, когда захотите.

Скрипт работает ibtool как ответил Та Леанг. Также работает genstrings извлекать и объединять строки, помеченные NSLocalizedString в вашем исходном коде. Сценарий основан на сценарии в этом посте, который объединяет строки после запуска genstrings,

Существует приложение командной строки от Apple под названием AppleGlot, которое поддерживает пошаговую локализацию. Я еще не пробовал, но выглядит точно так же, как инструмент, который вы искали (некоторое время назад).

Самый простой и очень менее рискованный подход - просто скопируйте идентификатор объекта из раскадровки и добавьте новый ключ для ключа в локализованном файле, как показано ниже:

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.lprojdirectory
Используйте эту строку для извлечения строк:

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?" установите флажок "Удалить локализованные файлы ресурсов с диска". Тогда строковый файл будет удален. Установите флажок снова, чтобы добавить новый файл строки, вы получите последний файл со всем вновь добавленным текстом.

Другие вопросы по тегам