iKK*_*iKK 0 localization swift apple-watch watchkit watchos-5
我在 Apple Watch 本地化方面遇到问题:默认语言不起作用!
(..取消 XCode 10.0、Swift4.2、iOS12 和 WatchOS4.2)
在我的代码中,我将英语设置为默认语言。另外,我将德语定义为本地化。对于这两种语言,一切正常,并且根据 iPhone 设置的设置(即英语或德语),Apple Watch 会反映这些语言。
但如果我将 iPhone 语言设置为法语(并且区域也设置为法国),那么情况会变得很糟糕,然后手表上的所有内容都会以德语显示(而不是默认语言英语!!)。
这肯定是一个错误,并且对全世界的用户来说都非常烦人。
关于如何克服这个问题有什么想法吗?
请参阅此处的一些图片,说明 WatchKit 应用程序内部的本地化:
这里是 WatchKit 扩展:
以及 info.plist 条目:
以下是如何为典型 WatchKit 应用程序 (Swift >v4.2) 正确设置默认语言和区域的说明:
\n\n预先说明:本文不会介绍如何在整个项目中本地化故事板文件或字符串。本文仅限于 Apple Watch 的默认语言属性和 Info.plist 的本地化!
\n\n首先,我们知道您有 3 个目标:
\n\n本地化如下:
\n\nA)确保所有 3 个目标的 Info.plist 文件包含属性列表条目“ CFBundleDevelopmentRegion ”(您可以选择任何默认语言和区域,例如 - 例如en_US
:)
B)确保所有 3 个目标都有一个本地化为 Base 的info.plist 文件
\n\n(...无需为 info.plist-File 添加其他语言... - 即其他语言将添加到额外的 infoPlist.strings 文件中,如本文后面的步骤所述...)
另外,请不要添加任何目标成员资格(因为不允许 Copy-Bundle 将任何 info.plist 文件添加到二进制文件中(否则 App Store 验证会导致错误)。
\n\n顺便说一句,如果您想测试 Apple Watch 的默认语言行为 - 请确保在更改模拟器上的 iPhone 语言之前完全擦除并重置两个模拟器。似乎还有必要删除并重新建立目标方案。这样做可以测试 Apple Watch 的语言行为,即使语言不是基本语言也不是本地化语言......
\n\nC)确保所有 3 个目标的 info.plist 文件位于相应的Base.lproj文件夹中
\n\n(当然,对于 3 个目标,项目内每个目标文件夹的根目录下都会找到 3 个 Base.lproj 文件夹)
D)最终,如果 Xcode 此时显示错误:对于所有 3 个目标,转到 Target->Build Settings->info.plist File ...并更正路径以考虑您的 info.plist 文件所在的事实Base.lproj 子文件夹内
\n\n\n\nE)如果所有设置均正确,则所有 3 个目标的 Xcode Group 文件夹和 Base 设置如下所示:
\n\n\n\n// -----------------------------------------------------------------------------\n
Run Code Online (Sandbox Code Playgroud)\n\n此时,您应该已经具有所需的行为,例如只要您的 iPhone 和 Watch 在未本地化的语言下运行,Apple Watch 就会显示默认(基本)语言。
\n\n现在,如果您想为您的 Info.plist 添加其他语言功能,那就是本地化开始的时候,并且您需要为您希望进行语言定制的每个目标引入 InfoPlist.strings 文件。
\n\n本文介绍了如何本地化您的 infoPlist.strings 文件(不要与我们上面所做的基本语言定义混淆,该定义仅负责 iPhone 和 Apple Watch 的默认语言设置)。同样,本文没有显示情节提要或字符串本地化。如果您想了解这一点,请参阅其他文章。
\n\ninfo.plist 文件的本地化:
\n\n在您的 Targets 内(或者至少是您想要本地化 info.plist 文件内某些内容的目标) - 执行以下操作:
\n\nI)转到文件 -> 新建 -> 文件... 并将字符串文件添加到您选择的目标
\n\n\n\nII) 将文件命名为 InfoPlist.strings并将其保存在目标文件夹结构中的某个位置(以及任何 Xcode 参考树组中的任何位置)
\n\nIII)在 InfoPlist.string(您选择的目标的)内,写下您想要本地化的键(在引号中),后跟等号和所选语言的本地化文本(也在引号中,后跟分号) )。
\n\n以下是德语本地化的示例:
\n\n/* App name localization */\n"CFBundleDisplayName" = "MyApp_Name_in_German";\n\n/* Privacy - Health Share Usage Description */\n"NSHealthShareUsageDescription" = "Erlaubnis f\xc3\xbcr Herzfrequenz Messung n\xc3\xb6tig.";\n\n/* Privacy - Health Update Usage Description */\n"NSHealthUpdateUsageDescription" = "Erlaubnis f\xc3\xbcr Herzfrequenz Messung n\xc3\xb6tig.";\n
Run Code Online (Sandbox Code Playgroud)\n\nIV)确保每个 InfoPlist.strings 文件都选择了正确的目标和语言(对应于每个目标 - 虽然可以理解,WatchKit 目标很可能不需要 InfoPlist.strings 本地化 - 但其他两个目标肯定需要[即 MyApp-target 和 MyApp WatchKit 扩展])。
\n\n\n\nV)如果一切设置正确,您的目标文件夹组之一现在将如下所示:
\n\n\n(其中 InfoPlist.strings 已本地化为相应语言,Info.plist 已本地化为 Base)
// -----------------------------------------------------------------------------\n
Run Code Online (Sandbox Code Playgroud)\n\n我们不要问为什么 Apple 让 Apple Watch 正确归属默认语言和区域变得如此复杂,并且还让 InfoPlist.strings 的不同语言本地化变得非常明显。
\n 归档时间: |
|
查看次数: |
1149 次 |
最近记录: |