Android查找代码中的汉字,并整理到strings.xml

项目需求

增加语言切换功能

存在问题

项目代码中,汉字直接使用,没有在string.xml中声明并引用。
全局查找并整理到string.xml中特别麻烦

解决思路

1.编写并使用python脚本整理出代码中出现的汉字。
2.整理出的汉字序列交给翻译人员,翻译,整理成文档(key-value形式)。
3.读取翻译文档,将翻译文档使用python脚本整理成strings.xml。
4.使用python脚本,将代码中的汉字替换成引用strings.xml中的形式。

实现

1.编写并使用python脚本整理出代码中出现的汉字。

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。

文档内容如下


中文.png

繁体.png

鸟语.png
# 保存到的xml文件路径
fileNameXml = 'stringsen2.xml'
# 文档路径
fileNameTxt = 'en_2.txt'


# 写入到xml中
def writeInfoToXml(key, value):
    with open(fileNameXml, 'a', encoding='utf8') as stringFile:
        line = '' + value + '\n'
        stringFile.writelines(line)


with open(fileNameTxt, 'r', encoding='GBK') as enFile:
    lines = enFile.readlines()

with open(fileNameXml, 'a', encoding='utf8') as stringFile:
    line = '\n'
    stringFile.writelines(line)
    stringFile.writelines('\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('\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'])

完活了

原文http://www.smilingman.cn/articles/details-9.html

你可能感兴趣的:(Android查找代码中的汉字,并整理到strings.xml)