** 有些时候项目已经竣工或者已经迭代好几个版本了,如果这个时候要实现本地化,那该如何处理呢。**
筛选项目中的中文字符串
既然要替换项目中的中文字符串,那么就需要我们找到这些中文字符串,然后再将字符串替换成我们定义的宏。说起匹配查找首先想到的是正则表达式,我们可以在Xcode中,输入 (@"[^"]*[\u4E00-\u9FA5]+[^"\n]*?")\s*
即可,切记find 后面的选项要选择 Regular Expression
, 默认选中的是Text
, 如图
如何取出识别到的中文字符串?
我们已经知道如何识别项目中的字符串了,但是如何取出来使用呢? 这就需要遍历项目中所有的指定后缀(e.g: .h、.m等)的文件,然后利用正则表达匹配所有使用到的中文字符串,并写入文件中。为了方便起见,我将啊神在Github中开源的一个Mac客户端小应用贴在后面,该工具可直接将选中的项目中所有的中文字符串,导出到指定的路径下;该应用还可以选择对于重复出现的中文字符串进行处理,以及还可以将中文字符串导出为繁体; 小应用更值得关注的是它导出的文件,可以直接拿来当做多语言文件中的key=value
使用,非常简单,喜欢的可以去下载看看小应用运行图如下:
如何使用取出的中文字符串?
已经拿到取出的中文字符串文件,这个文件是可以直接拿来用做多语言文件使用的,工具只能转换成中文或繁体,如需添加其它语言,就需另行翻译了:
如需设置其它语言,如德语,这个时候可以将导出的文件拷贝一份,修改图中 =
后面的 value
切记其它格式别乱改,以防key
与value
对不上号。 一切沟通妥当后,等翻译把文件给你后,直接将文件中的内容,复制到多语言文件的德语文件中即可;
如何将项目中的中文字符串进行替换
多语言文件已经配置完成,到了这里,那么问题来了,我们只是取出项目中使用的中文字符串,然后将字符串封装成多语言文件,但是
并没有完成替换(记得备份一下),这里我们需要用到Xcode 自带的字符串替换功能,首先还需要使用正则表达式 (@"[^"]*[\u4E00-\u9FA5]+[^"\n]*?")\s*
,匹配出项目中使用的中文字符串,然后在对其进行替换处理。
#define PALocalizedString(key) [[PALocalizable bundle] localizedStringForKey:key value:nil table:nil]
以上是宏的定义,我们需要将字符串进行替换成宏的使用,如:
替换前是这样的_lbl.text = @"多语言";
替换后_lbl.text = PALocalizedString(@"多语言")
替换规则如图:
这次选中的是Replace
, 不是Find
。按图中所示,选择完毕后,点击ReplaceAll
, 会出来一个弹框,不用管它直接继续,即可,然后你在看项目中使用到的中文字符串是否已经替换掉了,到这里基本上大功告成了;
注意事项
1、替换后,可能会有些地方报错,command + b
编译下,看看报错的地方,进行相应修改即可。报错原因:a. 可能是你定义的常量字符串; b. 可能是定义的宏; c. 可能是替换后没有换行; 基本上报的错误很明显,进行修改即可;
内容源自:啊神的技术博客