国际化的介绍
说到国际化,大家必定联想到本地化,个人的理解,两者是相辅相成的,本地化是你的APP转化为多种语言的过程,而在本地化之前你的APP必须支持国际化。那么国际化便是使你的APP具有适应不同地域的能力。那么为什么要设置国际化呢?顾名思义根据不同的地域选择不同的语言,使得不同语言不同国家的用户看懂我们的APP所想要传递的信息。
下面进入正题,完成国际化的设置
设置产品所需要的国际化的语言
仅需配置一次,若后来想要加另一种直接点击加号即可
※ project--->info---> Localizations,点击“+”号,添加产品所需的语言

※ 比如选择繁体中文,然后弹出这个框,直接点击finish即可

※ 同理,我添加了简体中文,繁体中文,法语,作为例子,最终呈现这种效果:

(一)应用名称的国际化
应用名称国际化就是指:在不同的语言设置下,显示相应的语言,比如系统中的设置,在简体中文下是“设置”,如果设置成英文语言,那么显示为“setting”。
※ 选中info.plist--->快捷键(control+N)--->弹出框中选择String File--->点击next--->Save As名称写成InfoPlist(注:名字一定不能错,否则无效)--->create


※ 选中上一步创建好的InfoPlist.strings文件(在info.plist文件下面),点击Xcode右上角按钮 展示右栏,点击Localization按钮,如图:

※ 在上步的弹出框里 选择自己要本地化的语言,点击Localize.如图:

※ 同样选中InfoPlist.strings文件,展示右栏,选中自己所要本地化的语言,打上对勾

※ 这时你会发现InfoPlist.strings变成了一个目录,点开三角号,如图:

※ 我们以英文为例,点开English的strings,我们需要按照CFBundleDisplayName = “ ”这种方式写入这个语言所要展示字段,那么比如在英文语言里,名字为“hello,world” 如图:

※ 同理,在简体中文,繁体中文,法语中的设置



※ 到此,产品名称的国际化算是完成了,大家可以通过改变设备的语言,显示效果




产品内容 字符串的国际化
顾名思义,如果APP里有个按钮title为完后,那么在简体中文里应该是“完成”,在英文设置则是“finish”
※ 首先和APP名称准备是一样的(注添加语言不用),创建strings文件,不同的是名字必须是Localizable,如图:

※ 同样要选中新创建好的Localizable.string文件,点击Localize,选择要国际化的语言,然后打上对勾,结果如图:

※ 打开Localizable目录,设置不同语言的字段表示,在代码中运用,这里我以button的title为例,如图




※ 代码中表示:
[button setTitle:NSLocalizedString(@"buttonTitle", nil) forState:UIControlStateNormal];
※ 运行结果如下:




图片的国际化
有两种方式:
1.与国际化字符串的方法一样,通过NSLocalizedString来实现
2.与第一种方式不同,将图片加到工程里--->选中图片--->点击右侧的 Localize,选择语言。--->同样图片变成目录--->同样方式设置每个语言下的字段,此步骤与国际化字符串相同,同上。
应用内部修改语言链接推荐
http://blog.csdn.net/shaobo8910/article/details/48396325
网友评论
2.2 老项目,有几万条代码需要批量操作
参考链接 https://www.jianshu.com/p/7cb0fad6d06f
首先,我们需要一个正则,去匹配工程中所有需要替换的文本。如果你不太了解正则,点我点我!!。
下面这个正则可以匹配到所有符合OC字符串格式的包含有中文的字符串。如果你用Swift,请去掉@。
中文正则 此处正则表达式两边加括号的目的是为了能够在替换时用$1获取原有字符串的值
(@"[^"]*[\u4E00-\u9FA5]+[^"\n]*?")
中英文正则 此处正则表达式两边加括号的目的是为了能够在替换时用$1获取原有字符串的值
(@"[^"]*[\u4E00-\u9FA5_a-zA-Z]+[^"\n]*?")
然后,重点来了。Command+Shift+F,进入全局搜索引擎,切换为Replace模式,并把匹配模式改为Regular Expression。
在搜索条件里输入(@"[^"]*[\u4E00-\u9FA5]+[^"\n]*?"),在下面替换内容里输入NSLocalizedString($1, nil)。此处正则表达式两边加括号的目的是为了能够在替换时用$1获取原有字符串的值,在替换时把原有值放入宏定义内key的位置。然后,搜索,可以看到搜索结果,点击Replace All,即可完成替换。
生成多语言文件
替换完了原有字符串,下面就是生成多语言文件了。作为一个文艺程序猿,我是不可能一处一处的把项目中的字符串挑出来再写到Localizable.strings文件里的。
好在Xcode自带了一个命令行工具genstrings。我们可以利用这个工具生成所需的多语言文件。
首先,我们需要先新建所需语言的文件夹。打开终端
cd 工程目录
mkdir en.lproj
mkdir zh-Hans.lproj
然后,遍历所有.m文件,根据每个文件内的需要国际化的字符串生成key和value。
find . -name *.m | xargs genstrings -o en.lproj
find . -name *.m | xargs genstrings -o zh-Hans.lproj
(基本都说genstrings -o en.lproj *.m就能够生成Localizable.strings。可是这个命令仅仅能生成当前文件夹的。并没有遍历子文件夹。所以基本没用)
这样系统就会把子文件夹用到NSLocalizedString函数的key值都写到文件中。
须要注意的是,NSLocalizedString(key,comment)。用这个函数时,key不能是宏定义或者一些动态字符串,否则用上面的命令会报错。
今天又一次回来做国际化,发现上面的命令是仅仅能遍历.m文件的。但实际发现常常有字符串放在了.h文件。所以应该用例如以下命令去遍历整个.h和.m文件,特它的目的是加:
find . \( -name '*.m' -o -name '*.h' \) -print0 | xargs -0 genstrings -o en.lproj
链接参考 https://www.cnblogs.com/hrhguanli/p/4600921.html