Swift Apple Watch上的默认本地化语言错误

Swift Apple Watch上的默认本地化语言错误,swift,localization,watchkit,apple-watch,watchos-5,Swift,Localization,Watchkit,Apple Watch,Watchos 5,我对Apple Watch本地化有一个问题:默认语言不起作用 (…取消运行XCode 10.0、Swift4.2、iOS12和WatchOS4.2) 在我的代码中,我将英语设置为默认语言。此外,我将德语定义为本地化。对于这两种语言,一切都很好,根据iPhone设置的方式(即英语或德语),Apple Watch会反映这些语言 但是如果我把iPhone的语言设置为法语,事情就变得糟糕了,例如,(而且Region也设置为法语),那么手表上的所有内容都是用德语显示的(而不是默认的英语!!) 这一定是一个

我对Apple Watch本地化有一个问题:默认语言不起作用

(…取消运行XCode 10.0、Swift4.2、iOS12和WatchOS4.2)

在我的代码中,我将英语设置为默认语言。此外,我将德语定义为本地化。对于这两种语言,一切都很好,根据iPhone设置的方式(即英语或德语),Apple Watch会反映这些语言

但是如果我把iPhone的语言设置为法语,事情就变得糟糕了,例如,(而且Region也设置为法语),那么手表上的所有内容都是用德语显示的(而不是默认的英语!!)

这一定是一个bug,对全世界的用户来说非常烦人

有没有办法克服这个问题

请参阅此处一些说明WatchKit应用程序内部本地化的图像:

下面是WatchKit扩展:

以及info.plist条目:


两年前,我提交了一份雷达文件,直到今年的WWDC,当我找到工程师并抱怨这个问题时,才得到任何更新。在WWDC之后,他们关闭了我的雷达作为一个重复的问题


尝试在Watch Extension中添加Localizable.strings(Base)文件,因为一些开发人员说这样做可以解决问题。

我2年前提交了一个雷达,直到今年的WWDC,当我找到工程师并抱怨这个问题时,才得到任何更新。在WWDC之后,他们关闭了我的雷达作为一个重复的问题


尝试在Watch Extension中添加Localizable.strings(Base)文件,因为一些开发人员说这样做可以解决问题。

以下是如何为典型WatchKit应用程序(Swift>v4.2)正确设置默认语言和区域的说明:

作为预先说明:本文不介绍如何在整个项目中本地化故事板文件或字符串。本文仅限于Apple Watch的默认语言属性和您的Info.plist的本地化

首先,我们知道您有3个目标:

  • MyApp目标
  • MyApp WatchKit目标
  • MyApp WatchKit扩展目标
本地化工作如下:

A)确保所有3个目标的Info.plist文件都包含属性列表条目“CFBundleDevelopmentRegion”(您可以选择任何默认语言和区域,例如:
en_US

B)确保所有3个目标都有一个本地化为Base的info.plist文件

(…无需为info.plist文件添加其他语言…-即,其他语言将添加到额外的infoPlist.strings文件中,如本文后续步骤所述…)

另外,请不要添加任何目标成员身份(因为复制捆绑包不允许将任何info.plist文件添加到二进制文件中(否则应用商店验证会导致错误)

顺便说一下,如果您想测试Apple Watch的默认语言行为,请确保在更改模拟器上的iPhone语言之前完全擦除并重置两个模拟器。似乎还需要删除并重新建立目标方案。这样做可以测试Apple Watch的语言行为tch即使对于不是基础语言或本地化语言的语言

C)确保所有3个目标的info.plist文件都位于相应的Base.lproj文件夹中

(当然,对于3个目标,在项目中每个目标文件夹的根目录下都有3个Base.lproj文件夹)

D)最终,如果Xcode此时显示错误:对于所有3个目标,转到Target->Build Settings->info.plist File…并更正路径,以考虑您的info.plist文件位于Base.lproj子文件夹内的事实

E)如果全部设置正确,则所有3个目标的Xcode组文件夹和基本设置如下所示:

此时,您应该已经具备了所需的行为,例如每当您的iPhone和手表使用非本地化语言运行时,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文件都选择了正确的目标和语言(对于每个目标都相应地选择了该文件)
/* 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.";
// -----------------------------------------------------------------------------