#!/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. Sql Server 游标例子笔记

    create PROCEDURE total_mySaleDuty as BEGIN DECLARE @a int,@error int DECLARE @b int,@errorb int DECL ...

  2. 转---Python——numpy random类

    numpy中利用random类获取随机数. numpy.random.random() 生成随机浮点数 默认为生成一个随机的浮点数,范围是在0.0~1.0之间,也可以通过参数size设置返回数据的si ...

  3. retry示例

    #!/usr/bin/python2.7 # -*- coding: utf-8 -*- import time import exceptions def func(): # a,b = None ...

  4. 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 ...

  5. luogu 1966 火柴排队 离散化+逆序对

    题意:找到最小改变对数使a数组的第i大和b数组的第i大相等 则先将a,b,数组编号再排序,则数组显示的就是排名第i的数的编号 再关键一步:c[a[i].id]=b[i].id 实质上就是新建一个数组, ...

  6. Spring Boot 起步

    ……………………………………………………………………………………………………………… [应用配置]application.yml [port][context-path][datasource][jp ...

  7. 如何修改Jupyter Notebook的主题

    1.windows系统 (1)下载到本地(使用git bash命令行界面) git clone https://github.com/dunovank/jupyter-themes (2)Instal ...

  8. Python之线程 3 - 信号量、事件、线程队列与concurrent.futures模块

    一 信号量 二 事件 三 条件Condition 四 定时器(了解) 五 线程队列 六 标准模块-concurrent.futures 基本方法 ThreadPoolExecutor的简单使用 Pro ...

  9. 第25月第26天 dispatch_group_t dispatch_semaphore_t

    1. dispatch_group_enter(group); dispatch_group_leave(group); dispatch_group_notify(group1, queue1,bl ...

  10. 《第一行代码-李兴华》-10.3 System类

    10.3 System类 视频地址:System类 /** * * 统计某项操作执行时间 * */ long start = System.currentTimeMillis();//返回以毫秒为单位 ...