以下是如何为典型的 WatchKit 应用程序 (Swift >v4.2) 正确设置默认语言和区域的说明:
预先声明:本文没有说明如何在整个项目中本地化故事板文件或字符串。本文仅限于 Apple Watch 的默认语言属性和 Info.plist 的本地化!
首先,据了解,您有 3 个目标:
- MyApp-Target
- MyApp WatchKit 目标
- MyApp WatchKit 扩展目标
本地化如下:
A)确保所有 3 个目标的 Info.plist 文件都包含属性列表条目“ CFBundleDevelopmentRegion ”(您可以选择任何默认语言和区域,例如 - 例如en_US
:)
B)确保所有 3 个目标都有一个本地化为 Base的 info.plist 文件
(...无需为 info.plist-File 添加其他语言... - 即其他语言将添加到额外的 infoPlist.strings 文件中,如本文后面的步骤所述...)
另外,请不要添加任何 Target Memberships(因为 Copy-Bundle 不允许将任何 info.plist 文件添加到二进制文件中(否则 App Store 验证会导致错误)。
顺便说一句,如果您想测试 Apple Watch 的默认语言行为 - 请确保在更改模拟器上的 iPhone 语言之前完全擦除并重置两个模拟器。似乎也有必要删除并重新建立目标方案。这样做可以测试 Apple Watch 的语言行为,即使是不是基本语言也不是本地化语言的语言......
C)确保所有 3 个 Target 的 info.plist 文件都位于相应的Base.lproj文件夹中
(当然,对于 3 个目标,在项目中每个目标文件夹的根目录下都有 3 个 Base.lproj 文件夹)
D)最终,如果 Xcode 在这一点上显示错误:对于所有 3 个目标,转到目标->构建设置->info.plist 文件...并更正路径以考虑到您的 info.plist 文件所在的事实在 Base.lproj 子文件夹中
E)如果一切设置正确,则所有 3 个目标的 Xcode Group 文件夹和 Base-setting 如下所示:
// -----------------------------------------------------------------------------
此时,您应该已经有了所需的行为,例如当您的 iPhone 和 Watch 在非本地化语言下运行时,Apple Watch 将显示默认(基本)语言。
现在,如果你想为你的 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 针对 Base 进行了本地化)
// -----------------------------------------------------------------------------
让我们不要问为什么 Apple 让 Apple Watch 被正确地归为默认语言和地区变得如此复杂,并且还让如何本地化不同语言的 InfoPlist.strings 变得非常明显。