篩選本地化字符串批量替換翻譯

用python從項目工程中找出含中文的字符串

定義宏 LS(s)

#define LS(s)     NSLocalizedString(s, nil)

定義python目錄配置文件 PathConfig.py

# -*- coding: utf-8 -*-

import os

# 文件路徑
# rub_filepath = '../RubbishCodeDemo'
rub_filepath = '../../Storybook/Storybook'

localstring_csv_filepath = 'localstring.csv'

創建文件 regularReplace.py
通過他找到項目中的所有的含中文字符串
并生成一個 localstring.csv 的語言對應配置表

第一行是 csv 讀取的時候 需要取出的key信息

['localstringKey','1','2','3',..]

第一列統一中文key 對應的key:'localstringKey'
第二列 對應的原來中文內容 對應的key:'1'
第三 第四 可以后自己添加對應語言的翻譯 對應的key:'2','3','4',.....


# -*- coding: utf-8 -*-
import os
import time
import random
import PathConfig
import re
import csv


# 正則查找替換中文字符串

# 排重
csvKeyList = []
csvList = []

def csvWrite():
    # csv文件讀寫
    csvFile = open(PathConfig.localstring_csv_filepath, 'w')
    csv_writer = csv.writer(csvFile)

    csv_writer.writerow(['localstringKey','1'])
    csv_writer.writerow(['語言','中文'])
    
    for csvDic in csvList:
        key = csvDic['key']
        value = csvDic['value']
        csv_writer.writerow([key,value])

    csvFile.close()


def replaceStr(content, oldstr, newstr):

    replacements = {oldstr:newstr}
    for src, target in replacements.iteritems():
            content = content.replace(src, target)

    return content



def traverse(file_dir):
    

    fs = os.listdir(file_dir)
    for dir in fs:
        if dir.startswith('.'):
            #過濾隱藏
            continue

        tmp_path = os.path.join(file_dir, dir)
        if not os.path.isdir(tmp_path):

            if not dir.endswith('.h') and not dir.endswith('.m'):
                continue

            with open(tmp_path) as f:
                file_str = f.read()
                
                content = file_str.decode('utf-8')
                pat = u'(@"[^"]*[\u4E00-\u9FA5]+[^"\n]*?")'
                results = re.findall(pat,content)
                for s in results:
                    sn_str = s.encode('utf-8')
                    new_sn_str = 'LS(%s)'%(sn_str)
                    # 字符串替換
                    file_str = file_str.replace(new_sn_str,sn_str)
                    file_str = file_str.replace(sn_str,new_sn_str)

                    sn_s = sn_str[2:-1]

                    if sn_s not in csvKeyList:
                        csvKeyList.append(sn_s)
                        csvList.append({'key':sn_s,'value':sn_s})

                    print '"%s" = "%s";' % (sn_s,sn_s)

            with open(tmp_path, 'w') as f:
                f.write(file_str)

        else:
            # 是文件夾,則遞歸調用
            traverse(tmp_path)

def main():
    traverse(PathConfig.rub_filepath)
    csvWrite()
    print('Finish done')

if __name__ == '__main__':
    main()




創建 CSVLocalStringRead.py 讀取本地出來好的本地化語言csv文件
打印中對應語言的 key 和 value 映射
對應復制到項目的Localizable.strings文件中

# -*- coding: utf-8 -*-
import os
import csv
import PathConfig
import re


def main():
    

    csvFile = open(PathConfig.localstring_csv_filepath, 'r')
    
    csv_list = []

    csv_reader = csv.DictReader(csvFile)
    rowCount = len(csv_reader.fieldnames)
            
    for row in csv_reader:
        csv_list.append(row)    

    csvFile.close()




    for i in range(rowCount):
        if i == 0:
            continue

        print '\n\n\n\n\n\n\n\n  ================================  %s \n\n\n\n\n\n' % str(i)
        
        for row in csv_list:
            
            index = str(i)
            key_s = row['localstringKey']
            value_s = row[index]

            oc_s = '"%s" = "%s";' % (key_s,value_s)
            print oc_s
    
    print('Finish done')

if __name__ == '__main__':
    main()

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 本星期,讀了《教師成功密碼》一書。仔細讀來,書中所涉內容包含教師成長的方方面面:良好 的師風師德的建設, 如何做尊...
    劉春暉11閱讀 305評論 0 0
  • 每個人都不一樣 每個人都有夢想 堅持做自己就是最好的狀態
    一傻解千愁閱讀 293評論 0 0
  • 本周工作 1:JDF項目繼續實施 2、周報通知 3、分組 4、崗位職責 5、標準化模板 6、熊 設計工作 7、劉 ...
    何思言閱讀 164評論 0 0
  • 可以使用到手機版的PDF轉換器進行文件格式轉換??!聽到這句話肯定會有會有人感到震驚,手機現在發展這么迅速還能如此操...
    辦公小技巧閱讀 677評論 0 0