话说上回写了一篇《抽取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()