macOS 开发之 APP 名称本地化

开发了一款好用的 macOS app 后,为了让更多人的尝到自己 “真香” 的作品,app 的国际化和本地化是有必要的,app 的本地化分三部曲讲解,本文是第一部:app 名称的本地化。

第二部传送门:macOS 开发之 storyboard 或 xib 本地化

第三部传送门:macOS 开发之代码字符串的本地化

实现平台

  • macOS 10.14.3
  • swift 4.2.1
  • xcode 10.1

新建一个空的工程

为了更好地讲述本地化 APP 名称,以一个 Cocoa App 新工程为例进行说明。

  1. 打开 Xcode,按下快捷键 Shift + Command + N 就会触发新建工程的导航窗口

  2. 选择 macOS -> Cocoa App,点击 Next

  3. 工程取名为 InternationalDemo,勾选 Use Storyboards

添加语言支持

工程的国际化和本地化依托于各国语言的支持,所以需要先为工程添加语言支持。

  1. Xcode 左侧工程导航栏,点击工程,会看到右侧工程配置信息,点击 PROJECT 下的 InternationalDemo

  2. 在出现的配置项中有 Localizations,可以看到默认是有一个 English 的,点击 + 号会出现选择语言的下拉菜单,如下:

  3. 选择 Chinese(Simplified)(zh-Hans) 即可出现添加简体中文的窗口,点击 Finish 即可完成添加:

  4. 为了更好的演示,按照上面的操作再添加 Janpanese(ja) 的支持,最终 Localizations 语言如下:

添加相关本地化文件

为了实现 macOS 系统下 Dock 栏、全局菜单栏和 Finder 中 app 的名称均可以跟随系统语言的设置显示对应语言的名称,需要在工程中添加一个名为 InfoPlist.strings 的文件,并进行本地化!

添加 InfoPlist.strings

  1. 按下组合键 Command + n 调出新建文件的导航窗口,找到 macOS -> Resources -> Strings File

  2. 点击 Next,更改名称为 InfoPlist.stringsGroup 选择 InternationalDemo 文件夹,其它默认,点击 Create 完成文件的添加。

InfoPlist.strings 添加本地化支持

  1. 选中导航栏中的 InfoPlist.strings ,按下组合键 Option + Command + 1 就会显示 InfoPlist.strings 的 Inspector

  2. 会看到有一项是 Localizations 其中有个 Localize... 按钮:

  3. 点击这个按钮,会弹出一个窗口,其中有个下拉菜单控件,其中包含了上面添加的三个语言支持:

  4. 选择 English 选项,点击 Localize 就会发现 InfoPlist.strings Inspector 中的 Localizations 分组变成了三个勾选框,其中 English 是勾选的,这里也把 Chinese 和 Japanese 勾选上,此时你会发现 Xcode 左侧工程导航栏 InfoPlist.strings 左侧出现了一个小三角,点开就会发现其变成了与三种语言对应的三个 Strings 文件:

添加 App 名称配置

菜单栏 App 名称本地化

要实现菜单栏 App 名称本地化需要在上面添加的三个文件中添加 CFBundleName 字符串。

  • InfoPlist.strings (English) 文件中添加以下代码:
CFBundleName = "International Demo";
  • InfoPlist.strings (Chinese(Simplified)) 文件中添加以下代码:
CFBundleName = "国际化演示";
  • InfoPlist.strings (Japanese) 文件中添加以下代码:
CFBundleName = "国際デモ";

更改系统语言设置,可以查看不同语言设置下的运行效果,在系统语言设置中更改了语言是大部分生效的,不要关闭设置窗口,否则关闭的话会提示重启,各类语言设置检查之后在改回原来的语言即可!

  • 英文:

  • 简体中文:

  • 日文:

Dock 栏和 Finder 中 App 名称本地化

如上在三个文件中添加 CFBundleDisplayName 字符串。

  • InfoPlist.strings (English) 文件中添加以下代码:
CFBundleDisplayName = "International Demo";
  • InfoPlist.strings (Chinese(Simplified)) 文件中添加以下代码:
CFBundleDisplayName = "国际化演示";
  • InfoPlist.strings (Japanese) 文件中添加以下代码:
CFBundleDisplayName = "国際デモ";

还差一步,需要在工程的 Info 配置中添加 Bundle display name 项:

  1. 打开 Info.plist 文件

  2. Bundle name 下添加 Bundle display name ,值设置为 $(PRODUCT_NAME)

如果要检验效果的话,更改系统语言设置后需要重启才能看到 Dock 栏和 Finder 中 App 名称的本地化适应。

至此 App 名称的本地化就实现了!

本例程可从这里下载:InternationalDemo