首页 > 解决方案 > 如何在 Xcode 12(.5) 中设置基本本地化和开发语言?

问题描述

我写这个问题是因为 Stackoverflow(甚至苹果的开发者网站)上关于这个主题的很多信息很遗憾已经部分过时了:

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

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

在此处输入图像描述

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

在此处输入图像描述

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

语言Info.plist设置如下:

在此处输入图像描述

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

根据 Apple 的旧Localization Guide,“Base”是使用的默认语言,只要它包含在用户的语言设置中(在我的例子中:德语)。如果用户的语言设置不包括基本语言(在我的情况下:英语),则“开发者语言”是使用的“后备”语言。这个问答页面还说:

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

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

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

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

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

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

标签: iosxcodelocalization

解决方案


我想要达到的目标:

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

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

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

在此处输入图像描述

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

在此处输入图像描述

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

在此处输入图像描述

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

在此处输入图像描述

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

我使用了 B 版:

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

重要的:

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

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

在此处输入图像描述

奖金信息:

可以通过scheme更改模拟器的app语言:

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

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

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

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


推荐阅读