【发布时间】:2016-03-01 08:59:50
【问题描述】:
新建iOS应用的Xcode项目时,在项目(非目标)设置中我们可以看到默认启用了Use Base internationalization,并且有2个文件本地化为Development Language,即@987654332 @ 默认情况下(一个用于Main.storyboard,一个用于LaunchScreen.storyboard,两者都位于Base.lproj 目录中)。看下面的截图:
(为简单起见,以后我只提Main.storyboard。)
在Main.storyboard右侧面板的本地化部分,我们可以看到Base本地化默认选中,还有一个English本地化默认未选中。看下面的截图:
而在目标的Info.plist中,有一个key名为Localization native development region(即CFBundleDevelopmentRegion),其默认值为en。请参阅下面的屏幕截图:
如果我理解正确,使用这些默认设置,开发人员可以在Main.storyboard 的Base 本地化中写英文,并将English 本地化保留为未选中。如果应用需要适配其他语言,开发者可以在项目本地化设置中添加本地化,在弹出的对话框中选择Main.storyboard。看下面的截图:
以Chinese (Simplified) 为例,这将导致一个新创建的目录zh-Hans.lproj 里面有一个Main.strings 文件。 (为简单起见,我将其称为Chinese而不是Chinese (Simplified)。)开发者只需要将这个文件里面的英文字符串翻译成中文(zh-Hans.lproj目录下新建的Main.strings默认包含所有从Main.storyboard 在Base.lproj 中复制的英文文本)。通过这些设置,AppStore 上此应用程序描述中的Language 字段将列出英文(来自Base 本地化,因为英文是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并在Base本地化中写中文,并且只为Chinese以外的语言添加本地化,是否可以以及如何做到这一点码?我找不到更改项目设置中的development language 的方法,以声称项目中的Base 本地化是Chinese 而不是English。
【问题讨论】:
-
这意味着你有基础(英文)和中文。如果要翻译它们,则必须在两种语言字符串中设置文本。如果语言从设置中更改,应用程序将设置翻译字符串。如果您想从您的应用程序(区域设置)设置语言,您可以使用 LocalizationSystem。 github.com/rudensm/LocalizationSystem
-
请不要在您的应用中设置语言。您只是在寻找错误和维护噩梦。
标签: ios objective-c xcode localization internationalization