如何在Xcode 12(.5)中设置基础本地化和开发语言?

3
我写这个问题是因为Stackoverflow(甚至苹果的开发者网站)上关于此主题的很多信息都部分过时:
我想在我的Xcode 12.5/Swift 5/iOS 12.3+应用程序中支持多种语言:默认语言为德语,英语作为“备用语言”。
目前,“信息”选项卡列出了两种“本地化”语言:

enter image description here

我的Main.storyboardLaunchScreen.storyboard文件的“本地化”部分默认情况下如下所示:

enter image description here

"Base" 被选中,这就是为什么第一个截图显示了 2 个文件。 Info.plist 中的语言设置如下:

enter image description here

到目前为止,我还没有触及实际的本地化设置,而是在XIB中使用相同的语言(可能保存在“基础”中)来标记每个标签。根据苹果旧版本地化指南,只要用户的语言设置中包括“基础”,它就是默认语言。如果用户的语言设置不包括基础语言,则“开发人员语言”是使用的“后备”语言(在我的情况下是英语)。这个问答页面也提到:“如果您采用了基础本地化,请确保CFBundleDevelopmentRegion的值与Base.lproj文件夹中内容使用的语言匹配。”

...在这个指南中,启用“英语-开发语言”的基本本地化,可以为两个storyboard添加2个本地化文件,而不实际添加另一个(“基础”)本地化到列表中。如您在我的第一张截图中看到的那样,“基础”和“开发”是单独的列表条目,在早期的Xcode版本中并非如此。

我的第一个问题是:我是否正确理解了所有这些?引文将“基础”和“开发语言”视为同一事物,这有点令人困惑,尽管您当然可以拥有不是“回退”语言的默认语言。

上面我提供的问答也详细介绍了特定语言的区域版本:

如果我的应用程序支持“德语”(语言代码:“de”),但用户的语言设置仅列出例如奥地利德语(“de_AT”),则该应用程序仍将将其自己的语言设置为德语。假设我想将瑞士德语(de_CH)用作默认语言,但用户在设置中只选择了奥地利德语(“de_AT”),这样是否仍然有效?您是否应该将应用程序的默认语言设置为常规非区域性语言(德语=“de”),即使标签等使用例如瑞士德语单词?
如何将“基础”语言更改为德语(比如说,“de_CH”),并使其在列表中显示为该语言,同时将英语(“en”)用作“回退”?我找到了一个类似的问题,但不幸的是answer中描述的步骤在Xcode 12.5中不再起作用。
1个回答

7

我想要实现的目标:

支持英文,但将德语作为默认语言,如果用户的语言设置中不包括英语或德语,则也使用德语。

我在Xcode 12.5中如何实现这一点:

  1. 通过小加号按钮将"German (de)"添加到"本地化"列表中。在新的选择文件和参考语言以创建德语本地化弹出窗口中,每个故事板文件应该已经默认选中。这将在左侧的项目导航器中为所有故事板添加.strings (German)本地化文件:

enter image description here

  1. Main.storyboard 的文件检查器中,在“本地化”部分勾选“英语”框(可能需要一段时间)。这会在项目导航器中添加一个额外的 Main.strings(英语) 文件。对于每个故事板,包括启动屏幕,都要重复此步骤。

enter image description here

要更改“开发语言”,即应用程序默认使用的语言,以及如果它不支持用户在其设备语言设置中设置的任何语言,则关闭Xcode,然后使用文本编辑器(我使用了免费的BBEdit)打开项目的.xcodeproj文件。应该有一个文件列表,包括project.pbxproj。打开它,并将developmentRegion(=开发语言)设置为您在步骤1中添加的语言的语言代码,因此在我的情况下为“de”。不要使用不同的代码(例如添加“德语(de)”,但将其设置为“de_CH”),因为这将创建其他本地化。

enter image description here

  1. 现在有两种方法来完成本地化的这一部分:
  • A. 保持原样。故事板中的更改不会影响任何 .strings 文件。优点:文本可以直接编辑(无需使用故事板),这对于不是负责翻译工作的人很有用。缺点:您不能快速查看和测试故事板中的翻译更改,而必须在模拟器或实际设备上运行应用程序。

enter image description here

  • B. 将默认语言设置为“基础”语言:对于每个故事板,请取消勾选“德语”,然后单击弹出窗口中的“删除”按钮,以从列表中删除本地化。这样故事板的更改将影响默认语言,从而更容易测试更改。

我使用了B版本:

enter image description hereenter image description hereenter image description here

重要提示:

这些.strings文件仅用于故事板!如果您还想在运行时使用NSLocalizedString设置本地化文本(例如,用于错误对话框),则必须添加另一个Localizable.strings文件(更多细节在此处):

  1. 文件 - 新建 - 文件 - 字符串文件 - 将其命名为Localizable.strings
  2. 在其“文件检查器”中单击“本地化”,然后选择要在代码中使用的语言之一。
  3. 随后,在文件检查器中,在“本地化”部分中可以选中其他语言(包括开发语言)。

enter image description here

额外信息:

你可以通过以下方案更改模拟器的应用程序语言:

Product - Scheme - Edit Scheme - Run(左侧)- 选项标签(右侧) - 应用程序语言

你也可以在不启动模拟器的情况下,显示当前选择的UIViewController的预览,并更改其显示语言:

Editor - 预览 - 在右侧的新预览窗口中,有一个位于右下角的按钮

免责声明:我是通过测试不同的方法来找到这个解决方案的,因为目前没有关于此的教程(使用最新的Xcode版本)。如果这不是本地化的“正确”方式,请发布你自己的答案,我会检查它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接