亚洲免费乱码视频,日韩 欧美 国产 动漫 一区,97在线观看免费视频播国产,中文字幕亚洲图片

      1. <legend id="ppnor"></legend>

      2. 
        
        <sup id="ppnor"><input id="ppnor"></input></sup>
        <s id="ppnor"></s>

        Python實(shí)現(xiàn)刪除Android工程中的冗余字符串

        字號(hào):


            Android提供了一套很方便的進(jìn)行資源(語(yǔ)言)國(guó)際化機(jī)制,為了更好地支持多語(yǔ)言,很多工程的翻譯往往會(huì)放到類似crowdin這樣的平臺(tái)上。資源是全了,但是還是會(huì)有一些問(wèn)題。
            哪些問(wèn)題
            以下使用一些語(yǔ)言進(jìn)行舉例。其中values為工程默認(rèn)的資源。
            1.某語(yǔ)言的資源和某語(yǔ)言限定區(qū)域的資源之間。如values-fr-rCA存在于values-fr相同的字符串,這種表現(xiàn)最為嚴(yán)重。
            2.某語(yǔ)言的資源和默認(rèn)的資源之間。values-fr存在與values相同的字符串,可能原因是由于values-fr存在未翻譯字符串導(dǎo)致
            為什么要去重
            潔癖,容不下半點(diǎn)冗余。
            解決思路
            1.如果values-fr-rCA存在于values-fr相同的字符串,去除values-fr-rCA中的重復(fù)字符串,保留values-fr。這樣可以保證在values-fr-rCA下也可以正確讀取到資源。
            2.如果values-fr存在與values相同的字符串。如去除values-fr中得重復(fù)字符串,保留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