#!/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. 【C#】使用bat文件安装卸载Window服务

    1.安装服务 @echo off @title 安装windows服务path %SystemRoot%\Microsoft.NET\Framework\v4.0.30319echo========= ...

  2. .NET技术-1.0.使用反射、特性简化代码(验证Model类)

    使用反射.特性简化代码 参考项目:利用反射验证Model类/AssemblyVerification 假设现在有一个学生类(Student) /// <summary> /// 学生类 / ...

  3. 7.Hystrix-服务熔断

    服务熔断 类似现实生活中的“保险丝“,当某个异常条件被触发,直接熔断保险丝来起到保护电路的作用, 熔断的触发条件可以依据不同的场景有所不同,比如统计一个时间窗口内失败的调用次数. 1.断路器状态机: ...

  4. ruby-----render讲解

    Ruby rails页面跳转代码如下: 1.render(:text => string) 2.render(:inline => string, [:type => "r ...

  5. try{s.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}}引发的惨案

    如题,ajax请求报错:try{s.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}}引发的惨案 要么是404,要么是40 ...

  6. 【leetcode-84】 柱状图中最大的矩形

    (1pass,比较简单的hard) 给定 n 个非负整数,用来表示柱状图中各个柱子的高度.每个柱子彼此相邻,且宽度为 1 . 求在该柱状图中,能够勾勒出来的矩形的最大面积. 以上是柱状图的示例,其中每 ...

  7. Android五大布局

    原文地址:http://blog.51cto.com/liangruijun/632532 https://www.cnblogs.com/devinzhang/archive/2012/01/19/ ...

  8. 按科室统计 2.181222版本 关联查询join 不对

    SQL: select t0.deptName, t0.deptId, t0.startTime, t0.endTime, IFNULL(t0.num,) as num0, IFNULL(t1.num ...

  9. 什么是CMD

    cmd是command的缩写.命令提示符是在操作系统中,提示进行命令输入的一种工作提示符.在不同的操作系统环境下,命令提示符各不相同. 在windows环境下,命令行程序为cmd.exe,是一个32位 ...

  10. Javaweb学习笔记——(二十)——————Javaweb监听器、国际化

    Javaweb监听器     三大组件         *Servlet         *Listener         *Filter Listener:监听器         1.初次相见:A ...