美文网首页Android开发Android技术知识Android开发
Android查找代码中的汉字,并整理到strings.xml

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

作者: 时间在走 | 来源:发表于2019-06-13 11:21 被阅读20次

    项目需求

    增加语言切换功能

    存在问题

    项目代码中,汉字直接使用,没有在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 = '<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'])
    
    

    完活了

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

    相关文章

      网友评论

        本文标题:Android查找代码中的汉字,并整理到strings.xml

        本文链接:https://www.haomeiwen.com/subject/wbjjfctx.html