最近项目需要使用多国语言版本,但是项目之前的代码使用了Layui组件,全网找不到layui的多语言,只能自己动手做,使用Python脚本提取组件中所有的中文,使用本文脚本将中文替换成相应的语种,
1、请将翻译后language.txt,放到layui目录的Models下。
2、读取language.txt,保存到字典中
import io
import os
import re
import hashlib
filepath = "layui\\layui-en-US\\modules"
#读取翻译文件
file_data_dict = {}
languagefile = "language.txt"
#读取语言文件
def read_file_to_dict(file_path):
global languagefile
global file_data_dict
with open(file_path+"\\"+languagefile, 'r',encoding='utf-8') as file:
for line in file.readlines():
line = line.strip() # 去除每行首尾的空白字符
if line: # 跳过空行
key, value = line.split('=')
key = key.replace(" ","")#去掉里面可能出现的空格,google翻译后会出现个别空格,正常人工翻译不用管
file_data_dict[key] = value
3、根据字典文件的内容进行替换
# 遍历指定目录,显示目录下的所有文件名
def each_file(filepath):
for root, dirs, files in os.walk(filepath):
for file in files:
if(file.find(languagefile)== -1):#过滤语言包,避免重复运行一直累加
filename = os.path.join(root, file)
print(filename+"\n")
filtered_chinese_chars = read_file(filename)
#读取文件并替换本文件
def read_file(filename):
#if(filename.find('carousel.js')!= -1):
chinese_pattern = re.compile('[\u4e00-\u9fff]+')
new_lines = []
with open(filename, 'r', encoding='utf-8') as file:
for line in file:
matches = chinese_pattern.findall(line)
new_line = line
for match in matches:
#过滤js文件里面 // 和*开头的行
if (not line.strip().startswith('//')) and (not line.strip().startswith('*')):
#查找字符串面是否直接带// /*
index_target = line.find(match)
if index_target > 0:
preceding_text = line[:index_target]
if ("//" not in preceding_text) and ("/*" not in preceding_text):
#增加字符串的Md5标识,方便之后翻译后替换
md5 = hashlib.md5(match.encode('utf-8')).hexdigest()
file_name = os.path.basename(filename)
key = file_name+"_"+md5
value = file_data_dict[key]
#替换掉
print(line)
new_line = new_line.replace(match, value)
print(new_line)
#进行文件替换 file_data_dict
#print(match)
new_lines.append(new_line)
#保存文件
with open(filename, 'w', encoding='utf-8') as file:
file.writelines(new_lines)
4、执行主程序
if __name__ == '__main__':
read_file_to_dict(file_path=filepath)
each_file(filepath)