Вот объяснение, как правильно установить язык и регион по умолчанию для типичного приложения 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
)
B) Убедитесь, что все 3 цели имеют файл info.plist, который локализован как Base
(... нет необходимости добавлять другие языки для файла info.plist ... - т.е. другие языки будут добавлены в дополнительный файл infoPlist.strings, как описано в шагахдалее в этой статье ...)
Кроме того, пожалуйста, не добавляйте целевые членства (так какВ Copy-Bundle запрещено добавлять файлы info.plist в двоичный файл (в противном случае проверка App Store приводит к ошибке).
Кстати, если вы хотите проверить поведение языка по умолчанию дляваши Apple Watch - убедитесь, что вы полностью удалили и сбросили оба симулятора, прежде чем менять язык iPhone на симуляторе.Также представляется необходимым удалить и восстановить целевые схемы.Это позволяет протестировать языковое поведение ваших Apple Watch даже для языков, которые не являются базовыми или локализованными ...
C) Убедитесь, что все 3Файл info.plist цели находится в соответствующей папке Base.lproj
(конечно, для 3 целей найдены 3 папки Base.lproj)в корне каждой целевой папки внутри вашего проекта)
D) В конце концов, если XCode показывает ошибки на этом этапе: Для всех 3 целей перейдите к Target-> Build Settings->Файл info.plist ... и исправьте путь , чтобы учесть тот факт, что ваш файл info.plist находится внутри подпапки Base.lproj
E) Если все настроено правильно, то папка Xcode Group и базовая настройка для всех 3 целей выглядят следующим образом:
// -----------------------------------------------------------------------------
На этом этапе у вас уже должно быть желаемое поведение, например, что AppleЧасы будут показывать язык по умолчанию (базовый) всякий раз, когда ваш iPhone и часы будут работать на языке, который не локализован.
Теперь, если вы хотите добавить дополнительные языковые функции для своего Info.plist, тогда начинается локализация иименно тогда вам нужно представить файлы InfoPlist.strings для каждой цели, для которой вы хотите настроить язык.
В этой статье ниже показано, как локализовать ваш файл infoPlist.strings (не путать с тем, что мы простосделал выше для определения базового языка, который отвечает только за настройку языка по умолчанию вашего iPhone и Apple Watch).Опять же, статья не показывает раскадровку или строковую локализацию.Пожалуйста, обратитесь к другим статьям, если вы хотите узнать об этом ..
Локализация вашего файла info.plist:
Внутри ваших целей (или хотя бы целей)Вы хотите локализовать что-то внутри вашего файла info.plist) - выполните следующие действия:
I) Перейдите в Файл -> Создать -> Файл ... и добавьте строкиФайл по вашему выбору
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]).
V) Если все настроено правильно, одна из ваших целевых групп папок теперь будет выглядеть так:
(где InfoPlist.strings локализован для соответствующего языка, а Info.plist локализовандля базы)
// -----------------------------------------------------------------------------
Давайте не будем спрашивать, почему Apple так сильно усложнила правильное присвоение Apple Watch языка и региона по умолчанию, а также сделала почти очевидным, как локализовать разные языки, как для InfoPlist.strings.