- 好友
- 0
- 在线时间
- 0 小时
- 最后登录
- 2025-2-16
平民

- UID
- 3743874
- 第纳尔
- 0
- 精华
- 0
- 互助
- 1
- 荣誉
- 0
- 贡献
- 0
- 魅力
- 0
- 注册时间
- 2025-2-16
 鲜花( 0)  鸡蛋( 0)
|

楼主 |
发表于 2025-2-16 02:27:18
|
显示全部楼层
import requests
import html
import os
import xml.etree.ElementTree as ET
DEEPLX_URL = "http://127.0.0.1:1188/translate"
# 定义一个常量作为占位符
PLACEHOLDER = "*"
def translate(text: str, source_lang: str, target_lang: str) -> str:
try:
data = {"text": text, "source_lang": source_lang, "target_lang": target_lang}
response = requests.post(DEEPLX_URL, json=data)
response.raise_for_status() # 如果请求失败,抛出异常
return response.json().get("data", "") # 如果没有找到翻译结果,返回空字符串
except requests.exceptions.RequestException:
return "" # 出现错误时返回空字符串
def replace_brackets(text: str, filler: str) -> tuple:
result = ""
is_in_brackets = False
bracket_contents = [] # 用于存储括号中的内容
current_content = "" # 用于暂时存储当前括号中的内容
for char in text:
if char == "}":
if is_in_brackets:
bracket_contents.append(current_content) # 存储括号中的内容
current_content = "" # 重置当前内容
result += "}"
is_in_brackets = False
elif is_in_brackets:
current_content += char # 在括号内时,保存字符
elif char == "{":
result += "{" + filler
is_in_brackets = True
else:
result += char
return result, bracket_contents # 返回替换后的文本和括号内容的列表
# 读取XML文件
xml_files = list(filter(lambda x: x.endswith(".xml"), os.listdir(".")))
for xml_file in xml_files:
tree = ET.parse(xml_file)
strings = tree.find("strings")
if strings is None:
continue
for string in strings:
# 获取文本并替换掉其中的括号内容
text, bracket_contents = replace_brackets(string.attrib["text"], PLACEHOLDER)
# 翻译文本
text_translated = translate(text, "EN", "ZH")
if not text_translated:
continue # 如果翻译失败,跳过当前文本
# 将括号中的内容插入到翻译后的文本中
for bracket_content in bracket_contents:
# 将翻译后的文本中的占位符替换回原始括号内的内容
text_translated = text_translated.replace(PLACEHOLDER, bracket_content, 1)
# 解码翻译结果中的 HTML 实体
text_translated = html.unescape(text_translated)
# 更新 XML 中的字符串内容
string.attrib["text"] = text_translated
# 保存修改后的 XML 文件(每翻译一条保存一次)
tree.write(xml_file, encoding="utf-8", xml_declaration=True)
# print(f"Found XML files: {xml_files}")
# print(f"id:{count} translated: {text_translated}")
# print(f"Finished processing file: {xml_file}")
|
|