骑马与砍杀中文站论坛

用户名  找回密码
 注册(Register!)

QQ登录

只需一步,快速开始

帖子
购买CDKEY 衣谷三国
查看: 1334|回复: 5

[原创] 基于deeplx的自动汉化工具

[复制链接]

1

主题

4

回帖

7

积分

平民

Rank: 1

UID
3743874
第纳尔
0
精华
0
互助
1
荣誉
0
贡献
0
魅力
0
注册时间
2025-2-16
鲜花(0) 鸡蛋(0)
发表于 2025-2-16 02:26:46 | 显示全部楼层 |阅读模式
为了自行汉化方便,用python写了一个小工具,可以通过deeplx的本地部署的端口实现自动汉化外网Mod,终于可以自食其力了

翻译效果

翻译效果

源代码

源代码

1

主题

4

回帖

7

积分

平民

Rank: 1

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}")

1

主题

4

回帖

7

积分

平民

Rank: 1

UID
3743874
第纳尔
0
精华
0
互助
1
荣誉
0
贡献
0
魅力
0
注册时间
2025-2-16
鲜花(0) 鸡蛋(0)
 楼主| 发表于 2025-2-16 02:29:00 | 显示全部楼层
需要一定的mod汉化基础,建议看看老玩匠番茄的教材
https://www.bilibili.com/video/BV1xi421Y7dF/?spm_id_from=333.1387.search.video_card.click&vd_source=6c0b303a2dc035a40f89c1e3cc634701

1

主题

4

回帖

7

积分

平民

Rank: 1

UID
3743874
第纳尔
0
精华
0
互助
1
荣誉
0
贡献
0
魅力
0
注册时间
2025-2-16
鲜花(0) 鸡蛋(0)
 楼主| 发表于 2025-2-16 02:32:06 | 显示全部楼层
本帖最后由 无话可说了cc 于 2025-2-16 02:35 编辑

需要下载deeplx本地部署https://github.com/OwO-Network/DeepLX/releases

1

主题

4

回帖

7

积分

平民

Rank: 1

UID
3743874
第纳尔
0
精华
0
互助
1
荣誉
0
贡献
0
魅力
0
注册时间
2025-2-16
鲜花(0) 鸡蛋(0)
 楼主| 发表于 2025-2-16 02:34:12 | 显示全部楼层
本帖最后由 无话可说了cc 于 2025-2-16 02:35 编辑

下载这个红线
QQ20250216-023113.png

0

主题

2

回帖

1

积分

平民

Rank: 1

UID
3682889
第纳尔
0
精华
0
互助
0
荣誉
0
贡献
0
魅力
0
注册时间
2024-7-30
鲜花(0) 鸡蛋(0)
发表于 2025-2-17 11:07:22 来自手机 | 显示全部楼层
厉害了。就是看不懂来自: iPhone客户端
您需要登录后才可以回帖 登录 | 注册(Register!)

本版积分规则

Archiver|手机版|小黑屋|骑马与砍杀中文站

GMT+8, 2025-3-15 06:43 , Processed in 0.104449 second(s), 20 queries , Gzip On, MemCached On.

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表