网站首页  汉语字词  英语词汇  考试资料  写作素材  旧版资料

请输入您要查询的范文:

 

标题 Python实现删除Android工程中的冗余字符串
范文
    Android提供了一套很方便的进行资源(语言)国际化机制,为了更好地支持多语言,很多工程的翻译往往会放到类似crowdin这样的平台上。资源是全了,但是还是会有一些问题。
    哪些问题
    以下使用一些语言进行举例。其中values为工程默认的资源。
    1.某语言的资源和某语言限定区域的资源之间。如values-fr-rCA存在于values-fr相同的字符串,这种表现最为严重。
    2.某语言的资源和默认的资源之间。values-fr存在与values相同的字符串,可能原因是由于values-fr存在未翻译字符串导致
    为什么要去重
    洁癖,容不下半点冗余。
    解决思路
    1.如果values-fr-rCA存在于values-fr相同的字符串,去除values-fr-rCA中的重复字符串,保留values-fr。这样可以保证在values-fr-rCA下也可以正确读取到资源。
    2.如果values-fr存在与values相同的字符串。如去除values-fr中得重复字符串,保留values的条目。
    Py脚本
    代码如下:
    #!/usr/bin/env python
    # coding=utf-8
    from os import listdir,path, system
    from sys import argv
    try:
    import xml.etree.cElementTree as ET
    except ImportError:
    import xml.etree.ElementTree as ET
    def genRegionLangPair(filePath):
    basicLanguage = None
    if ('values' in filePath) :
    hasRegionLimit = ('r' == filePath[-3:-2])
    if (hasRegionLimit):
    basicLanguage = filePath[0:-4]
    if (not path.exists(basicLanguage)) :
    return None
    belongsToEnglish = ("values-en" in basicLanguage)
    if (belongsToEnglish):
    #Compare with the res/values/strings.xml
    return (path.dirname(basicLanguage) + '/values/strings.xml', filePath + "/strings.xml")
    else:
    return (basicLanguage + '/strings.xml', filePath + "/strings.xml")
    return None
    def genLangPair(filePath):
    def shouldGenLanPair(filePath):
    if (not 'values' in filePath ):
    return False
    if('dpi' in filePath):
    return False
    if ('dimes' in filePath):
    return False
    if ('large' in filePath):
    return False
    return True
    if(shouldGenLanPair(filePath)):
    basicLanguage = path.dirname(filePath) + '/values/strings.xml'
    targetLanguage = filePath + '/strings.xml'
    if (not path.exists(targetLanguage)):
    return None
    if (not path.samefile(basicLanguage,targetLanguage)) :
    return (basicLanguage, targetLanguage)
    return None
    def genCompareList(filePath):
    compareLists = []
    for file in listdir(filePath):
    regionPair = genRegionLangPair(filePath + '/' + file)
    if (None != regionPair):
    compareLists.append(regionPair)
    languagePair = genLangPair(filePath + '/' + file)
    if (None != languagePair) :
    compareLists.append(languagePair)
    return compareLists
    def getXmlEntries(filePath):
    root = ET.ElementTree(file=filePath).getroot()
    entries = {}
    for child in root:
    attrib = child.attrib
    if (None != attrib) :
    entries[attrib.get('name')] = child.text
    print 'xmlEntriesCount',len(entries)
    return entries
    def rewriteRegionFile(sourceEntries, filePath):
    if (not path.exists(filePath)):
    return
    ET.register_namespace('xliff',"urn:oasis:names:tc:xliff:document:1.2")
    tree = ET.ElementTree(file=filePath)
    root = tree.getroot()
    print root
    totalCount = 0
    removeCount = 0
    unRemoveCount = 0
    print len(root)
    toRemoveList = []
    for child in root:
    totalCount = totalCount + 1
    attrib = child.attrib
    if (None == attrib):
    continue
    childName = attrib.get('name')
    if (sourceEntries.get(childName) == child.text):
    removeCount = removeCount + 1
    toRemoveList.append(child)
    else:
    unRemoveCount = unRemoveCount + 1
    print childName, sourceEntries.get(childName), child.text
    print filePath,totalCount, removeCount,unRemoveCount
    for aItem in toRemoveList:
    root.remove(aItem)
    if (len(root) != 0 ):
    tree.write(filePath, encoding="UTF-8")
    else:
    command = 'rm -rf %s'%(path.dirname(filePath))
    print command
    system(command)
    def main(projectDir):
    lists = genCompareList(projectDir + "/res/")
    for item in lists:
    print item
    src = item[0]
    dest = item[1]
    rewriteRegionFile(getXmlEntries(src),dest)
    if __name__ == "__main__":
    if (len(argv) == 2) :
    main(argv[1])
    如何使用
    代码如下:
    python removeRepeatedStrings.py your_android_project_root_dir
随便看

 

在线学习网范文大全提供好词好句、学习总结、工作总结、演讲稿等写作素材及范文模板,是学习及工作的有利工具。

 

Copyright © 2002-2024 cuapp.net All Rights Reserved
更新时间:2025/5/14 21:36:10