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

Nep*_*eph 3 xcode localization ios

我写这个问题是因为 Stackoverflow(甚至 Apple 的开发者网站)上有关此主题的大量信息不幸部分已过时:

我想在 Xcode 12.5/Swift 5/iOS 12.3+ 应用程序中支持多种语言:德语作为默认语言,英语作为“后备”。

目前,“信息”选项卡列出了两种“本地化”语言:

在此输入图像描述

Main.storyboardmy和file的文件检查器的“本地化”部分LaunchScreen.storyboard如下所示(默认情况下):

在此输入图像描述

“Base”被选中,这就是为什么第一个屏幕截图显示了它的 2 个文件。

中的语言Info.plist设置如下:

在此输入图像描述

到目前为止,我还没有触及实际的本地化设置,并且我一直在 XIB 中为每个标签使用相同的语言(可能保存在“Base”中)。

根据苹果旧的本地化指南,“Base”是使用的默认语言,只要它包含在用户的语言设置中(在我的例子中:德语)。“开发人员语言”是用户的语言设置不包括基本语言(在我的例子中:英语)时使用的“后备”语言。此问答页面还说:

如果您采用基本本地化,请确保 CFBundleDevelopmentRegion 的值与 Base.lproj 文件夹中的内容使用的语言匹配。

...并且在本指南中,为两个故事板启用“英语 - 开发语言”的基本本地化会向其中添加 2 个本地化文件,而实际上不会向列表中添加另一个(“基本”)本地化。正如您在我的第一个屏幕截图中看到的,“Base”和“Development”是单独的列表条目,而早期 Xcode 版本中并非如此。

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

我上面链接的相同问答也详细介绍了特定语言的区域版本:

如果我的应用程序支持“德语”(语言代码:“de”),但用户的语言设置仅列出例如奥地利德语(“de_AT”),则应用程序仍会将其自己的语言设置为德语。假设我想使用瑞士德语 (de_CH) 作为默认语言,但用户在他的设置中只选择了奥地利德语 (“de_AT”),这仍然有效吗?您是否应该将应用程序的默认语言设置为常规非区域语言(德语 =“de”),即使标签...使用例如瑞士德语单词?

如何将“基本”语言更改为德语(比方说“de_CH”)并使其显示在列表中,同时使用英语(“en”)作为“后备”?我确实找到了类似的问题,但不幸的是,答案中描述的步骤在 Xcode 12.5 中的工作方式不同。不再了。

Nep*_*eph 7

我想要实现的目标:

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

我是如何在 Xcode 12.5 中实现这一目标的:

  1. 通过小“+”按钮将“德语 (de)”添加到“本地化”列表中。在新的Choose files and reference language to create German localization弹出窗口中,默认情况下应该已经勾选了每个故事板文件。这会.strings (German)在左侧的项目导航器中添加所有故事板的本地化文件:

在此输入图像描述

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

在此输入图像描述

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

在此输入图像描述

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

在此输入图像描述

  • B. 使用默认语言作为“基本”语言:取消选中每个故事板的“德语”,然后在弹出窗口中点击“删除”,这将删除列表中的本地化内容。这样,对故事板的更改会影响默认语言,从而更容易测试更改。

我用的是B版:

在此输入图像描述在此输入图像描述在此输入图像描述

重要的:

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

  1. File- New- File- Strings File- 叫它Localizable.strings
  2. 单击文件检查器中的“本地化”,然后选择要在代码中使用的语言之一。
  3. 之后,同样在文件检查器中,您可以在“本地化”部分中勾选其他语言(包括开发语言)。

在此输入图像描述

奖金信息:

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

Product- Scheme- Edit Scheme- Run(左侧) - Options选项卡(右侧) -App Language

您还可以显示当前所选内容的预览UIViewController并更改其显示语言,而无需启动模拟器:

Editor- Preview- 在右侧新的预览窗口右下角有一个按钮

免责声明:我通过测试不同的东西找到了这个解决方案,因为目前没有这方面的教程(使用最新的 Xcode 版本)。如果这不是进行本地化的“正确”方法,请发布您自己的答案,我会检查一下。