translate.py
#!/usr/bin/python # -*- coding: UTF-8 -*- import xlrd import xlwt from xlutils.copy import copy import os import re from datetime import datetime #from __future__ import division import sys,time import glob ''' 每次修改翻译之前,需要把对应UI下的翻译记录表替换进来 脚本使用: 4. 修改 翻译记录表.xls 中的ID,要和需要翻译的表格的ID一样,翻译记录表记录了翻译过的字符串 (0为未翻译或翻译未确定,1为翻译已确认。每个对应的UI下有对应的翻译记录表)。 5. "日志"文本中记录了每次修改后的字符串ID。 6. 准备工作做完后执行脚本:python str.py等待完成。 8. 然后找到IDS_String_XX手动翻译这个字串下面的所有未翻译的字串。完成后复制到Languages中导入。 脚本功能: 通过英文对比,进行翻译的引入,每次引入之前会判断翻译记录表,该语言是否全部被确认 如果标准翻译和需要翻译的英文相同而且标准翻译已经做了翻译,就使用该翻译 并且将每次翻译过的字符串对应语言进行记录。 注意: 1. 所有表格格式使用 XXX.xls(XXX.xlsx格式会出问题)。 2. 复制字串:数字、时间、比例可能会有问题,需要检查。 ''' g_SimpleLag = 0 g_MultiLag = 0 def Translation(language): binPath1=glob.glob(r"./待翻译表/*.xls") binPath2=glob.glob(r"./翻译对照表/*.xls") if len(binPath1) == 0: print "\nerror:请将待翻译的表放进待翻译表的目录下!\n" sys.exit() if len(binPath2) == 0: print "\nerror:请将翻译对照表放进翻译对照表的目录下!\n" sys.exit() data_e = xlrd.open_workbook(binPath1[0],formatting_info=True) #打开待翻译表的第一个sheet data_1 = xlrd.open_workbook(binPath2[0]) #打开翻译对照表的第一个sheet data_jl= xlrd.open_workbook("./翻译记录表.xls") #记录表 table_e = data_e.sheet_by_index(0) table_1 = data_1.sheet_by_index(0) table_jl = data_jl.sheet_by_index(0) nrows = table_e.nrows #表 待翻译表.xls 行数 ncols = table_e.ncols #表 待翻译表.xls 列数 nnrows = table_1.nrows #表 翻译对照表.xls 行数 nncols = table_1.ncols #表 翻译对照表.xls 列数 nrows_jl = table_jl.nrows #表 翻译记录表.xls 行数 ncols_jl = table_jl.ncols #表 翻译记录表.xls 列数 print '待翻译的表有%d 行,%d 列'%(nrows,ncols) print '翻译对照表有%d 行,%d 列'%(nnrows,nncols) print '记录表有%d 行,%d 列'%(nrows_jl,ncols_jl) #查找要翻译的语言和English在对照表和待翻译表中的列的位置 A1 = 0 A2 = 0 B1 = 0 B2 = 0 for i1 in range(0,ncols): if table_e.cell(0,i1).value == language: A1 = i1 if table_e.cell(0,i1).value == "English": B1 = i1 for i2 in range(0,nncols): if table_1.cell(0,i2).value == language: A2 = i2 if table_1.cell(0,i2).value == "English": B2 = i2 #以下判断是为了保证需要翻译的语言和English在两个excel表中存在 if table_e.cell(0,A1).value != language: print "\n待翻译的表中没有%s语言,请检查待翻译表!\n" %language sys.exit() if table_e.cell(0,B1).value != "English": print "\n待翻译的表中没有English语言,无法对照翻译,请检查待翻译表!\n" sys.exit() if table_1.cell(0,A2).value != language: print "\n翻译对照表中没有%s语言,请检查翻译对照表!\n" %language sys.exit() if table_1.cell(0,B2).value != "English": print "\n翻译对照表中没有English语言,无法对照翻译,请检查翻译对照表!\n" sys.exit() print "\n%s即将被翻译......\n" %language print "\n%s在待翻译表中的第%d列,English在第%d列" %(language,A1+1,B1+1) print "%s在对照表中的第%d列,English在第%d列\n" %(language,A2+1,B2+1) wb =copy(data_e) ws = wb.get_sheet(0) #翻译库 wb_jl = copy(data_jl) ws_jl = wb_jl.get_sheet(0) #记录表 f=open('日志.txt', 'a') #str_L = table.cell(0,1).value datetime.now().strftime('%Y-%m-%d %H:%M:%S') datetime.now().isoformat() print>>f,str("\r\n") print>>f,str(table_e.cell(0,A1).value) print>>f,str("\r\n") print>>f,str("已经翻译的字符串")+("(")+str(datetime.now())+(") : ")+("\r\n") ps = 0 ps1 = 0 ps2 = 0 number = 0 num1_t = 0 #add_sum = 0 flg = 0 count = 0 count1 = 0 n = 10 m=2 #每次开始查找翻译前先检查一遍翻译是否有空白 for j in range(1,nnrows,1): for i in range(1,nrows,1): string_E = table_e.cell(i,A1).value string_E_t = table_e.cell(i,B1).value if string_E_t == '': ws.write(i,A1,string_E) stylei= xlwt.XFStyle() #初始化样式 patterni= xlwt.Pattern() #为样式创建图案 patterni.pattern=2 #设置底纹的图案索引,1为实心,2为50%灰色,对应为excel文件单元格格式中填充中的图案样式 patterni.pattern_fore_colour=17 #设置底纹的前景色,对应为excel文件单元格格式中填充中的背景色 patterni.pattern_back_colour=17 #设置底纹的背景色,对应为excel文件单元格格式中填充中的图案颜色 stylei.pattern=patterni #为样式设置图案 ws.write(i,A1,string_E,stylei) #使用样式 #每次开始查找翻译前先确认该语言是否全部确认 for num_t in range(1,ncols_jl,1): if table_e.cell(0,A1).value == table_jl.cell(0,num_t).value: #对应记录表找到相对应的字符串 for num1_t in range(1,nrows_jl,1): if int(table_jl.cell(num1_t,num_t).value) == 0: flg = 9 break if flg == 9: print '开始翻译:' elif flg == 0: print '该语言翻译已经全部确认' exit(0) print '---1---2---3---4---5---6---7---8---9---完成(%)' for j in range(1,nnrows,1): for i in range(1,nrows,1): string_E = table_e.cell(i,B1).value string_ID = table_e.cell(i,0).value string_E_t = table_e.cell(i,A1).value string_1 = table_1.cell(j,B2).value string_1_t = table_1.cell(j,A2).value #翻译过程显示进度 count1 = count1 + 1 if count1 == (nnrows*nrows)/43: sys.stdout.write('█'+'->'+"\b\b") sys.stdout.flush() count1 = 0 if 1:#string_E.strip() !="" and string_1.strip() !="": if string_E == string_1: #英文相同 #if string_E_t == string_E: #需要翻译的没翻译 if string_1 != string_1_t: #翻译库已翻译 #str_E = table_e.cell(i,1).value str_1 = table_1.cell(j,A2).value #拿到的标准翻译 print>>f,str(table_e.cell(i,0).value)+str(" ") number = number + 1 if number == 5: print>>f,str('\r\n') number = 0 ps = ps + 1 ws.write(i,A1,str_1) #翻译替换 #设置表格颜色 stylei= xlwt.XFStyle() #初始化样式 patterni= xlwt.Pattern() #为样式创建图案 patterni.pattern=2 #设置底纹的图案索引,1为实心,2为50%灰色,对应为excel文件单元格格式中填充中的图案样式 patterni.pattern_fore_colour=15 #设置底纹的前景色,对应为excel文件单元格格式中填充中的背景色 patterni.pattern_back_colour=15 #设置底纹的背景色,对应为excel文件单元格格式中填充中的图案颜色 stylei.pattern=patterni #为样式设置图案 ws.write(i,A1,str_1,stylei) #使用样式 #ws.write(i,3,"success") #记录翻译成功的字符串 #if string_E_t != string_E: #ws.write(i,3,"Modify the success") for num in range(1,ncols_jl,1): str1 = table_e.cell(0,A1).value str2 = table_jl.cell(0,num).value if str1 == str2: #对应记录表找到相对应的字符串 for num1 in range(nrows_jl): if table_jl.cell(num1,0).value == string_ID: #将翻译的字符串用 "1" 标注, "0"表示未翻译 ws_jl.write(num1,num,'1') wb.save(binPath1[0]) elif string_1 == string_1_t: #ws.write(i,3,"Untranslated") ps2 = ps2 + 1 print>>f,str('\r\n') print>>f,str('\r\n') print>>f,str('\r\n') print>>f,str('\r\n') wb_jl.save('翻译记录表.xls') wb.save(binPath1[0]) print '\n' print '======================================================================' print str(table_e.cell(0,A1).value) + '总计翻译字符串个数:%d '%ps print ' '+ '翻译库未翻译字符串个数:%d '%ps2 def fun_parse_InputParam(): global g_SimpleLag global g_MultiLag global LanguageSet if len(sys.argv) == 2: LanguageSet = ["Tchinese","Schinese","Arabic","Spanish","French","German","Italian","Portuguese","Polish","Russian","Danish","Finnish","Swedish","Turkish","Greek","Norwegian","Hungarian","Slovakian","Croatian","Serbian","Czech","Dutch","Persian","English","Bulgarian","Macedonian","Romanian","Lithuanian","Catalan","Ukrainian","Thai","Vietnamese","HINDI","MARATHI","TAMIL","TELGU","PUNJABI","GUJRATI","Hebrew","Korean","Malayan","Indonesian","Bangla"] if sys.argv[1] == "all": g_MultiLag = 1 elif sys.argv[1] in LanguageSet: g_SimpleLag = 1 else: print("parameter: Please check the parameter!") sys.exit() else: print "The number of parameters is wrong!" sys.exit() if __name__ == "__main__": #处理脚本带入的参数 fun_parse_InputParam() if g_SimpleLag == 1: Translation(sys.argv[1]) elif g_MultiLag == 1: for Lag in LanguageSet: Translation(Lag) print "\n%s语言已经翻译完毕\n" else: print "参数处理错误!" sys.exit()