Не удается локализовать мой фреймворк Swift 5.Импорт локализации ничего не делает - PullRequest
0 голосов
/ 06 июля 2019

Я разрабатываю среду Swift 5 , которая работает на iOS 12 и выше для iPhone и iPad.

Я добавил французскую локализацию в дополнение к английской, но на вкладке информации о проекте показано, что нетлокализованные файлы для обоих языков, как показано на рисунке ниже:

enter image description here

Когда я запускаю Xcode Editor | Экспорт для локализации, я получаю связанные файлы (включаяфайл fr.xliff).Я отредактировал fr.xliff с помощью Xcode, чтобы перевести некоторые строки, и импортировал его обратно.Но в приложении ничего не изменилось.

Кстати, я не вижу ни одного файла * .strings в иерархии файлов проекта, что звучит странно.

[Обновить]

Поэтому я вручную добавил файл Localizable.Strings и добавил английский и французский языки.

  1. Когда я импортирую файлы xliff, файлы Localizable.strings остаются пустыми.Никаких видимых проблем не появляется.

  2. Когда я помещаю список key=value в строковый файл, NSLocalizedString () не возвращает правильную локализованную версию строки (она всегда возвращаетключ).

Помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 14 июля 2019

Обнаружил, что не так: мне пришлось использовать полную (расширенную) версию NSLocalizedString (), чтобы заставить вызов функции получить перевод из моих файлов Localizable.strings (вместо клиентского приложения) фреймворка следующим образом:

NSLocalizedString("Continue", tableName: tableName, bundle: bundle, comment: "Continue in the button title of UIAladdinOnboardingViewController")

Где:

  • tableName: глобальный объект let, содержащий имя моего локализуемого строкового файла (в моем случае "Aladdin.Localizable"). Я сделал это, чтобы избежать возможного столкновения файлов .strings (так как мое имя фреймворка Aladdin);
  • bundle: глобальная переменная let в моем пространстве имен Framework для обозначения пакета модели Framework, из которого нужно выбрать строку. Я определил это так: let bundle = Bundle(for: ExtendedAppDelegate.self) где ExtendedAppDelegate - один из моих пользовательских классов фреймворка.

Важное примечание:

Кстати, не помещайте вашу интерполяционную строку в качестве ключевого параметра вызова NSLocalizedString, иначе она будет интерполирована во время выполнения, что приведет к интерполированной строке, которая не будет существовать в вашем строковом файле.

Не делайте этого:

let s = NSLocalizedString("{Start your \(introductoryPeriod) free trial.}", tableName: tableName, bundle: bundle, comment: "in price display")

Сделайте это:

let s = String(format: NSLocalizedString("{Start your %@ free trial.}", tableName: tableName, bundle: bundle, comment: "{Start your \\(introductoryPeriod) free trial.}"), introductoryPeriod)

С соответствующими строками Aladdin.Localizable.strings (en):

/* {Start your \(introductoryPeriod) free trial.} (in price display) */
"{Start your %@ free trial.}" = "{Start your %@ free trial.}";

Для генерации строк:

Я использовал жесты из терминала следующим образом:

 $genstrings -o en.lproj/ *.swift

 $genstrings -o fr.lproj/ *.swift

И так далее для всех ваших целевых языков. Наконец, сделайте перевод прямо в строковых файлах.

0 голосов
/ 08 июля 2019

в локализации вы можете локализовать вашу строку прямо из раскадровки.

после добавления вашего языка..нажмите на Main.storyboard -> перейдите к личности и введите ... вы можете увидеть строку локализованных языков ... Изображение ваших Main.strings -> выберите их выберите все языки ..

после этого вы сможете увидеть main.strings (французский) и main.strings (английский) на панели навигации...

изменить строки на предпочитаемых языках, например ...

Изображение того, как изменить строки на английском языке

Изображениео том, как изменить ваши строки на французском

сейчас, измените ваш язык симулятора с Редактировать схему -> Выполнить -> Ваш язык (французский или английский).

это работает ..

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