〖Android〗Android App项目资源字符串检查(检查是否缺少对应的翻译,导致系统切换语言后崩溃)
Android项目开发过程中,容易出现缺少对应中英文翻译的情况,这个Python脚本是用于检查字符串是否缺少了对应的翻译
1 #!/usr/bin/env python 2 # encoding: utf-8 3 4 import os, sys, getopt 5 import xml.dom.minidom 6 import subprocess 7 from xml.dom.minidom import Node 8 9 # 判断是否是App项目依据 10 Axml='AndroidManifest.xml' 11 12 res_en_string="res/values/strings.xml" 13 res_cn_string="res/values-zh-rCN/strings.xml" 14 15 # 检查资源文件列表 16 res_string_files=[res_en_string, res_cn_string] 17 18 # Java调用字符串资源列表 19 find_string_called_by_java='''find . -name .repo -prune -o -name .git -prune -o -type f -name "*\.java" -print0 | xargs -0 grep --color -n -o 'R.string[0-9A-Za-z_.-]\+'|awk -F':' '{print $3}'|sort|uniq|xargs echo''' 20 21 def _check_string_res(path): 22 """检查字符串资源调用情况 23 24 :path: TODO 25 :returns: TODO 26 27 """ 28 os.chdir(path) 29 if not os.path.exists(Axml): 30 return 31 32 # 输出提示 33 print "\n### Processing Project: %s ..\n" % path 34 35 # 获得字符串资源调用情况 36 find_string_called_by_java_array = subprocess.Popen(find_string_called_by_java, shell=True, stdout=subprocess.PIPE).stdout.read().split(' ') 37 38 # 逐个检查资源文件(目前检查中文、英文) 39 for res_string_file in res_string_files: 40 print ">>> Checking %s file .." % res_string_file 41 42 # 解析xml文件,并保存已有资源到 names_had 43 doc = xml.dom.minidom.parse(res_string_file) 44 strings = doc.getElementsByTagName('string') 45 names_had = [] 46 for string in strings: 47 name = string.getAttribute('name') 48 names_had.append(name) 49 50 # 逐个检查被调用的字符串资源,不存在此资源时报Warning 51 for check in find_string_called_by_java_array: 52 c=check[9:].strip() 53 if c not in names_had: 54 print " - Warning: string name '%s' not found!!!" % c 55 56 def usage(exitval=0): 57 print "\nUsage: %s project_dir1 project_dir2 ..\n" % sys.argv[0] 58 59 if __name__ == '__main__': 60 if len(sys.argv) == 1: 61 if os.path.isfile(Axml): 62 _check_string_res(os.path.abspath('.')) 63 else: 64 usage() 65 elif len(sys.argv) > 1: 66 for path in sys.argv[1:]: 67 if os.path.isdir(path): 68 _check_string_res(os.path.abspath(path)) 69 else: 70 print "### %s Not a directory, ignored." % path 71 else: 72 usage()
使用方法:
./check_string_res.py packages/apps/Settings/
./check_string_res.py packages/apps/Settings/ packages/apps/QuickSearchBox/ ..
把对应缺少的字符串补上翻译就OK,避免缺少翻译导致Android在切换语言之后出现崩溃的问题;