zoukankan      html  css  js  c++  java
  • 〖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 "
    ### Processing Project: %s ..
    " % 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 "
    Usage: %s project_dir1 project_dir2 ..
    " % 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在切换语言之后出现崩溃的问题;

  • 相关阅读:
    验证码图片识别
    DataSnap下的分包获取
    uniGUI试用笔记(十)
    EControl的安装
    Cesium应用篇:3控件(6) FullScreen/ VR / Home
    Cesium应用篇:3控件(5)CesiumInspector
    Cesium应用篇:3控件(4)Geocoder
    Cesium应用篇:3控件(3)SelectionIndicator& InfoBox
    Cesium应用篇:3控件(2)BaseLayerPicker
    Cesium应用篇:3控件(1)Clock
  • 原文地址:https://www.cnblogs.com/scue/p/4463020.html
Copyright © 2011-2022 走看看