如何设置非英文语言为开发语言和Base本地化?
How to set language other than English as the development language and Base localization?
新建iOSapp的Xcode项目时,在project(not target)设置中可以看到默认开启了Use Base internationalization
,并且有2 个为 Development Language
本地化的文件,默认情况下为 English
(一个用于 Main.storyboard
,一个用于 LaunchScreen.storyboard
,两者都位于 Base.lproj
目录中)。请参阅下面的屏幕截图:
(为简单起见,以后只提Main.storyboard
)
而在Main.storyboard
右侧面板的本地化部分,我们可以看到默认选中Base
本地化,还有一个English
本地化默认情况下未选中。请参阅下面的屏幕截图:
而在目标的Info.plist
中,有一个键名为Localization native development region
(即CFBundleDevelopmentRegion
),其默认值为en
。请参阅下面的屏幕截图:
如果我理解正确,使用这些默认设置,开发人员可以在 Main.storyboard
的 Base
本地化中只写英文,而让 English
本地化保持未选中状态。如果应用程序需要适配其他语言,开发者可以在项目本地化设置中添加本地化,在弹出的对话框中添加select Main.storyboard
。请参阅下面的屏幕截图:
以Chinese (Simplified)
为例,这将导致新建一个目录zh-Hans.lproj
,里面有一个Main.strings
文件。 (为简单起见,我将其称为 Chinese
而不是 Chinese (Simplified)
。)开发人员只需将此文件中的英文字符串翻译成中文([= 中新创建的 Main.strings
29=] 目录默认包含从 Base.lproj
中的 Main.storyboard
复制的所有英文文本。通过这些设置,AppStore 上此应用程序描述中的 Language
字段将列出英文(来自 Base
本地化,因为英文是 development language
)和中文(来自 Chinese
本地化)。在最终用户的设备上,如果系统语言是 English/Chinese(或 English/Chinese 是首选语言),应用程序将使用相应的语言资源(对于英语,使用 Base
本地化; 对于中文,请使用 Chinese
本地化)。对于所有其他语言偏好,英语将作为后备语言,因为 CFBundleDevelopmentRegion
是 en
,因此使用 Base
本地化。
那么我的第一个问题就是,上面的理解对吗?总而言之,development language
是英语,我们不需要为故事板文件启用 English
本地化。只需使用 Base
本地化并直接在故事板文件中写入英文即可。我们只需要为英语以外的语言添加本地化。 (其实如果我们开启English
本地化好像比较麻烦,如果开启English
本地化,那么我们需要同时维护Base.lproj/Main.storyboard
和en.lproj/Main.strings
中的文字。)
如果上面的理解是正确的,那么我的第二个问题就是,如何反向实现国际化?也就是说,如果我想用Chinese
作为development language
,在Base
本地化中写中文,只为Chinese
以外的语言添加本地化,是在 Xcode 中有可能以及如何做到这一点?我找不到更改项目设置中的 development language
以声明项目中的 Base
本地化是 Chinese
而不是 English
的方法。
你的理解基本正确。一个小小的澄清:如果用户 运行 正在使用某种第三语言,例如俄语,则该应用不一定会 运行 为英语。相反,该应用程序将 运行 使用用户喜欢的它支持的第一种语言。从 iOS 8 及更高版本开始,用户可以拥有一个 列表 的首选语言,例如 "Russian, French, Chinese, English"。对于这个假设的用户,该应用程序实际上会 运行 中文,因为它在列表中比英文更早。
要回答您有关更改开发语言的问题,这不是一件容易的事,但可以做到。具体来说:
- 首先添加您希望作为基本语言的语言。 取消选中 Xcode 为您提供本地化的所有文件。
- 在
Info.plist
中(如您观察到的那样),将开发区域更改为您希望作为基础语言的语言。请注意 属性 有点命名错误,因为它的值应该是 语言代码 (带有可选的国家/地区代码),而不是区域或国家/地区代码。
- 在 Xcode 中关闭您的项目。在另一个代码编辑器中,打开
projectname.xcodeproj/project.pbxproj
并搜索 developmentRegion
。您应该会看到类似 developmentRegion = English;
的行。将其更改为引用您在 Info.plist
文件中输入的相同语言。
- 重新打开 Xcode 中的项目。浏览所有可本地化的文件并选中英语旁边的框以生成可本地化的资源。请注意,对于故事板和 xib,Xcode 可能会创建故事板而不是字符串文件。如果发生这种情况,只需将文件类型更改为字符串文件即可。
这是我使用 fr
作为基本语言的结果示例:
新建iOSapp的Xcode项目时,在project(not target)设置中可以看到默认开启了Use Base internationalization
,并且有2 个为 Development Language
本地化的文件,默认情况下为 English
(一个用于 Main.storyboard
,一个用于 LaunchScreen.storyboard
,两者都位于 Base.lproj
目录中)。请参阅下面的屏幕截图:
(为简单起见,以后只提Main.storyboard
)
而在Main.storyboard
右侧面板的本地化部分,我们可以看到默认选中Base
本地化,还有一个English
本地化默认情况下未选中。请参阅下面的屏幕截图:
而在目标的Info.plist
中,有一个键名为Localization native development region
(即CFBundleDevelopmentRegion
),其默认值为en
。请参阅下面的屏幕截图:
如果我理解正确,使用这些默认设置,开发人员可以在 Main.storyboard
的 Base
本地化中只写英文,而让 English
本地化保持未选中状态。如果应用程序需要适配其他语言,开发者可以在项目本地化设置中添加本地化,在弹出的对话框中添加select Main.storyboard
。请参阅下面的屏幕截图:
以Chinese (Simplified)
为例,这将导致新建一个目录zh-Hans.lproj
,里面有一个Main.strings
文件。 (为简单起见,我将其称为 Chinese
而不是 Chinese (Simplified)
。)开发人员只需将此文件中的英文字符串翻译成中文([= 中新创建的 Main.strings
29=] 目录默认包含从 Base.lproj
中的 Main.storyboard
复制的所有英文文本。通过这些设置,AppStore 上此应用程序描述中的 Language
字段将列出英文(来自 Base
本地化,因为英文是 development language
)和中文(来自 Chinese
本地化)。在最终用户的设备上,如果系统语言是 English/Chinese(或 English/Chinese 是首选语言),应用程序将使用相应的语言资源(对于英语,使用 Base
本地化; 对于中文,请使用 Chinese
本地化)。对于所有其他语言偏好,英语将作为后备语言,因为 CFBundleDevelopmentRegion
是 en
,因此使用 Base
本地化。
那么我的第一个问题就是,上面的理解对吗?总而言之,development language
是英语,我们不需要为故事板文件启用 English
本地化。只需使用 Base
本地化并直接在故事板文件中写入英文即可。我们只需要为英语以外的语言添加本地化。 (其实如果我们开启English
本地化好像比较麻烦,如果开启English
本地化,那么我们需要同时维护Base.lproj/Main.storyboard
和en.lproj/Main.strings
中的文字。)
如果上面的理解是正确的,那么我的第二个问题就是,如何反向实现国际化?也就是说,如果我想用Chinese
作为development language
,在Base
本地化中写中文,只为Chinese
以外的语言添加本地化,是在 Xcode 中有可能以及如何做到这一点?我找不到更改项目设置中的 development language
以声明项目中的 Base
本地化是 Chinese
而不是 English
的方法。
你的理解基本正确。一个小小的澄清:如果用户 运行 正在使用某种第三语言,例如俄语,则该应用不一定会 运行 为英语。相反,该应用程序将 运行 使用用户喜欢的它支持的第一种语言。从 iOS 8 及更高版本开始,用户可以拥有一个 列表 的首选语言,例如 "Russian, French, Chinese, English"。对于这个假设的用户,该应用程序实际上会 运行 中文,因为它在列表中比英文更早。
要回答您有关更改开发语言的问题,这不是一件容易的事,但可以做到。具体来说:
- 首先添加您希望作为基本语言的语言。 取消选中 Xcode 为您提供本地化的所有文件。
- 在
Info.plist
中(如您观察到的那样),将开发区域更改为您希望作为基础语言的语言。请注意 属性 有点命名错误,因为它的值应该是 语言代码 (带有可选的国家/地区代码),而不是区域或国家/地区代码。 - 在 Xcode 中关闭您的项目。在另一个代码编辑器中,打开
projectname.xcodeproj/project.pbxproj
并搜索developmentRegion
。您应该会看到类似developmentRegion = English;
的行。将其更改为引用您在Info.plist
文件中输入的相同语言。 - 重新打开 Xcode 中的项目。浏览所有可本地化的文件并选中英语旁边的框以生成可本地化的资源。请注意,对于故事板和 xib,Xcode 可能会创建故事板而不是字符串文件。如果发生这种情况,只需将文件类型更改为字符串文件即可。
这是我使用 fr
作为基本语言的结果示例: