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()  
    
    
    
    
    

  

posted @ 2018-06-29 15:23  轻轻的吻  阅读(461)  评论(2编辑  收藏  举报