第一推荐一篇金先生的博客,受益非浅,在这里真诚的感谢正则表达式
https://www.jianshu.com/p/7cb0fad6d06f金小白工具
首先金小白先生把两种方式都作了介绍,第一种我就不在过多详细的讲解,主要针对已有项目所出现的问题给介绍一下搜索引擎
总结两点就是:spa
1. 在代码里用NSLocalizedString获取要本地化的字符串
2. 用genstrings扫描代码文件,生成Localizable.strings,而后加到工程中。 .net
那么如何具体操做呢,这里讲解一下。命令行
一,在代码里用NSLocalizedString获取要本地化的字符串翻译
正则搜索项目中全部的中文(首先,咱们须要一个正则,去匹配工程中全部须要替换的文本。若是你不太了解正则,点我点我!!。)
code
下面这个正则能够匹配到全部符合OC字符串格式的包含有中文的字符串。若是你用Swift,请去掉@。
htm
@"[^"]*[\u4E00-\u9FA5]+[^"\n]*?"
而后,重点来了。Command+Shift+F,进入全局搜索引擎,切换为Replace模式,并把匹配模式改成Regular Expression。blog
在搜索条件里输入(@"[^"]*[\u4E00-\u9FA5]+[^"\n]*?")
,在下面替换内容里输入NSLocalizedString($0, nil)
。此处正则表达式两边加括号的目的是为了可以在替换时用$1
获取原有字符串的值,在替换时把原有值放入宏定义内key的位置。而后,搜索,能够看到搜索结果,点击Replace All
,便可完成替换。
箭头位置都是可选的,最后一个箭头,是选择工程,能够除去pod里的文件。 能够先替换一个试试效果
二. 用genstrings扫描代码文件,生成Localizable.strings,而后加到工程中。
替换完了原有字符串,下面就是生成多语言文件了。做为一个文艺程序猿,我是不可能一处一处的把项目中的字符串挑出来再写到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
此时,en.lproj
和zh-Hans.lproj
文件夹中就应该有了相应的Localizable.string文件了。
咱们把这两个文件夹拖到工程里,而后在相应的Localizable.strings文件中,修改每一个key所对应的value值就好了(这个应该是翻译干的事儿)。
至此,项目的国际化已经适配完成。
⚠️ 这里重点说一下,有的童鞋老是出现这样那样的错误,不是不能写入就是文件不支持,这里你要把你的 lib/Tool/Supporting Files的文件夹先移出来放在根目录下, 把 en.lproj
和zh-Hans.lproj
文件夹放在你的Controller模块,解析你Controller中的.m文件,而后再把en.lproj
和zh-Hans.lproj
文件夹 拖到项目中。ok~~