#!/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. HDFS 上文件块的副本数设置

    一.使用 setrep 命令来设置 # 设置 /javafx-src.zip 的文件块只存三份 hadoop fs -setrep /javafx-src.zip 二.文件块在磁盘上的路径 # 设置的 ...

  2. python 生成器和各种推导式

    ##################################总结############################### 什么是迭代器? 可迭代对象通过__iter__()可以转换成迭代 ...

  3. css3好看的background渐变背景色积累

    1. Tippy.js background: linear-gradient(91deg,#f1eefc,#9dc6ff 70%,#a5bcff);(body背景色) background: lin ...

  4. css 动画【转】

    css 动画 http://www.w3school.com.cn/css3/css3_animation.asp

  5. ACM-ICPC 2018 焦作赛区网络预赛 K Transport Ship (多重背包)

    https://nanti.jisuanke.com/t/31720 题意 t组样例,n种船只,q个询问,接下来n行给你每种船只的信息:v[i]表示这个船只的载重,c[i]表示这种船只有2^(c[i] ...

  6. vue filter过滤器简单应用

    vue中过滤器,用于一些常见的文本格式化,用 | 来操作. 过滤器可以用在两个地方: 1.在{{}}双花括号中插入值 2.v-bind表达式中使用 <!-- 在双花括号中 --> {{ m ...

  7. StringBuilder类

    java.lang.StringBuilder String类代表字符串,他的底层是一个被final修饰的数组,不能改变,字符串是常量,它们的值一旦被创建之后就不能改变,但是字符串缓冲区(String ...

  8. docker 系列 - Docker 安装和Hub Mirror地址设置

    ======================为什么要使用Docker?======================= 容器真是个好东西, (1)容器能提供隔离性; (2)容器能打包环境, 简化部署难度 ...

  9. vertica系列:时间相关函数

    -- * 注意: 本文的SQL是在 2017-09-14 测试的. 所以如果取当前日期, 结果为 2017-09-14* ------------------------------ 相关数据类型 - ...

  10. vue中axios 配置请求拦截功能 及请求方式如何封装

    main.js 中: import axios from '................/axios' axios.js 中: //axios.js import Vue from 'vue' i ...