項目需求
增加語言切換功能
存在問題
項目代碼中肌括,漢字直接使用,沒有在string.xml中聲明并引用泛范。
全局查找并整理到string.xml中特別麻煩
解決思路
1.編寫并使用python腳本整理出代碼中出現(xiàn)的漢字让虐。
2.整理出的漢字序列交給翻譯人員,翻譯罢荡,整理成文檔(key-value形式)赡突。
3.讀取翻譯文檔,將翻譯文檔使用python腳本整理成strings.xml区赵。
4.使用python腳本惭缰,將代碼中的漢字替換成引用strings.xml中的形式。
實現(xiàn)
1.編寫并使用python腳本整理出代碼中出現(xiàn)的漢字惧笛。
import os
import re
# 漢字集合
chinesSet = set()
# 查找漢字
def findChinese(path):
with open(path, 'r', encoding='utf8') as javaFile:
content = javaFile.read()
# java代碼中查找漢字
# findP = r'\"([\u4E00-\u9FA5从媚,]+)\"'
# layout文件中查找漢字
findP = r'android:text=\"([\u4E00-\u9FA5逞泄,]+)\"'
results = re.compile(findP).findall(content)
# 將查找到的漢字添加到set中患整,set自重去重
for hanz in results:
chinesSet.add(hanz)
# 遍歷并查找文檔
def search_dir(rootPath):
list = os.listdir(rootPath) # 列出文件夾下所有的目錄與文件
for i in range(0, len(list)):
path = os.path.join(rootPath, list[i])
if os.path.isfile(path):
# 是文件,進入文件喷众,查找
findChinese(path)
else:
# 是文件夾各谚,進入文件夾,遞歸
search_dir(path)
# 代碼路徑
rootdir = 'layout'
search_dir(rootdir)
print(chinesSet)
2.整理出的漢字序列交給翻譯人員到千,翻譯昌渤,整理成文檔(key-value形式)。
拿到翻譯文檔在進行下一步
3.讀取翻譯文檔憔四,將翻譯文檔使用python腳本整理成strings.xml膀息。
文檔內(nèi)容如下
# 保存到的xml文件路徑
fileNameXml = 'stringsen2.xml'
# 文檔路徑
fileNameTxt = 'en_2.txt'
# 寫入到xml中
def writeInfoToXml(key, value):
with open(fileNameXml, 'a', encoding='utf8') as stringFile:
line = '<string name="' + key + '">' + value + '</string>\n'
stringFile.writelines(line)
with open(fileNameTxt, 'r', encoding='GBK') as enFile:
lines = enFile.readlines()
with open(fileNameXml, 'a', encoding='utf8') as stringFile:
line = '<?xml version="1.0" encoding="utf-8"?>\n'
stringFile.writelines(line)
stringFile.writelines('<resources>\n')
for line in lines:
# 去除亂七八糟的符號
line = line.replace('\"', '').replace(';', '').replace('\n', '')
print(line)
c = line.split('=')
writeInfoToXml(c[0].replace('-', '_'), c[1])
with open(fileNameXml, 'a', encoding='utf8') as stringFile:
stringFile.writelines('</resources>\n')
4.使用python腳本般眉,將代碼中的漢字替換成引用strings.xml中的形式。
import os
import xml.etree.ElementTree as ET
# 查找漢字
def findChinese(path, txt, name):
# StringUtils.getString(R.string.t_submit)
# 這個是我自己使用string文件的工具潜支,具體代碼可自行替換
with open(path, 'r', encoding='utf8') as javaFile_r:
content = javaFile_r.read()
with open(path, 'w', encoding='utf8') as javaFile_w:
content = content.replace('\"' + txt + '\"', 'StringUtils.getString(R.string.' + name + ')')
javaFile_w.write(content)
# 遍歷并查找文檔
def search_dir(rootPath, txt, name):
list = os.listdir(rootPath) # 列出文件夾下所有的目錄與文件
for i in range(0, len(list)):
path = os.path.join(rootPath, list[i])
if os.path.isfile(path):
findChinese(path, txt, name)
else:
search_dir(path, txt, name)
# 讀取string.xml
def read_xml(in_path):
"""讀取并解析xml文件
in_path: xml路徑
return: tree"""
tree = ET.parse(in_path)
return tree
# 代碼路徑
rootdir = 'turtle'
xmlPath = 'strings_zh.xml'
tree = read_xml(xmlPath)
root = tree.getroot()
for e in root:
search_dir(rootdir, e.text, e.attrib['name'])
print(e.text, e.attrib['name'])