肇鑫的技术博客

业精于勤,荒于嬉

Xcode中,项目的语言和翻译之间的关系

系统选择语言的机制

如果想要卖出更多的程序,你的程序就必须支持多国语言。iOS和macOS在处理程序时,语言部分的模型是这样的:

  1. 用户可以设置多个他懂得的语言,语言的优先级别是从上到下。
  2. 系统打开某个程序时,按照用户设置的语言偏好,依次查找程序是否提供了该语言的界面,如果是,就加载该语言,并打开程序;如果不是,就加载程序员指定的默认语言。

举例:
假设小明的设定的语言偏好顺序为简体中文、繁体中文、英文,程序A提供的语言为繁体中文、英文(默认)。那么小明打开程序A时,程序A会显示繁体中文的界面。
假设雅克布系统设定的语言偏好为法文,那么他打开程序A时,由于程序A没有提供法文的翻译,且程序A的默认语言为英文,所以雅克布看到的程序A界面就是英文的。

中文开发者面对的问题

程序员面对的问题更复杂一些。传统来说,程序员一般选择英文进行开发,然后再翻译成中文和其它语言。这个流程是经过检验的。可是对于中文开发者来说,直接用中文开发界面,然后再翻译成英文或其它界面,在查看时会更加直观。不过,传统上一般认为,如果你直接用中文开发,那么遇到上面举例中的雅克布的情况,由于默认开发的语言已经是中文,雅克布可能会看到一个自己不懂的中文界面的情况。

小结:中文开发者面对的问题是:

  1. 要使用中文开发
  2. 当用户偏好的语言,程序未能提供时,默认显示英文的界面

要解决这个问题,首先得知道Xcode中语言和翻译相关的模型。

Xcode中的语言模型

  1. Xcode采用Base Internationalization的方式。默认情况下,Base Internationalization为英文。
  2. 用户可以在项目的Info.plist中指定程序成默认语言,默认是英文。
  3. 用户添加多种语言的翻译。

解决方案

  1. 新建一个Cocoa程序项目
  2. 在Finder中,找到你的项目的.xcodeproj文件,右键点击,选显示包内容
  3. 双击打开project.pbxproj文件
  4. 在打开的文件中,搜索developmentRegion,默认对应的值为English,将其改为zh-Hans,并保存。这里修改的是Base Internationalization的语言,Xcode中显示为Development Language.
  5. 回到新建的项目,打开项目中的Info.plist,查看Localization native development region项,默认应该是en。如果确认为en,则不用修改。这个项的键是CFBundleDevelopmentRegion。代表程序的默认界面语言。
  6. 点击项目文件,添加新语言Chinese(Simplified),你会看到简体中文后面的括号里写着Development Language。这代表设置成功了。