一、本地化
相信作为一个iOS开发者,大家都听说过app的国际化和本地化,首先来说明下什么是国际化,因为一开始我自己也没有分清楚这两个概念。
简单的说,国际化就是一个应用程序国际兼容性的设计过程,可以理解你的app可以在其他国家使用。比方有:
1.以用户的母语进行文本的输入和输出
2.处理不同的日期,时间和数据格式
3.利用适当的历法来处理数据
而本地化仅仅是应用的用户界面和资源翻译成为不同的语言,这个工作你可以自己完成,也可以交给被人完成。
二、本地化过程
在一般的编码过程中,我们的文本显示一般都是硬编码,但是在本地化的过程中,我们需要将这些文本单独的抽离出来,将他们放到一个单独的文件中。Xcode中使用带有".strings"扩展名的文件来存储和检索app中使用的字符串,以此来支持不同的语言。根据你ios设备的系统设置的语言,就可以通过一个简单的方法查找相应的字段返回本地化的字段。
你建立的本地文件里面的格式就是上图所展示的。你只要在编写的过程中遵循这样的格式就可以了。
注意:Localizable.strings是ios默认的文件名称,请不要随便的改变这个文件的名字。
然后在项目中,需要显示的代码换为
三、添加英语本地化
想要添加另外一种语音,首先点击你项目文件夹,在工程的右侧选中(project)不是target,你可以看见一个Localitions分区。点击下面的加号可以添加新的语言,我们添加中文。
这个时候,xcode已经为你做好了目录设置。使用finder你可以查看这个写目录
可以看到zh-Hans.lproj这个文件夹就是你用来本地化中文的。(注意xcode中应先建立Localizable.strings这个文件)
然后你点击这个文件在右侧你可以看到一个Location点击这个按钮可以添加要本地化的语言。
当然你想更改本地化的语言可以在上图的右侧进行更改。如果想要添加新的语言只要在project中点击locations选中你要添加的语言
然后会弹出来一个提示框,提示你想要本地化的文件,选择你想要本地话的文件即可
下面就是你在你的strings后缀的文件根据格式进行修改。选中中文的Localizable.strings(chinese(simplified))在里面修改将你需要用到的硬编码的地方的字段改为:
"OkButton" = "确定";
在你的代码中将使用
label.text = NSLocalizedString(@"OkButton", @"确认键");
四、在进行本地化的时候,你还可以使用ios sdk自带的一个工具genstrings进行处理,这个非常适合大型项目,好处是你可以在编码的时候不用管本地化的键值对,在编码完成之后你可以使用这个工具生成相应的键值对。
在我们项目一开始你就可以使用
btn.titleLable.text = NSLocalizedString(@"btn_title", nil);
这样的格式,
一开始我们还没有生成Localizable.strings文件。这是一个逆向的过程,也就是先写好调用过程,再生成strings资源文件。
当我们把所有的.m文件都修发好了,就该genstrings工具出场了。
1. 启动终端,进入工程所在目录。
2. 新建两个目录,推荐放在资源目录下。
目录名会作用到Localizable.strings文件对应的语言,不能写错了。这里zh-Hans指简体中文,注意不能用zh.lproj表示。
mkdir zh-Hans.lproj mkdir en.lproj
3. 生成Localizable.strings文件
genstrings -o zh-Hans.lproj *.m
genstrings -o en.lproj *.m
-o <文件夹>,指定生成的Localizable.strings文件放置的目录。
*.m,扫描所有的.m文件。这里支持的文件还包括.h, .java等。
4. 右键点击工程的Resources目录,选择“New Group”,添加两个目录zh-Hans.lproj和en.lproj。
5. 在新建的group中添加刚刚生成的Localizable.strings文件。
6. 最后在Localizable.strings文件中,修改每个key所对应的内容,就大功告成了。
说了一大堆,其实操作起来还是很简单的,总的来讲就是两条: