苹果官方的iOS App国际化工作流

国际化是出海应用非常重要的一个基础步骤,其中多语言的适配是重中之重。Xcode自带了帮助开发者进行App本地化的功能,其中包括多语言文件的导入和导出,使用这些功能可以很丝滑的完成多语言的工作。

iOS国际化

到公众号【iOS开发栈】学习更多SwiftUI、iOS开发相关内容。

App中有一些固定内容的控件是可以直接利用IB文件来做多语言的,具体方法可以查看一下之前的这篇文章,文章中也讲了怎么添加多语言的操作。

除了一些固定内容的控件之外还会有一些其他内容需要开发者通过代码的形式来本地化,比如可变内容的控件、错误提示信息、富文本、App名称等。通过下面几个步骤可以给这些内容添加多语言。

标记需要本地化的文本

Foundation框架中使用NSLocalizedString(_:tableName:bundle:value:comment:)来标记需要本地化的文本,通常tableName/bundle和value直接使用默认值就可以了。

1
2
3
4
5
6
NSLocalizedString("Label1", comment: "This is the first label")

// 上面的代码最终的样子

/* This is the first label */
"Label1" = "First Label 111";

翻译文件是key-value的格式,其中key是NSLocalizedString函数中的第一个参数,在这里就是Label1。默认的value也是Label1

comment参数是这对key-value的注释,主要是在进行人工翻译的时候提供一个说明作用,尤其是当有多个相似的文本时这个注释就有作用了。

使用Xcode导出本地化多语言文件

当还没有进行翻译的时候,使用NSLocalizedString的地方就会显示key文本,Xcode会在导出多语言文件的时候在项目中搜寻这个函数。

导出多语言文件的步骤如下:

  1. 使用Xcode打开项目
  2. 在左侧的目录导航栏中点击项目名打开.xcodeproj
  3. 在PROJECT中选择项目名,并在Info选项卡的Locations中添加上其他语言
  4. 点击Xcode菜单栏中Editor选项的Export for Localization
  5. 选择导出的文件夹并命名后点击导出

修改本地化多语言文件

导出的文件中包含多个.xcloc子文件夹,每一个xloc文件夹中的Localized Contents下的.xliff文件就是要填写翻译内容的文件。

打开xliff文件并在其中搜索“”,搜索到的文本就是需要翻译的内容。每个对应一个,把译文放到中间。就像这样:

1
2
<source>First Label 111</source>
<target>第一个文本</target>

source是Development Language的语言文本,target是译文。上面这个例子的Development Language是英文,target是中文。

source不是NSLocalizedString第一个参数指定的key,而是Development Language下key对应的value,所以如果开发语言的译文变了,这里的source也会变。

使用Xcode导入本地化多语言文件

把所有需要翻译的内容翻译完成后,使用Xcode打开项目,并打开.xcodeproj后选择Editor->Import Localizations,打开翻译文件所在的目录把.xcloc挨个导入就可以了。

这里建议先翻译并导入Development Language的.xcloc文件夹,再执行一次导出操作后再翻译其他语言并导入。因为第一次导出时source是NSLocalizedString的第一个参数,而这个参数可能并不是主语言的最终翻译,如果其他语言都把第一个参数作为source来翻译就会造成找不到对应翻译的问题。

到公众号【iOS开发栈】学习更多SwiftUI、iOS开发相关内容。

总结

iOS和MacOS系统以及它们自带的App在本地化方面做的非常出色,所以我们在没有特殊要求的情况下尽量依赖Xcode提供的功能来实现本地化的需求。