iOS 国际本地化(对新项目集成和已有项目集成)
第一推荐一篇金先生的博客,受益非浅,在这里真诚的感谢
https://www.jianshu.com/p/7cb0fad6d06f金小白
首先金小白先生把两种方式都做了介绍,第一种我就不在过多详细的讲解,主要针对已有项目所出现的问题给介绍一下
总结两点就是:
1. 在代码里用NSLocalizedString获取要本地化的字符串
2. 用genstrings扫描代码文件,生成Localizable.strings,然后加到工程中。
那么如何具体操作呢,这里讲解一下。
一,在代码里用NSLocalizedString获取要本地化的字符串
正则搜索项目中所有的中文(首先,我们需要一个正则,去匹配工程中所有需要替换的文本。如果你不太了解正则,点我点我!!。)
下面这个正则可以匹配到所有符合OC字符串格式的包含有中文的字符串。如果你用Swift,请去掉@。
@"[^"]*[\u4E00-\u9FA5]+[^"\n]*?"
然后,重点来了。Command+Shift+F,进入全局搜索引擎,切换为Replace模式,并把匹配模式改为Regular Expression。
在搜索条件里输入(@"[^"]*[\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~~