iOS 国际化(多语系)

如果项目中需要根据不同的地区显示不同的语言,那么就需要app能够支持多种语系,也叫国际化处理。
首先在项目的Supporting Files 中 右键 new file

iOS 国际化(多语系)_第1张图片
创建Localizable文件.png

当地的语言是默认支持的,额外需要支持的语言可以自己配置,但是一般都是需要支持英语

iOS 国际化(多语系)_第2张图片
选择需要支持的语言.png

如果除了英语之外还需要支持其他的语言,那么就需要到info当中做配置了

iOS 国际化(多语系)_第3张图片
info中选择其他的语言.png
iOS 国际化(多语系)_第4张图片
选择一种语言.png

之后就是选择需要支持多语系的文件了

iOS 国际化(多语系)_第5张图片
选择需要支持多语系的文件.png

成功之后项目的Supporting File 多一个这样的文件

iOS 国际化(多语系)_第6张图片
三种语言文件.png

重复上面的步骤创建一个中文的文件
"test" = "测试" ;
"test" = "test" ;
左边是key 右边是对应语言的文字.

iOS 国际化(多语系)_第7张图片
使用NSLocalizedString来设置多语系.png

当项目非常庞大的时候一般会遇到下面两个问题
一个是key值可能会重复
一个是多个控件可能具有相同的名称

iOS 国际化(多语系)_第8张图片
屏幕快照 2017-02-25 17.00.19.png

解决这个问题目前看到有两套做法:
第一种是 key的命名方式可以采用 控制器名+控件名+意义 这样的方式
这样的话看到即使是在 sring文件中阅读代码,也能够知道这个key在哪里使用到。
如果多个控件公用一个的话,那么可以在key的命名后面+reuse来表示这个key是被重用的。(如果以后其中某个控件修改了名字,不要忘记新建一对key value),这套做法的问题在于,如果多个控制器都使用了相同名称的控件,如果要修改,那么就要逐个的分别修改这些,无法一次性修改。而且如果多个界面元素的名称很多重复,每一个都要写一个key,会造成很多次的重复。

第二种是key值使用中文命名(或者自己的母语),这样在赋值使用NSLocalizedString时就能够知晓空间的名称。如果有复用的情况存在也很方便直观的知道,而不是由于上面那套复杂做法造成复用性差的问题。但是也带来一个问题,如果希望只修改其中一部分控件的名字,就需要新建key值了。上面那一套就只需要更新对应界面的value值就可以了。

但是综合改动量来看,第二套做法更好。

参考资料
http://blog.csdn.net/lwjok2007/article/details/46547085

你可能感兴趣的:(iOS 国际化(多语系))