• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
    當(dāng)前位置: 首頁 - 科技 - 知識百科 - 正文

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

    來源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 14:31:35
    文檔

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

    Python實(shí)現(xiàn)刪除Android工程中的冗余字符串:Android提供了一套很方便的進(jìn)行資源(語言)國際化機(jī)制,為了更好地支持多語言,很多工程的翻譯往往會(huì)放到類似crowdin這樣的平臺上。資源是全了,但是還是會(huì)有一些問題。 哪些問題 以下使用一些語言進(jìn)行舉例。其中values為工程默認(rèn)的資源。 1.某語言的資源
    推薦度:
    導(dǎo)讀Python實(shí)現(xiàn)刪除Android工程中的冗余字符串:Android提供了一套很方便的進(jìn)行資源(語言)國際化機(jī)制,為了更好地支持多語言,很多工程的翻譯往往會(huì)放到類似crowdin這樣的平臺上。資源是全了,但是還是會(huì)有一些問題。 哪些問題 以下使用一些語言進(jìn)行舉例。其中values為工程默認(rèn)的資源。 1.某語言的資源

    Android提供了一套很方便的進(jìn)行資源(語言)國際化機(jī)制,為了更好地支持多語言,很多工程的翻譯往往會(huì)放到類似crowdin這樣的平臺上。資源是全了,但是還是會(huì)有一些問題。

    哪些問題

    以下使用一些語言進(jìn)行舉例。其中values為工程默認(rèn)的資源。

    1.某語言的資源和某語言限定區(qū)域的資源之間。如values-fr-rCA存在于values-fr相同的字符串,這種表現(xiàn)最為嚴(yán)重。
    2.某語言的資源和默認(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

    聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

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

    Python實(shí)現(xiàn)刪除Android工程中的冗余字符串:Android提供了一套很方便的進(jìn)行資源(語言)國際化機(jī)制,為了更好地支持多語言,很多工程的翻譯往往會(huì)放到類似crowdin這樣的平臺上。資源是全了,但是還是會(huì)有一些問題。 哪些問題 以下使用一些語言進(jìn)行舉例。其中values為工程默認(rèn)的資源。 1.某語言的資源
    推薦度:
    標(biāo)簽: android 字符串 python
    • 熱門焦點(diǎn)

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 国产精品成人不卡在线观看| 国产精品福利网站导航| 小辣椒福利视频精品导航| 99国产精品私拍pans大尺度| 亚洲&#228;v永久无码精品天堂久久 | 99在线观看视频免费精品9| 精品麻豆丝袜高跟鞋AV| 亚洲国产精品不卡毛片a在线| 国产成人精品免费大全| 国产成人精品免费视频大全麻豆 | 亚洲永久精品ww47| 久草欧美精品在线观看| 真实国产乱子伦精品免费| 国产精品扒开腿做爽爽爽视频 | 国产精品V亚洲精品V日韩精品| 91精品成人免费国产| 人人妻人人澡人人爽人人精品电影| 久久国产乱子伦精品免费午夜| 国产精品第六页| 国产成人精品久久亚洲高清不卡| 精品国产欧美另类一区| 成人午夜视频精品一区| 久久久久久国产精品免费无码| 亚洲国产欧美日韩精品一区二区三区| 国产伦精品一区二区三区视频金莲| 视频二区国产精品职场同事| 国产精品成人观看视频国产 | 精品久久香蕉国产线看观看亚洲| 国产在线精品无码二区| 无码人妻精品一区二区三18禁| 日本精品视频在线观看| 久久99精品久久久久久水蜜桃| 国产精品乱伦| 国产精品99久久久久久猫咪| 成人国产精品秘 果冻传媒在线| 亚洲国产精品欧美日韩一区二区| 久久精品视频免费| 亚洲综合国产精品| 国产精品第六页| 久久99精品久久久久久水蜜桃| 免费精品视频在线|