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.lprojzh-Hans.lproj文件夹中就应该有了相应的Localizable.string文件了。

 

我们把这两个文件夹拖到工程里,然后在相应的Localizable.strings文件中,修改每个key所对应的value值就行了(这个应该是翻译干的事儿)。

至此,项目的国际化已经适配完成。

⚠️ 这里重点说一下,有的童鞋总是出现这样那样的错误,不是不能写入就是文件不支持,这里你要把你的 lib/Tool/Supporting Files的文件夹先移出来放在根目录下, 把 en.lprojzh-Hans.lproj文件夹放在你的Controller模块,解析你Controller中的.m文件,然后再把en.lprojzh-Hans.lproj文件夹 拖到项目中。ok~~

 

 

posted @ 2019-10-12 16:08  红凉梦  阅读(413)  评论(0编辑  收藏  举报