客户端国际化翻译 字符串整理之Python实现导入导出

11 篇文章 0 订阅

公司的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()

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值