以下是一个Python脚本,专门处理McgsPro导出的XML文件,
将<中文>...</中文>
标签中的内容翻译成英文后放入<英语>...</英语>
标签,
同时完全保留原始XML格式。(非常好用)
-
找到进行修改:# 配置参数
INPUT_XML = "mcgspro_config.xml" # 修改输入XML文件的相应目录
OUTPUT_XML = "translated_config.xml" # 修改输出XML文件的相应目录
注意:运行代码前先安装lxml和googletrans包---> pip install lxml googletrans==4.0.0-rc1
from lxml import etree
from googletrans import Translator
import time
import os
def translate_text(text, dest_lang='en', max_retries=3):
"""翻译单段文本"""
translator = Translator()
for attempt in range(max_retries):
try:
translation = translator.translate(text, dest=dest_lang)
return translation.text
except Exception as e:
print(f"翻译失败 (尝试 {attempt + 1}/{max_retries}): {e}")
time.sleep(2)
return text # 失败时返回原文
def translate_mcgspro_xml(input_file, output_file):
"""
主翻译函数
:param input_file: 输入XML路径
:param output_file: 输出XML路径
"""
# 解析XML并保留所有格式
parser = etree.XMLParser(remove_blank_text=False, remove_comments=False)
tree = etree.parse(input_file, parser)
root = tree.getroot()
total = len(root.xpath('//中文')) # 统计中文标签数量
processed = 0
# 查找所有中文标签
for chinese_elem in root.xpath('//中文'):
processed += 1
chinese_text = chinese_elem.text if chinese_elem.text else ""
print(f"\r翻译进度: {processed}/{total} | 正在翻译: {chinese_text[:50]}...", end="")
# 获取或创建对应的英文标签
parent = chinese_elem.getparent()
english_elem = parent.find('英语')
if english_elem is None:
# 如果不存在英文标签则创建
english_elem = etree.SubElement(parent, '英语')
# 保持与中文标签相同的位置(插入到中文标签后)
parent.insert(parent.index(chinese_elem) + 1, english_elem)
# 只翻译非空内容且英文标签为空时翻译
if chinese_text.strip() and (not english_elem.text or not english_elem.text.strip()):
translated_text = translate_text(chinese_text)
english_elem.text = translated_text
time.sleep(0.5) # API速率限制
# 完全保留原始格式写出
tree.write(output_file,
encoding='utf-8',
xml_declaration=True,
pretty_print=True,
with_comments=True,
standalone=None)
# 修复XML声明格式
with open(input_file, 'r', encoding='utf-8') as f:
first_line = f.readline().strip()
if first_line.startswith('<?xml'):
with open(output_file, 'r+', encoding='utf-8') as f:
content = f.read()
f.seek(0)
f.write(first_line + '\n' + content.split('\n', 1)[1])
print(f"\n翻译完成!输出文件已保存: {os.path.abspath(output_file)}")
if __name__ == "__main__":
# 配置参数
INPUT_XML = "mcgspro_config.xml" # 修改输入XML文件的相应目录
OUTPUT_XML = "translated_config.xml" # 修改输出XML文件的相应目录
# 检查文件是否存在
if not os.path.exists(INPUT_XML):
print(f"错误: 输入文件 {INPUT_XML} 不存在!")
else:
translate_mcgspro_xml(INPUT_XML, OUTPUT_XML)
# 该Python脚本功能说明:
-
精确标签处理:
-
自动识别XML中的所有
<中文>...</中文>
标签 -
找到或创建对应的
<英语>...</英语>
标签 -
保持标签在父元素中的原始顺序
-
-
格式保留:
-
使用
lxml
库精确控制XML输出格式 -
保留所有缩进、换行和注释
-
自动修复XML声明格式以匹配原文件
-
-
智能翻译:
-
只翻译非空中文内容
-
跳过已翻译的英文标签(避免重复翻译)
-
自动重试失败的翻译请求
-
1.使用方法:
直接从McgsPro 导出要翻译的变量文件(XML):
2.将导出的文件路径进行填写到代码的相应位置:
3. 修改导出的文件名和文件路径:
4.运行Python文件:
- 这边是在VScode上运行的