前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >赶走那些Android工程中得冗余字符串

赶走那些Android工程中得冗余字符串

作者头像
技术小黑屋
发布2018-09-04 16:53:26
5090
发布2018-09-04 16:53:26
举报
文章被收录于专栏:技术小黑屋技术小黑屋

Android提供了一套很方便的进行资源(语言)国际化机制,为了更好地支持多语言,很多工程的翻译往往会放到类似crowdin这样的平台上。资源是全了,但是还是会有一些问题。

哪些问题

以下使用一些语言进行举例。其中values为工程默认的资源。

  • 某语言的资源和某语言限定区域的资源之间。如values-fr-rCA存在于values-fr相同的字符串,这种表现最为严重。
  • 某语言的资源和默认的资源之间。values-fr存在与values相同的字符串,可能原因是由于values-fr存在未翻译字符串导致

为什么要去重

  • 洁癖,容不下半点冗余。

解决思路

  • 如果values-fr-rCA存在于values-fr相同的字符串,去除values-fr-rCA中的重复字符串,保留values-fr。这样可以保证在values-fr-rCA下也可以正确读取到资源。
  • 如果values-fr存在与values相同的字符串。如去除values-fr中得重复字符串,保留values的条目。

Py脚本

filenos:false removeRepeatedStrings.pylink

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123

#!/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])

如何使用

filenos:false

1

python removeRepeatedStrings.py your_android_project_root_dir

工程参与

RemoveRepeatedStrings.py

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 哪些问题
  • 为什么要去重
  • 解决思路
  • Py脚本
  • 如何使用
  • 工程参与
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档