Неправильный язык локализации на Apple Watch - PullRequest
0 голосов
/ 04 октября 2018

У меня проблема с локализацией Apple Watch: язык по умолчанию не работает!

(.. без использования XCode 10.0, Swift4.2, iOS12 и WatchOS4.2)

Inмой код, я установил английский в качестве языка по умолчанию.Кроме того, я определил немецкий как локализацию.Для этих двух языков все работает нормально, и в зависимости от того, как настроены настройки iPhone (например, английский или немецкий), Apple Watch отражают эти языки.

Но все становится плохо, если я установил язык iPhone на французскийНапример, (и для Region задано значение France), все на часах отображается на немецком языке (вместо языка по умолчанию - английского !!).

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

Есть идеи, как решить эту проблему?

Смотрите здесь некоторые изображения, иллюстрирующие локализацию внутри приложения WatchKit:

enter image description here

А вот для расширения WatchKit:

enter image description here

И запись в info.plist:

enter image description here

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Вот объяснение, как правильно установить язык и регион по умолчанию для типичного приложения WatchKit (Swift> v4.2):

В качестве предварительного замечания: эта статья не показывает, как локализовать вашФайлы раскадровки или строки в вашем проекте.Эта статья ограничивается атрибуцией языка по умолчанию для Apple Watch и локализацией вашего Info.plist!

Для начала понятно, что у вас есть 3 цели:

  • MyApp-Target
  • MyApp WatchKit Target
  • MyApp WatchKit Extension Target

Локализация производится следующим образом:

A) Убедитесь, что в файлах Info.plist всех 3 целей содержится запись списка свойств " CFBundleDevelopmentRegion " (вы можете выбрать любой язык и регион по умолчанию, например: en_US)

enter image description here

B) Убедитесь, что все 3 цели имеют файл info.plist, который локализован как Base

enter image description here (... нет необходимости добавлять другие языки для файла info.plist ... - т.е. другие языки будут добавлены в дополнительный файл infoPlist.strings, как описано в шагахдалее в этой статье ...)

Кроме того, пожалуйста, не добавляйте целевые членства (так какВ Copy-Bundle запрещено добавлять файлы info.plist в двоичный файл (в противном случае проверка App Store приводит к ошибке).

Кстати, если вы хотите проверить поведение языка по умолчанию дляваши Apple Watch - убедитесь, что вы полностью удалили и сбросили оба симулятора, прежде чем менять язык iPhone на симуляторе.Также представляется необходимым удалить и восстановить целевые схемы.Это позволяет протестировать языковое поведение ваших Apple Watch даже для языков, которые не являются базовыми или локализованными ...

C) Убедитесь, что все 3Файл info.plist цели находится в соответствующей папке Base.lproj

enter image description here (конечно, для 3 целей найдены 3 папки Base.lproj)в корне каждой целевой папки внутри вашего проекта)

D) В конце концов, если XCode показывает ошибки на этом этапе: Для всех 3 целей перейдите к Target-> Build Settings->Файл info.plist ... и исправьте путь , чтобы учесть тот факт, что ваш файл info.plist находится внутри подпапки Base.lproj

enter image description here

E) Если все настроено правильно, то папка Xcode Group и базовая настройка для всех 3 целей выглядят следующим образом:

enter image description here

// -----------------------------------------------------------------------------

На этом этапе у вас уже должно быть желаемое поведение, например, что AppleЧасы будут показывать язык по умолчанию (базовый) всякий раз, когда ваш iPhone и часы будут работать на языке, который не локализован.

Теперь, если вы хотите добавить дополнительные языковые функции для своего Info.plist, тогда начинается локализация иименно тогда вам нужно представить файлы InfoPlist.strings для каждой цели, для которой вы хотите настроить язык.

В этой статье ниже показано, как локализовать ваш файл infoPlist.strings (не путать с тем, что мы простосделал выше для определения базового языка, который отвечает только за настройку языка по умолчанию вашего iPhone и Apple Watch).Опять же, статья не показывает раскадровку или строковую локализацию.Пожалуйста, обратитесь к другим статьям, если вы хотите узнать об этом ..

Локализация вашего файла info.plist:

Внутри ваших целей (или хотя бы целей)Вы хотите локализовать что-то внутри вашего файла info.plist) - выполните следующие действия:

I) Перейдите в Файл -> Создать -> Файл ... и добавьте строкиФайл по вашему выбору

enter image description here

II) Назовите файл InfoPlist.strings и сохраните его где-нибудь в структуре вашей целевой папки (и в любом месте в любом дереве ссылок группы XCode)

III) Внутри InfoPlist.string (выбранной вами цели), напишите ключ, который вы хотите локализовать (в кавычках) , за которым следует знак равенства иВаш локализованный текст на выбранном языке (также в кавычках, за которым следует точка с запятой).

Вот пример немецкой локализации:

/* App name localization */
"CFBundleDisplayName" = "MyApp_Name_in_German";

/* Privacy - Health Share Usage Description */
"NSHealthShareUsageDescription" = "Erlaubnis für Herzfrequenz Messung nötig.";

/* Privacy - Health Update Usage Description */
"NSHealthUpdateUsageDescription" = "Erlaubnis für Herzfrequenz Messung nötig.";

IV) Убедитесь, что в каждом файле InfoPlist.strings есть правильная цель и выбранный язык (соответственно для каждой цели - тогда как понятно, что для цели WatchKit, скорее всего, не требуется локализация InfoPlist.strings- но две другие цели наверняка [то есть MyApp-target и MyApp WatchKit Extension]).

enter image description here

V) Если все настроено правильно, одна из ваших целевых групп папок теперь будет выглядеть так:

enter image description here (где InfoPlist.strings локализован для соответствующего языка, а Info.plist локализовандля базы)

// -----------------------------------------------------------------------------

Давайте не будем спрашивать, почему Apple так сильно усложнила правильное присвоение Apple Watch языка и региона по умолчанию, а также сделала почти очевидным, как локализовать разные языки, как для InfoPlist.strings.

0 голосов
/ 05 октября 2018

Я подал радар 2 года назад, который никогда не получал никаких обновлений до WWDC этого года, когда я выследил инженера и пожаловался на эту проблему.После WWDC они закрывают мой радар как дубликат вопроса.

Попробуйте добавить файл Localizable.strings (Base) в Watch Extention, так как некоторые разработчики говорят, что это решило проблему.

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