源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

Python实现删除Android工程中的冗余字符串

  • 时间:2022-07-10 12:08 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:Python实现删除Android工程中的冗余字符串
Android提供了一套很方便的进行资源(语言)国际化机制,为了更好地支持多语言,很多工程的翻译往往会放到类似crowdin这样的平台上。资源是全了,但是还是会有一些问题。 [b]哪些问题[/b] 以下使用一些语言进行举例。其中values为工程默认的资源。 1.某语言的资源和某语言限定区域的资源之间。如values-fr-rCA存在于values-fr相同的字符串,这种表现最为严重。 2.某语言的资源和默认的资源之间。values-fr存在与values相同的字符串,可能原因是由于values-fr存在未翻译字符串导致 [b]为什么要去重[/b] 洁癖,容不下半点冗余。 [b]解决思路[/b] 1.如果values-fr-rCA存在于values-fr相同的字符串,去除values-fr-rCA中的重复字符串,保留values-fr。这样可以保证在values-fr-rCA下也可以正确读取到资源。 2.如果values-fr存在与values相同的字符串。如去除values-fr中得重复字符串,保留values的条目。 [b]Py脚本[/b]
[u]复制代码[/u] 代码如下:
#!/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])
[b]如何使用[/b]
[u]复制代码[/u] 代码如下:
python removeRepeatedStrings.py your_android_project_root_dir
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部