我对Apple Watch本地化有疑问:默认语言无法正常工作!
(..取消XCode 10.0,Swift4.2,iOS12和WatchOS4.2)
在我的代码中,我将英语设置为默认语言。另外,我将德语定义为本地化。对于这两种语言,一切正常,并且根据iPhone设置的设置(即英语或德语),Apple Watch会反映这些语言。
但是,如果我将iPhone语言设置为法语(例如,并且地区也设置为France),情况就会变糟,然后Watch上的所有内容都以德语显示(而不是默认语言English !!)。 / p>
这肯定是一个错误,对全世界的用户来说都很烦人。
关于如何解决此问题的任何想法?
请参阅此处一些说明WatchKit App内的本地化的图片:
这里是WatchKit扩展程序:
以及info.plist条目:
答案 0 :(得分:2)
2年前,我提交了一份雷达,直到今年的WWDC时,我才找到任何更新,当时我追踪了工程师并抱怨了这个问题。 WWDC之后,他们关闭了我的雷达,出现重复问题。
请尝试在“监视扩展”中添加Localizable.strings(基本)文件,因为某些开发人员表示这样做可以解决问题。
答案 1 :(得分:1)
以下是说明如何为典型的WatchKit App(Swift> v4.2)正确设置默认语言和区域:
作为前言,本文不介绍如何在整个项目中本地化故事板文件或字符串。本文仅限于Apple Watch的默认语言归因和Info.plist的本地化!
首先,我们了解您有3个目标:
本地化如下:
A)确保所有3个目标的Info.plist文件都包含属性列表条目“ CFBundleDevelopmentRegion ”(您可以选择任何默认语言和区域,例如例如-en_US
)
B)确保所有3个目标都有一个info.plist文件,该文件已本地化为基本
(...无需为info.plist-File添加其他语言...-即,如本文后续步骤所述,将在额外的infoPlist.strings文件中添加其他语言。 )
此外,请不要添加任何目标成员身份(因为不允许复制捆绑将任何info.plist文件添加到二进制文件中(否则App Store验证会导致错误)。
顺便说一句,如果要测试Apple Watch的默认语言行为,请确保在更改模拟器上的iPhone语言之前完全擦除并重置两个模拟器。似乎也有必要删除并重新建立目标方案。这样一来,即使对于不是基本语言也不是本地化语言的语言,也可以测试Apple Watch的语言行为。
C)确保所有3个Target的info.plist文件都位于相应的 Base.lproj 文件夹
中(当然,对于3个目标,在项目内每个目标文件夹的根目录中都有3个Base.lproj文件夹)
D)最终,如果Xcode此时显示错误:对于所有3个目标,请转到Target-> Build Settings-> info.plist File ...并更正路径考虑到您的info.plist文件位于Base.lproj子文件夹中的事实
E)如果所有设置都正确,则所有3个Target的Xcode Group文件夹和Base-setting如下所示:
// -----------------------------------------------------------------------------
这时,您应该已经具有所需的行为,例如,只要您的iPhone和Watch以未本地化的语言运行,Apple Watch就会显示默认的(基本)语言。
现在,如果要为Info.plist添加其他语言功能,那就是本地化开始的时间,这是当您需要为希望进行语言自定义的每个目标引入InfoPlist.strings文件的时候。
本文在下面显示了如何本地化infoPlist.strings文件(不要与我们上面对基本语言定义所做的混淆,基本语言定义仅负责iPhone和Apple Watch的默认语言设置) 。同样,本文没有显示情节提要或Strings本地化。如果您想了解有关此内容,请参阅其他文章。
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扩展]。
V)如果所有设置都正确,则目标文件夹组之一将如下所示:
(其中InfoPlist.strings被本地化为相应的语言,而Info.plist被本地化为Base)。
// -----------------------------------------------------------------------------
让我们问为什么Apple使Apple Watch如此复杂以至于无法正确地将其归因于默认语言和区域,并且在如何本地化不同语言(如InfoPlist.strings)方面也变得显而易见。