当新创建iOS应用程序的Xcode项目时,在项目(非目标)设置中,我们可以看到默认情况下已启用Use Base internationalization
,并且Development Language
有2个文件已本地化默认情况下为English
(一个用于Main.storyboard
,一个用于LaunchScreen.storyboard
,两者都位于Base.lproj
目录中。请参见下面的屏幕截图:
(为简单起见,我现在只提及Main.storyboard
。)
在Main.storyboard
右侧面板的本地化部分,我们可以看到默认情况下检查Base
本地化,并且还有English
本地化默认情况下取消选中。请参见下面的屏幕截图:
在目标Info.plist
中,有一个名为Localization native development region
的密钥(即CFBundleDevelopmentRegion
),其默认值为en
。请参见下面的屏幕截图:
如果我理解正确,使用这些默认设置,开发人员只需在Base
的{{1}}本地化版中写英文,并保持Main.storyboard
本地化为未选中状态。如果应用程序需要适应其他语言,开发人员可以在项目本地化设置中添加本地化,并在弹出的对话框中选择English
。请参见下面的屏幕截图:
以Main.storyboard
为例,这将导致新创建的目录Chinese (Simplified)
中包含zh-Hans.lproj
文件。 (为简单起见,我将其称为Main.strings
而不是Chinese
。)开发人员只需要将此文件中的英文字符串翻译成中文(Chinese (Simplified)
中新创建的Main.strings
默认情况下,1}}目录中的所有英文文本都来自zh-Hans.lproj
中的Main.storyboard
。使用这些设置,AppStore上此应用程序说明中的Base.lproj
字段将列出英语(来自Language
本地化,因为英语是Base
)和中文(来自{{1本地化)。在最终用户的设备上,如果系统语言是英语/中文(或英语/中文是首选语言),该应用程序将使用相应的语言资源(对于英语,使用development language
本地化;对于中文,请使用Chinese
本地化)。对于所有其他语言偏好设置,英语将作为后备语言,因为Base
为Chinese
,因此使用CFBundleDevelopmentRegion
本地化。
所以我的第一个问题是,上述理解是正确的吗?总而言之,en
为英语,我们不需要为故事板文件启用Base
本地化。只需使用development language
本地化并直接在故事板文件中写英文。我们只需要为英语以外的语言添加本地化。 (实际上如果我们启用English
本地化似乎很麻烦。如果Base
本地化已启用,那么我们需要在English
和English
中维护这两个文本。)
如果上述理解是正确的,我的第二个问题是,如何以相反的方式实现国际化?也就是说,如果我想将Base.lproj/Main.storyboard
用作en.lproj/Main.strings
并在Chinese
本地化中编写中文,并且仅为development language
以外的语言添加本地化,则为有可能以及如何在Xcode中做到这一点?我无法找到更改项目设置中Base
的方法,以声明项目中的Chinese
本地化为development language
而不是Base
。
答案 0 :(得分:16)
您的理解大多是正确的。一个小小的澄清:如果用户使用某种第三语言(如俄语)运行,则该应用程序不一定会以英语运行。相反,应用程序将以用户喜欢的第一种语言运行。从iOS 8及更高版本开始,用户可以拥有首选语言的列表,例如“俄语,法语,中文,英语”。对于这个假设用户,该应用程序实际上将以中文运行,因为它在列表中的位置早于英语。
要回答有关更改开发语言的问题,这不是直截了当的,但可以完成。具体做法是:
Info.plist
中(如您所见),将开发区域更改为您希望成为基础语言的语言。请注意,该属性有点错误,因为它的值应该是语言代码(带有可选的国家/地区代码),而不是区域或国家/地区代码。projectname.xcodeproj/project.pbxproj
并搜索developmentRegion
。你应该看到像developmentRegion = English;
这样的行。更改此选项以引用您在Info.plist
文件中添加的语言。以下是使用fr
作为基础语言的结果示例: