Android查找代碼中的漢字檩坚,并整理到strings.xml

項目需求

增加語言切換功能

存在問題

項目代碼中肌括,漢字直接使用,沒有在string.xml中聲明并引用泛范。
全局查找并整理到string.xml中特別麻煩

解決思路

1.編寫并使用python腳本整理出代碼中出現(xiàn)的漢字让虐。
2.整理出的漢字序列交給翻譯人員,翻譯罢荡,整理成文檔(key-value形式)赡突。
3.讀取翻譯文檔,將翻譯文檔使用python腳本整理成strings.xml区赵。
4.使用python腳本惭缰,將代碼中的漢字替換成引用strings.xml中的形式。

實現(xiàn)

1.編寫并使用python腳本整理出代碼中出現(xiàn)的漢字惧笛。

import os
import re

# 漢字集合
chinesSet = set()


# 查找漢字
def findChinese(path):
    with open(path, 'r', encoding='utf8') as javaFile:
        content = javaFile.read()
        # java代碼中查找漢字
        # findP = r'\"([\u4E00-\u9FA5从媚,]+)\"'
        # layout文件中查找漢字
        findP = r'android:text=\"([\u4E00-\u9FA5逞泄,]+)\"'
        results = re.compile(findP).findall(content)

        # 將查找到的漢字添加到set中患整,set自重去重
        for hanz in results:
            chinesSet.add(hanz)


# 遍歷并查找文檔
def search_dir(rootPath):
    list = os.listdir(rootPath)  # 列出文件夾下所有的目錄與文件
    for i in range(0, len(list)):
        path = os.path.join(rootPath, list[i])
        if os.path.isfile(path):
            # 是文件,進入文件喷众,查找
            findChinese(path)
        else:
            # 是文件夾各谚,進入文件夾,遞歸
            search_dir(path)


# 代碼路徑
rootdir = 'layout'

search_dir(rootdir)

print(chinesSet)

2.整理出的漢字序列交給翻譯人員到千,翻譯昌渤,整理成文檔(key-value形式)。

拿到翻譯文檔在進行下一步

3.讀取翻譯文檔憔四,將翻譯文檔使用python腳本整理成strings.xml膀息。

文檔內(nèi)容如下


中文.png

繁體.png

鳥語.png
# 保存到的xml文件路徑
fileNameXml = 'stringsen2.xml'
# 文檔路徑
fileNameTxt = 'en_2.txt'


# 寫入到xml中
def writeInfoToXml(key, value):
    with open(fileNameXml, 'a', encoding='utf8') as stringFile:
        line = '<string name="' + key + '">' + value + '</string>\n'
        stringFile.writelines(line)


with open(fileNameTxt, 'r', encoding='GBK') as enFile:
    lines = enFile.readlines()

with open(fileNameXml, 'a', encoding='utf8') as stringFile:
    line = '<?xml version="1.0" encoding="utf-8"?>\n'
    stringFile.writelines(line)
    stringFile.writelines('<resources>\n')

for line in lines:
    # 去除亂七八糟的符號
    line = line.replace('\"', '').replace(';', '').replace('\n', '')
    print(line)
    c = line.split('=')
    writeInfoToXml(c[0].replace('-', '_'), c[1])

with open(fileNameXml, 'a', encoding='utf8') as stringFile:
    stringFile.writelines('</resources>\n')

4.使用python腳本般眉,將代碼中的漢字替換成引用strings.xml中的形式。

import os
import xml.etree.ElementTree as ET


# 查找漢字
def findChinese(path, txt, name):
    # StringUtils.getString(R.string.t_submit)
    # 這個是我自己使用string文件的工具潜支,具體代碼可自行替換
    with open(path, 'r', encoding='utf8') as javaFile_r:
        content = javaFile_r.read()

    with open(path, 'w', encoding='utf8') as javaFile_w:
        content = content.replace('\"' + txt + '\"', 'StringUtils.getString(R.string.' + name + ')')
        javaFile_w.write(content)


# 遍歷并查找文檔
def search_dir(rootPath, txt, name):
    list = os.listdir(rootPath)  # 列出文件夾下所有的目錄與文件
    for i in range(0, len(list)):
        path = os.path.join(rootPath, list[i])
        if os.path.isfile(path):
            findChinese(path, txt, name)
        else:
            search_dir(path, txt, name)


# 讀取string.xml
def read_xml(in_path):
    """讀取并解析xml文件
       in_path: xml路徑
       return: tree"""
    tree = ET.parse(in_path)
    return tree


# 代碼路徑
rootdir = 'turtle'
xmlPath = 'strings_zh.xml'

tree = read_xml(xmlPath)
root = tree.getroot()

for e in root:
    search_dir(rootdir, e.text, e.attrib['name'])
    print(e.text, e.attrib['name'])

完活了

原文http://www.smilingman.cn/articles/details-9.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末甸赃,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子冗酿,更是在濱河造成了極大的恐慌埠对,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件裁替,死亡現(xiàn)場離奇詭異项玛,居然都是意外死亡,警方通過查閱死者的電腦和手機弱判,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門襟沮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人昌腰,你說我怎么就攤上這事臣嚣。” “怎么了剥哑?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵硅则,是天一觀的道長。 經(jīng)常有香客問我株婴,道長怎虫,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任困介,我火速辦了婚禮大审,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘座哩。我一直安慰自己徒扶,他們只是感情好,可當我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布根穷。 她就那樣靜靜地躺著姜骡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪屿良。 梳的紋絲不亂的頭發(fā)上圈澈,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天,我揣著相機與錄音尘惧,去河邊找鬼康栈。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的啥么。 我是一名探鬼主播登舞,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼悬荣!你這毒婦竟也來了逊躁?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤隅熙,失蹤者是張志新(化名)和其女友劉穎稽煤,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體囚戚,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡酵熙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了驰坊。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片匾二。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖拳芙,靈堂內(nèi)的尸體忽然破棺而出察藐,到底是詐尸還是另有隱情,我是刑警寧澤舟扎,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布分飞,位于F島的核電站,受9級特大地震影響睹限,放射性物質(zhì)發(fā)生泄漏譬猫。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一羡疗、第九天 我趴在偏房一處隱蔽的房頂上張望染服。 院中可真熱鬧,春花似錦叨恨、人聲如沸柳刮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽秉颗。三九已至,卻和暖如春午乓,著一層夾襖步出監(jiān)牢的瞬間站宗,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工益愈, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓蒸其,卻偏偏與公主長得像敏释,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子摸袁,可洞房花燭夜當晚...
    茶點故事閱讀 42,925評論 2 344