Локализация iOS работает только частично

#ios #localization #localizable.strings #xliff

#iOS #локализация #localizable.strings #xliff

Вопрос:

Я локализовал свое приложение для немецкого и английского языков. За исключением некоторых пустых переводов, формат строк должен быть в порядке, поскольку я не получаю никаких ошибок от xCode. plutil -lint <name of the strings file>.strings говорит, что все локализованные файлы в порядке.

Я переключил язык приложения в схеме моей цели на немецкий. В зависимости от сборки / запуска переводятся либо InfoPlist.strings, либо Localizable.strings. Либо приложение (Localizable.strings), либо ярлыки и описания использования NS … (InfoPlist.strings) на немецком языке.

Я уже много пробовал в симуляторе и на разных устройствах с разными версиями iOS. Я очистил сборку, очистил папку сборки, удалил папку DerivedData. Я также удалил приложение. Я убедился, что файлы .strings добавлены к цели. Я изменил кодировку на UTF-16 и обратно на UTF-8. Тоже безуспешно. К сожалению, похоже, ничего не работает.

Я импортировал и экспортировал строки из файлов .xliff. Возможно, это как-то связано с этим. До того, как я работал с импортом / экспортом, переводы работали просто отлично.

Это кажется таким случайным. Чего мне не хватает?

Ответ №1:

Я потратил еще некоторое время на проблему и нашел ответ на свою проблему — я думаю. При импорте отредактированных и экспортированных файлов .xliff из xCode в xCode был обновлен InfoPlist.strings. Импорт добавил двойные кавычки к каждому ключу.

Перед импортом

 ShortCutSearchTitle = "Suche"; //working
  

После импорта

 "ShortCutSearchTitle" = "Suche"; //not working
  

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

С другой стороны, в симуляторе мне нужно было

  1. удалите приложение
  2. сбросьте симулятор
  3. измените язык устройства
  4. создайте и запустите приложение

для того, чтобы показать переведенный InfoPlist.strings. Кажется, что InfoPlist.strings кэшируется до тех пор, пока симулятор не будет сброшен. Я думал, что изменение языка приложения в схеме (Product / Scheme / Edit Scheme / Run) также повлияет на InfoPlist.strings, но это не так. Только изменение языка симулятора будет отображать предупреждения об использовании и пользовательский переведенный InfoPlist.strings на правильном языке.

Я рад, что нашел «ошибку»? с двойными кавычками, но я также беспокоюсь, что теперь мне, возможно, придется менять двойные кавычки после каждого импорта вручную.

Комментарии:

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