公司的APP国际化需要翻译成18国语言,面对几十万行的代码上千个文件中的字符串太多,所有想到用python实现一下。我这里的需求是领导要求整理需要翻译的内容交给专业翻译去翻译。(以iOS工程为例)
所以大致实现思想就是:1、读取工程文件 2、数据整理去除没有用的相关字符串,获得自己需要的。3、将获得的字符串放到Excel里保存。
实现读取工程我们需要翻译的字符串:
我这里的字符串宏定义了:pch文件中
#define LocalString(x) NSLocalizedString(x, nil)
所以确定需要的字符串都是LocalString(x)
贴码:
#-*- coding:utf-8-*-
#处理中文字符的情况
import os
import re
import codecs
import pandas as pd
class LanguageRead(object):
#切分字符串 参数s:需要操作的字符串 参数f:需求字符串最左边 参数b:需求字符串最右边
def get_str_btw(self,s, f, b):
par = s.partition(f)
return (par[2].partition(b))[0][:]
def an_readText(self,path):
# 搜寻以下文件类型
#suf_set = ('.h', '.m','.pch')
suf_set = ('.m')
# 项目路径
# ../文件夹路径
project_path = path
# 集合存放需要的字符串
strStr = set()
for (root, dirs, files) in os.walk(project_path):
for file_name in files:
if file_name.endswith(suf_set):
with open(os.path.join(root, file_name), 'r+') as f:
#print('========fileName========' + file_name)
s0 = f.readlines()
f.close()
for textStr in s0:
#textStr = textStr.strip()
# 提取数字
#textStr = re.sub("([^\u0030-\u0039])","",textStr)
# 提取英文
#textStr = re.sub("([^\u0041-\u007a])","",textStr)
# 提取汉字
#textStr = re.sub("([^\u4e00-\u9fa5])","",textStr)
# 提取数字、英文、汉字
#textStr = re.sub("([^\u4e00-\u9fa5\u0030-\u0039\u0041-\u005a\u0061-\u007a])","",textStr)
# 提取指定字符如:?
#textStr = re.sub("([^\?])","",textStr)
#textStr = re.sub("[A-Za-z\!\%\[\]\,\。\(\)\{\}\.\"\'\&\+\-\/\|\~]", "",textStr)
#textStr = textStr.replace(' ','')
textStr = textStr.replace('\n', '').replace('\n', '')
if (textStr.find('LocalString') > 0 and textStr.find('//') < 0 and textStr.find('/*') < 0 and textStr.find('*') < 0 and textStr.find('#') < 0 and (textStr != '\n')):
textStr = textStr + '\n'
result = self.get_str_btw(textStr, f = 'LocalString(@"', b = '")')
strStr.add(result)
#print(strStr)
print ("~~~遍历结束~~~")
list1 = list(strStr)
file_path = os.path.abspath('.') + '/cnStr.txt'
with codecs.open(file_path, 'a', encoding='utf-8') as f2:
f2.writelines(list1)
f2.close()
self.dealExcel(list1)
def dealExcel(self,listStr):
file_path = os.path.abspath('.') + '/LanguageStr.xlsx' # 文件需要保存路径
writer = pd.ExcelWriter(file_path)
df = pd.DataFrame(listStr)
df.to_excel(writer, index=False, encoding='utf-8',sheet_name='baseLocalString')
writer.save()
print("信息%s " % df)
if __name__ == "__main__":
anjw = LanguageRead()
anjw.an_readText(path = '/Users/guiwukeji/Desktop/Philadd/DeLin/DeLin')
(二)读取客户已经翻译好的字符串放到需要的自己的工程中:
import xlrd
def openWorkbook():
#读取excel表的数据
file_path = r'../Python/hhhhhh.xlsx'
workbook = xlrd.open_workbook(file_path)
#选取需要读取数据的那一页
sheet = workbook.sheet_by_index(0)
#获得行数和列数
rows =sheet.nrows
cols =sheet.ncols
#创建一个数组用来存储excel中的数据
p= []
# 获取整行或整列数据
for i in range(0,rows):
d={}
for j in range(0,cols):#从excel中的第几列 开始统计
q='%s' % sheet.cell(0,j).value #excel中的第一列 作为key
d[q] = sheet.cell(i,j).value
ap = []
for k,v in d.items():
if isinstance(v,float): #excel中的值默认是float,需要进行判断处理,通过'"%s":%d','"%s":"%s"'格式化数组
ap.append('"%s" = "%d";' % (k, v))
else:
ap.append('"%s" = "%s";' % (k, v))
s = '%s' % ('\n'.join(ap)) #继续格式化
p.append(s)
t ='%s' % ('\n\n'.join(p)) #格式化
print (t)
#写入对应的json文件
with open('dataLanguage.json',"w") as f:
f.write(t)
openWorkbook()