话说上回写了一篇《抽取MTK的待翻译字符串》,今天又写一篇将翻译的字符串导入到ref_list.txt里。
编码思想:不要将事情复杂化,让程序处理太复杂的文本是不合适的,得写很多代码。如果将要处理的文本事先编辑成自己想要的格式,那就简单多了。已经翻译好的字符串就保留原样,原有的字串是精简的,应该不会有显示问题。
用法: 用Excel手工将ref_list.txt只保留STRING_ID和待翻译的语言(如阿语)两列,另存为dest.txt。然后运行下面的程序,可能也就一两秒钟就处理完上万行的两个文本文件了,生产整合好的output.txt和没有处理翻译untrans.txt,没有翻译处理的untrans.txt可以结合MTK编译生成的实际用到的string_resource_usage.txt再去找客户翻译。
代码比较简单,自己看。其中,正则表达式和代码仅供参考,要视自己要处理的文件格式而定。
#! /usr/bin/env python
#coding=utf-8
import codecs
import os,re
srcstr = '(.*?)\t.*?\t(.*?)\n'
srcobj = re.compile(srcstr,re.DOTALL)
def filltext():
tranDict = {}
content = []
untran = []
try:
fp = codecs.open('src.txt','r')
srcText = fp.read()
objs = srcobj.findall(srcText)
print len(objs)
print '========'
for loop,obj in enumerate(objs):
tranDict[obj[0]] = obj[1]
fp.close()
except:
print 'file not exist or still open!'
try:
fp = codecs.open('dest.txt','r','utf-16')
destText = fp.readlines()
print len(destText)
for loop,line in enumerate(destText):
mylist = line.split('\t')
if len(mylist[1]) > 0:
content.append(line)
else:
try:
content.append('%s\t%s\n',mylist[0],tranDict[mylist[0]])
except:
untran.append(line)
content.append(line)
result = ''.join(content)
failtxt = ''.join(untran)
try:
foutput = codecs.open('output.txt','w','utf-16')
foutput.write(result)
foutput.close()
foutput = codecs.open('untran.txt','w','utf-16')
foutput.write(failtxt)
foutput.close()
except:
print 'output file is still open.'
except:
print 'dest file is still open.'
print 'The End.'
def main():
filltext()
if __name__ == "__main__":
main()
...