COCOA 国际化的小笔记

一般提到 COCOA 的国际化无非就是在所有需要显示文本的地方调用 NSLocalizedString(key,comment) 方法,由程序自动按照当前系统语言设置载入相应 Localizable.strings,并获取 key 所对应的文本。比如 NSLocalizedString(@”username”,nil),在中文系统下显示为用户名,而在英文系统下显示为 username。(值得注意的是 XCode 中所有工程的默认语言设置都是英文,在找不到其他语言 strings 文件时都统一使用英文的 Localizable.strings 文件)。

而更复杂的应用场景是需要对 xib 文件做国际化—- 不同语言环境下显示不同的界面 (而不仅仅是文本不同而已)。处理的方法和上面基本一致: 在 XCode 下右击相应的 xib 文件 ->Get Info,然后 add localization 即可。

而最后一个需要国际化的地方是 App 名。比如 mac 系统下的文本编辑 app,在英文环境下显示为 TextEdit,在中文环境下却是文本编辑。处理方法是:

  • 在 info.plist 中设置 Application has localized display name 为 YES
  • 设置 info.plist 的 CFBundleDisplayName 和 CFBundleName 都为 $(PROJECT_NAME)
  • 对 infoPlist.strings 文件做国际化处理,方法和处理字符文件和 xib 一样。
  • 编辑不同的 infoPlist.strings 文件,设置相应的显示名字:CFBundleDisplayName 和 CFBundleName。

对 App 名做如上国际化影响到的地方包括:Finder 中查看到文件名,程序在 Monitor 中显示进程名,程序菜单第一项名称,程序在 Dock 上的显示名称等等,但是对程序在终端中显示的文件路径不影响 (即真正的文件路径)。比如文本编辑 app,在中文下显示为文本编辑,英文下为 TextEdit,但不管在哪个语言环境下通过终端查看文件都显示为 TextEdit.app。