zoukankan      html  css  js  c++  java
  • 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 "
    error:请将待翻译的表放进待翻译表的目录下!
    "
            sys.exit()
        if len(binPath2) == 0:
            print "
    error:请将翻译对照表放进翻译对照表的目录下!
    "
            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 "
    待翻译的表中没有%s语言,请检查待翻译表!
    " %language
            sys.exit()
        if table_e.cell(0,B1).value != "English":
            print "
    待翻译的表中没有English语言,无法对照翻译,请检查待翻译表!
    " 
            sys.exit()
                
        if table_1.cell(0,A2).value != language:
            print "
    翻译对照表中没有%s语言,请检查翻译对照表!
    " %language
            sys.exit()
        if table_1.cell(0,B2).value != "English":
            print "
    翻译对照表中没有English语言,无法对照翻译,请检查翻译对照表!
    " 
            sys.exit()
        print "
    %s即将被翻译......
    " %language    
        print "
    %s在待翻译表中的第%d列,English在第%d列"  %(language,A1+1,B1+1)
        print "%s在对照表中的第%d列,English在第%d列
    "  %(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("
    ")
        print>>f,str(table_e.cell(0,A1).value)
        print>>f,str("
    ")
        print>>f,str("已经翻译的字符串")+("(")+str(datetime.now())+(") : ")+("
    ")
    
        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('█'+'->'+"")
                    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('
    ')
                                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('
    ')
        print>>f,str('
    ')
        print>>f,str('
    ')
        print>>f,str('
    ')
    
        wb_jl.save('翻译记录表.xls')
        wb.save(binPath1[0])
        print '
    '
        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 "
    %s语言已经翻译完毕
    "
        else:
            print "参数处理错误!"
            sys.exit()  
        
        
        
        
        
    

      

  • 相关阅读:
    PHP应用目录结构设计
    php 项目性能优化
    Zend Framework的PHP编码规范【1】
    php 如何做在线人数统计
    linux 文件权限
    总结:常用的通用数据处理指令
    全排列(含递归和非递归的解法)
    局部变量,静态局部变量,全局变量,静态全局变量在内存中的存放区别(转)
    C++中引用详解
    Pascal三角形
  • 原文地址:https://www.cnblogs.com/yuanqiangfei/p/9243651.html
Copyright © 2011-2022 走看看