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()
translate.py的更多相关文章
- Python cookbook - 读书笔记
Before: python built-in function: docs 我只想学function map(), THIS - 摘: map(foo, seq) is equivalent to ...
- Windows版词汇小助手V3.0发布了
欢迎使用词汇小助手 作者:IT小小龙 电子邮箱:long_python@126.com 个人博客:http://blog.sina.com.cn/buduanqs 一款跨平台词汇查询记忆学习软件. 已 ...
- 词汇小助手V3.0发布了——不只是一个查单词的软件
欢迎使用词汇小助手 作者:IT小小龙 电子邮箱:long_python@126.com 个人博客:http://blog.sina.com.cn/buduanqs 一款跨平台词汇查询记忆学习软件. 已 ...
- 解析Tensorflow官方English-Franch翻译器demo
今天我们来解析下Tensorflow的Seq2Seq的demo.继上篇博客的PTM模型之后,Tensorflow官方也开放了名为translate的demo,这个demo对比之前的PTM要大了很多(首 ...
- 制作pypi上的安装库
下载地址 如何制作分发工具呢 setuppy 源码包 其他文件 制作过程 首先上场的肯定是setuppy了如下 然后是LICENCE 注册 测试 总结 自从接触Python以来也有几个月了,虽然主要的 ...
- DOS界面下的翻译软件制作
准备 素材 依赖 接口 地址 参数 返回值解析 编码及测试 功能代码 运行脚本 环境变量 结果展示 英语转汉语 汉语转英语 总结 昨天看到一篇关于Linux下的桌面词典的文章,于是就想实现一个Wind ...
- Python 编写一个有道翻译的 workflow 教程
最近使用有道翻译的 workflow 总是翻译不了,可能是 appKey 失效了或者超过调用上限,所以打算自己实现一个. 创建 workflow 打开 Alfred3 的 Preferences,选择 ...
- 利用百度翻译API,获取翻译结果
利用百度翻译API,获取翻译结果 translate.py #!/usr/bin/python #-*- coding:utf-8 -*- import sys reload(sys) sys.set ...
- Ios国际化翻译工具
IOS Translation Tool(IOS国际化翻译工具) 介绍 当IOS项目国际化的时候,手工去翻译每一个字符串是一件非常痛苦的事情.尤其是当项目中存在N多种语言.而且又很难保证,手工翻译的准 ...
随机推荐
- Sql Server 游标例子笔记
create PROCEDURE total_mySaleDuty as BEGIN DECLARE @a int,@error int DECLARE @b int,@errorb int DECL ...
- 转---Python——numpy random类
numpy中利用random类获取随机数. numpy.random.random() 生成随机浮点数 默认为生成一个随机的浮点数,范围是在0.0~1.0之间,也可以通过参数size设置返回数据的si ...
- retry示例
#!/usr/bin/python2.7 # -*- coding: utf-8 -*- import time import exceptions def func(): # a,b = None ...
- awk指定[]为分隔符
root@standby[16:38:35]$ root@standby[16:38:35]$ cat tmp.log qq [8.8.8.8] 6.6.6.6 [1502301436.016] &q ...
- luogu 1966 火柴排队 离散化+逆序对
题意:找到最小改变对数使a数组的第i大和b数组的第i大相等 则先将a,b,数组编号再排序,则数组显示的就是排名第i的数的编号 再关键一步:c[a[i].id]=b[i].id 实质上就是新建一个数组, ...
- Spring Boot 起步
……………………………………………………………………………………………………………… [应用配置]application.yml [port][context-path][datasource][jp ...
- 如何修改Jupyter Notebook的主题
1.windows系统 (1)下载到本地(使用git bash命令行界面) git clone https://github.com/dunovank/jupyter-themes (2)Instal ...
- Python之线程 3 - 信号量、事件、线程队列与concurrent.futures模块
一 信号量 二 事件 三 条件Condition 四 定时器(了解) 五 线程队列 六 标准模块-concurrent.futures 基本方法 ThreadPoolExecutor的简单使用 Pro ...
- 第25月第26天 dispatch_group_t dispatch_semaphore_t
1. dispatch_group_enter(group); dispatch_group_leave(group); dispatch_group_notify(group1, queue1,bl ...
- 《第一行代码-李兴华》-10.3 System类
10.3 System类 视频地址:System类 /** * * 统计某项操作执行时间 * */ long start = System.currentTimeMillis();//返回以毫秒为单位 ...