如何将开发语言和基础本地化设置为非英语?

16
当创建一个 iOS 应用程序的 Xcode 项目时,在项目(而不是目标)设置中,可以看到默认启用了“使用基础国际化”,并且有两个文件针对默认的“开发语言”英语进行本地化(一个是“Main.storyboard”,另一个是“LaunchScreen.storyboard”,两个文件都位于“Base.lproj”目录中)。如下所示屏幕截图:

Xcode default project localization setting

(为简单起见,从现在开始我只提到“Main.storyboard”)。
在“Main.storyboard”的右侧面板的本地化部分中,可以看到默认选中了“Base”本地化,并且还有一个默认未选中的英语本地化。如下所示屏幕截图:

storyboard default localization setting

在目标的“Info.plist”中,有一个名为“本地化本地开发区域”的键(即“CFBundleDevelopmentRegion”),其默认值为“en”。如下所示屏幕截图:

Localization native development region

如果我理解正确的话,使用这些默认设置,开发人员只需在Main.storyboardBase本地化中编写英语,然后将English本地化保持未勾选状态。如果应用程序需要适应其他语言,则开发人员可以在项目本地化设置中添加一个本地化,并选择弹出的对话框中的Main.storyboard。请参见下面的屏幕截图:

add localization

简体中文为例,这将导致新创建一个目录zh-Hans.lproj,其中包含一个Main.strings文件。(为简单起见,我将其称为中文而不是简体中文。)开发人员只需将该文件中的英文字符串翻译为中文(在zh-Hans.lproj目录中新创建的Main.strings默认情况下将从Base.lprojMain.storyboard中复制所有英文文本)。使用这些设置,在AppStore上此应用程序的描述中的Language字段将列出英语(来自Base本地化,因为英语是开发语言)和中文(来自中文本地化)。在最终用户的设备上,如果系统语言是英语/中文(或英语/中文是首选语言之一),则应用程序将使用相应的语言资源(对于英语,请使用Base本地化;对于中文,请使用中文本地化)。对于所有其他语言偏好,英语将作为后备语言,因为CFBundleDevelopmentRegionen,所以使用Base本地化。我的第一个问题是,以上理解是否正确?总结一下,使用英语作为开发语言,我们不需要启用英语本地化文件,只需使用Base本地化,并直接在故事板文件中编写英文。我们只需要为非英语语言添加本地化。实际上,如果启用了英语本地化,似乎会很麻烦。如果启用了英语本地化,则需要同时维护Base.lproj/Main.storyboarden.lproj/Main.strings中的文本。
如果以上理解是正确的,我的第二个问题是如何以相反的方式实现国际化?也就是说,如果我想将中文作为开发语言,并在Base本地化中编写中文,并仅为非中文语言添加本地化,这是否可行,如何在Xcode中进行操作?我无法找到更改项目设置中的开发语言的方法,以便声明项目中的Base本地化是中文而不是英文

这意味着你有英语和中文的Base。如果你想要翻译它们,你必须在两种语言字符串中设置文本。如果从设置更改语言,应用程序将设置已翻译的字符串。如果您想从您的应用程序(locale)设置语言,您可以使用LocalizationSystem。https://github.com/rudensm/LocalizationSystem - Stefan
请勿在应用程序中设置语言,这样只会引发错误和维护上的噩梦。 - lensovet
1个回答

26

大部分你的理解是正确的。有一个小澄清:如果用户运行的是另一种语言,比如俄语,那么应用程序不一定会以英语运行。相反,该应用程序将以用户偏好的第一种语言运行,只要该应用程序支持该语言。截至iOS 8及更高版本,用户可以拥有一个首选语言列表,例如“俄语、法语、中文、英语”。对于这个假设用户来说,应用程序实际上将以中文运行,因为它比英语更靠前。

关于更改开发语言的问题,这并不是易于完成但可以完成的。具体而言:

  1. 首先,添加您想作为基本语言的语言。 取消选中 Xcode提供的所有要本地化的文件。
  2. Info.plist 文件中 (正如你所观察到的),将开发语言区域更改为您希望成为基本语言的语言。请注意,该属性名称有些错误,因为其值应该是语言代码(带有可选的国家/地区代码),而不是区域或国家/地区代码。
  3. 关闭Xcode中的项目。在另一个代码编辑器中,打开 projectname.xcodeproj/project.pbxproj 文件并搜索 developmentRegion。您应该看到一行类似于 developmentRegion = English; 的代码行。将此更改为引用与您放在 Info.plist 文件中的相同语言。
  4. 重新打开Xcode中的项目。勾选所有本地化文件旁边的英语框,以生成可本地化资源。请注意,对于故事板和xib,Xcode可能会创建一个故事板而不是字符串文件。如果发生这种情况,请将文件类型更改为字符串文件。

这是我使用fr作为基础语言的结果示例:

Project info

File info


3
我没有选择取消Xcode提供给我的所有文件的选项。所以我离开了启动屏幕,在完成过程后,我只是回到了启动屏幕,并从右侧菜单中取消了该文件的选择。 - Idan Magled
你是在何时添加第二种语言(英语)的?即使在勾选了“使用基本国际化”之后,你是如何设法在第一个截图(“本地化”)中摆脱“Base”的?我按照步骤进行操作,但必须选择其中一个文件,否则Xcode不会添加新的语言,所以我像Idan建议的那样将“LaunchScreen”留下。我按照你描述的更改了开发语言,但并没有去掉“Base”。为了取消对Storyboard的勾选,我尝试了去勾选,结果系统询问是否要移动和替换它,然后我遇到了一个错误(“不包含有效数据的UTF-16编码”)。 - Neph
顺便提一下,在文件中更改“developmentRegion”也会在“本地化”中创建一个新的列表条目,其中包含“0个文件已本地化”。 - Neph

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