【iOS】给已有工程添加多语言的快速方法

2017-05-18  本文已影响62人  秋名山代驾

对于已存在的单语言老工程,里面还是直接的:

label.text = @"你好";

这种需要做多语言升级的话,可以按照下面的步骤来快速操作:

1.提取出工程里面用的老字段

Paste_Image.png

使用下面的正则表达式搜索(Swift中去掉@):

  @("[^\")]*?[\u4E00-\u9FA5]+[^\")]*?)"

然后把所有搜索结果全部复制到language.txt文本,等会用python脚本来过滤处理。



然后再把刚才搜索的结果全部替换成

NSLocalizedString($1, nil)

正则表达式两边加括号的目的是为了能够在替换时用$1获取原有字符串的值,在替换时把原有值放入宏定义内key的位置,整个项目中的字符串就被替换成

NSLocalizedString(key, comment)

形式

2. python处理结果

import re
import sys
reload(sys)  
sys.setdefaultencoding('utf8')  
#(@"[\u4E00-\u9FA5]+")]
reg = re.compile(':\d+:')
file = open("language.txt", "r")
x = 0;
list = [];
for line in file: 
    # ret = re.findall(r":\d+:", line) 
    ret = re.findall(u'"[^\")]*?[\u4E00-\u9FA5]+[^\")]*?"', line.decode('utf8'))
    for word in ret:
        if word not in list:
            list.append(word)
file.close()
print len(list)
file = open('zh-hant.txt', 'r')
hants = file.readlines()
for i in xrange(0,len(list)):
    key = list[i]
    value = hants[i].strip()
    #print ("%s = %s;") % (key, value) #处理成资源文件
    print key #处理成待翻译格式
file.close()

先注释

#print ("%s = %s;") % (key, value)

,处理成如下格式:

Paste_Image.png

然后把处理结果翻译成需要翻译的他国语言,比如繁体:

Paste_Image.png
然后把翻译后的结果保存为zh-hant.txt,再注释刚才的python代码中的
print key

这行,然后最后就输出XCode可以直接使用的资源文件格式:

Paste_Image.png

正则表达式也许并不一定适合你工程中的文字情况,需要酌情修改,python脚本也是匆忙完成,仅实现基本功能,也需要按需调整。:)
感谢:
http://www.jianshu.com/p/f79bb2212b64

上一篇下一篇

猜你喜欢

热点阅读