Маркировка некоторых строк XIB/Storyboard как не локализуемых

Я использую Base Internationalization для файлов XIB/Storyboard и "Экспорт для локализации" с использованием файлов XLIFF для переводчиков.

У меня есть несколько меток, кнопок и т.д., у которых есть текст, который нужно перевести, но у меня также есть метки, где мы используем некоторый текст заполнителя (например, полное имя), чтобы вы могли видеть, как будет выглядеть представление при заполнении с данными, но эти метки всегда имеют свой текст, исходящий из выхода программным способом.

Есть ли способ пометить это свойство метки .text, которое установлено в XIB как не локализуемое, чтобы оно не попадало в файлы XLIFF (или результирующие .strings).

Я знаю, что я могу удалить текст - я также подумал о том, чтобы иметь префикс (например, @ "! DNL!" ), чтобы значит, что переводчик не должен локализоваться, но я надеюсь, что существует только стандартный способ для этого.

Ответ 1

Теперь это возможно с помощью утилиты командной строки BartyCrouch, которую я недавно написал для решения этой проблемы (см. Инструкции по установке в моем ответе на эту тему).

BartyCrouch запускает ibtool для вас и выполняет дополнительную обработку поверх полученного файла .strings. Это исключит представления из перевода, если вы включите #bc-ignore! в ваше значение или комментарий в вашем базовом интернационализированном файле Storyboard/XIB.

Пожалуйста, ознакомьтесь с соответствующим разделом в README на GitHub для получения подробной информации.

Ответ 2

Оказывается, экспорт локализации из Xcode игнорирует присваиваемые строки в раскадровке.

Так просто установите тип текста для каждой метки/кнопки, которую вы хотите исключить, в Attributed в Инспекторе атрибутов.

введите описание изображения здесь

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

Ответ 3

Я добавляю примечание "DNL" в поле "Комментарий для локализатора" на вкладке "Идентификатор". Затем я запускаю эту команду для автоматического удаления всех этих элементов из XLIFF:

xmlstarlet ed -d "//*[contains(text(), 'Note = \"DNL\"')]/.." en.xliff > out.xliff

В основном, используя xmlstarlet (который можно загрузить через homebrew), чтобы найти все элементы, содержащие текст Note = "DNL", а затем удаляя родительский элемент этого элемента из XLIFF.

В сочетании с использованием xcodebuild -exportLocalizations вы можете сделать довольно простой script для генерации ваших XLIFF:

xcodebuild -exportLocalizations -localizationPath build -project ProjectName.xcodeproj
xmlstarlet ed -d "//*[contains(text(), 'Note = \"DNL\"')]/.." build/en.xliff > build/out.xliff