#!/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的更多相关文章

  1. Python cookbook - 读书笔记

    Before: python built-in function: docs 我只想学function map(), THIS  - 摘: map(foo, seq) is equivalent to ...

  2. Windows版词汇小助手V3.0发布了

    欢迎使用词汇小助手 作者:IT小小龙 电子邮箱:long_python@126.com 个人博客:http://blog.sina.com.cn/buduanqs 一款跨平台词汇查询记忆学习软件. 已 ...

  3. 词汇小助手V3.0发布了——不只是一个查单词的软件

    欢迎使用词汇小助手 作者:IT小小龙 电子邮箱:long_python@126.com 个人博客:http://blog.sina.com.cn/buduanqs 一款跨平台词汇查询记忆学习软件. 已 ...

  4. 解析Tensorflow官方English-Franch翻译器demo

    今天我们来解析下Tensorflow的Seq2Seq的demo.继上篇博客的PTM模型之后,Tensorflow官方也开放了名为translate的demo,这个demo对比之前的PTM要大了很多(首 ...

  5. 制作pypi上的安装库

    下载地址 如何制作分发工具呢 setuppy 源码包 其他文件 制作过程 首先上场的肯定是setuppy了如下 然后是LICENCE 注册 测试 总结 自从接触Python以来也有几个月了,虽然主要的 ...

  6. DOS界面下的翻译软件制作

    准备 素材 依赖 接口 地址 参数 返回值解析 编码及测试 功能代码 运行脚本 环境变量 结果展示 英语转汉语 汉语转英语 总结 昨天看到一篇关于Linux下的桌面词典的文章,于是就想实现一个Wind ...

  7. Python 编写一个有道翻译的 workflow 教程

    最近使用有道翻译的 workflow 总是翻译不了,可能是 appKey 失效了或者超过调用上限,所以打算自己实现一个. 创建 workflow 打开 Alfred3 的 Preferences,选择 ...

  8. 利用百度翻译API,获取翻译结果

    利用百度翻译API,获取翻译结果 translate.py #!/usr/bin/python #-*- coding:utf-8 -*- import sys reload(sys) sys.set ...

  9. Ios国际化翻译工具

    IOS Translation Tool(IOS国际化翻译工具) 介绍 当IOS项目国际化的时候,手工去翻译每一个字符串是一件非常痛苦的事情.尤其是当项目中存在N多种语言.而且又很难保证,手工翻译的准 ...

随机推荐

  1. 【MSSQL】SQL Server的日期和时间类型

    参考:SQL Server的日期和时间类型 SQL Server使用 Date 表示日期,time表示时间,使用datetime和datetime2表示日期和时间. 1.秒的精度 秒的精度是指TSQL ...

  2. Spring的RestTemplate

    Spring提供了一个RestTemplate模板工具类,对基于Http的客户端进行了封装,并且实现了对象与json的序列化和反序列化,非常方便.RestTemplate并没有限定Http的客户端类型 ...

  3. Sublime Text 3 Mac常用快捷键与注意事项

    大多数情况下容易忘记的快捷键,在此整理了一下. 编辑快捷键:cmd+L:选择行(重复按下将下一行加入选择):cmd+D:选择词(重复按下时多重选择相同的词进行多重编辑):cmd+shift+D 复制光 ...

  4. C# Selenium学习

    https://blog.csdn.net/hjkl950217/article/details/54314760 https://www.cnblogs.com/vaevvaev/p/7041842 ...

  5. Project facet Java version 1.8 not supported

    把其它的项目到自己的eclipse中后,进行运行项目之后,就会提示为“Project facet Java version 1.8 not supported”.   进行更改配置,进行右键项目就会弹 ...

  6. Web前端框架与移动应用开发第八章

    Web前端框架与移动应用开发:制作58招聘专题页 1.html代码: <!DOCTYPE html><html><head> <meta charset=&q ...

  7. HDU - 1698 Just a Hook (线段树区间修改)

    https://cn.vjudge.net/problem/HDU-1698 题意 大小为n的数组,数组元素初始值为1,有q次操作,x,y,z表示从第x到第y所有的元素的值变为z,最后问1到n的和. ...

  8. redis基本操作

    ''' pip install redis redis 可以看成内存中的大字典 redis五大数据类型 --> 指的是第一层的value值的类型 - 字符串 "k1" - 列 ...

  9. system.net.webexception远程服务器返回了错误: NotFound。

    Not Found类的错误主要是由于网络服务访问出错.所以需要分析是由哪个网络服务访问失败而导致的. DataAccessSilverlight.PowerDataServiceReference.G ...

  10. Kettle系列: 马进举开源的Kettle通用插件 KettleEasyExpand

    扩展Kettle功能, 经常使用 user defined java class 组件, 或者自己开发Java插件. 两种方式都有各自的痛点: 1. 在user defined java class ...