translate.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
#!/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 @   轻轻的吻  阅读(463)  评论(2编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示