【授人鱼不如授人渔】c4d汉化插件利用豆包AI一秒汉化,是人都会
c4d汉化插件利用豆包AI汉化,是人都会
把strings_us复制一份为strings_cn,把里面的.str文件内容复制到豆包AI,先叫豆包AI把引号内的英文转为中文,然后叫豆包把中文转为unicode,即可。
------------------------------------------第二种---------------------------------------------------------------
Trae CN 分析代码找到界面语言的标识代码块 > extract_keys.py python提取代码块内容到json文件 > 免费的豆包憨憨帮你坑次坑次的翻译 >replace_mel.py python提取json文件的代码块内容到涉及界面内容的插件文件内>完成汉化>Trae CN 的ai修复逻辑错误
授人鱼不如授人渔,教你如何AI(Trae CN)做汉化—ADV骨骼6.0汉化
-----------------------------------------------------------------------------------------------------------------------------
让maya能python开发
site-packages释放路径 D:\Program Files\Autodesk\Maya2018\Python\Lib\site-packages
前提准备
安装 Python:如果你的电脑没有安装 Python,可以从 python.org 下载并安装。建议选择 3.8 或更高版本。
安装依赖库:我们需要 requests 库来调用翻译 API。
打开你的终端(或命令行),运行以下命令:
bash
pip install requests
依赖项 certifi chardet idna urllib3
脚本 1:提取英文(extract_keys.py)
extract_keys_py2.8_maya2018.py
# -*- coding: utf-8 -*-
import re
import json
import os
import codecs # 导入 codecs 模块来处理编码
# --- 配置 ---
MEL_FILE_PATH = 'AdvancedSkeleton.mel' # 你的 .mel 文件路径
EN_JSON_PATH = 'src/i18n/en.json' # 输出的英文 JSON 文件路径
def extract_keys():
"""从 .mel 文件中提取英文文本并生成 en.json"""
print("--- 开始提取翻译键 ---")
try:
# 使用 codecs.open 并指定编码
with codecs.open(MEL_FILE_PATH, 'r', 'GBK') as f:
mel_content = f.read()
print("成功读取 .mel 文件: {}".format(MEL_FILE_PATH))
# 使用正则表达式查找所有 -l "..." 模式
matches = re.findall(r'-l\s+(["\'])(.*?)\1', mel_content)
# 去重并创建 { "key": "value" } 结构
unique_keys = list({match[1] for match in matches})
en_data = {key: key for key in unique_keys}
# 使用 codecs.open 写入文件,并指定编码
with codecs.open(EN_JSON_PATH, 'w', 'utf-8') as f:
json.dump(en_data, f, ensure_ascii=False, indent=2)
print("成功提取 {} 个英文短语,已保存到 {}".format(len(unique_keys), EN_JSON_PATH))
except IOError as e:
print("文件操作错误: {}".format(e))
print("请检查文件路径 '{}' 是否正确,以及是否有读写权限。".format(MEL_FILE_PATH))
except Exception as e:
print("发生未知错误: {}".format(e))
if __name__ == "__main__":
extract_keys()
extract_keys_py3.6_maya2020.py
# -*- coding: utf-8 -*-
import re
import json
import os
# --- 配置 ---
MEL_FILE_PATH = 'AdvancedSkeleton.mel' # 你的 .mel 文件路径
EN_JSON_PATH = 'src/i18n/en.json' # 输出的英文 JSON 文件路径
def extract_keys():
"""从 .mel 文件中提取英文文本并生成 en.json"""
# 确保输出目录存在
os.makedirs(os.path.dirname(EN_JSON_PATH), exist_ok=True)
try:
# 读取 .mel 文件内容
with open(MEL_FILE_PATH, 'r', encoding='GBK') as f:
mel_content = f.read()
# 使用正则表达式查找所有 -l "..." 模式
# 捕获组 `(["'])` 用于匹配单引号或双引号,`(.*?)` 非贪婪匹配内容
matches = re.findall(r'-l\s+(["\'])(.*?)\1', mel_content)
# 去重并创建 { "key": "value" } 结构
unique_keys = list({match[1] for match in matches})
en_data = {key: key for key in unique_keys}
# 写入 en.json 文件
with open(EN_JSON_PATH, 'w', encoding='utf-8') as f:
json.dump(en_data, f, ensure_ascii=False, indent=2)
print(f" 成功提取 {len(unique_keys)} 个英文短语,已保存到 {EN_JSON_PATH}")
except FileNotFoundError:
print(f" 错误:找不到文件 {MEL_FILE_PATH}")
except Exception as e:
print(f" 发生错误:{e}")
if __name__ == "__main__":
extract_keys()
这个脚本会扫描指定的 .mel 文件,提取所有 -l "..." 中的英文,并保存到 src/i18n/en.json 文件中。
运行方式:在终端中执行 "D:\Program Files\Autodesk\Maya2018\bin\python.exe" extract_keys.py。
脚本 2:批量翻译(translate.py)
translate_py2.8_maya2018.py
# -*- coding: utf-8 -*-
import sys
import os
# --- 1. 立即添加库路径 ---
maya_python_path = r"D:\Program Files\Autodesk\Maya2018\Python\Lib\site-packages"
if os.path.exists(maya_python_path) and maya_python_path not in sys.path:
sys.path.append(maya_python_path)
print("[INFO] Successfully added library path: " + maya_python_path)
else:
print("[INFO] Library path does not exist or is already in sys.path: " + maya_python_path)
# --- 2. 解决 Python 2.7 中文/乱码打印崩溃问题 ---
reload(sys)
sys.setdefaultencoding('utf-8')
# --- 3. 导入所需库 ---
import json
import hashlib
import time
import requests
import codecs
# --- 安全打印函数 (最终版) ---
def safe_print(s):
try:
print(s.encode('utf-8') if isinstance(s, unicode) else s)
except UnicodeEncodeError:
print(s.encode('utf-8', 'ignore') if isinstance(s, unicode) else str(s).encode('utf-8', 'ignore'))
except Exception as e:
print("Print error: " + str(e))
# --- 4. 配置 (替换为你的有效密钥) ---
APP_ID = '你的APP_ID'
SECRET_KEY = '你的API-key' # 即 API Key
EN_JSON_PATH = 'src/i18n/en.json'
ZH_JSON_PATH = 'src/i18n/zh-CN.json'
API_URL = 'https://fanyi-api.baidu.com/api/trans/vip/translate'
def translate_text(q, from_lang='en', to_lang='zh'):
if not q or not q.strip():
safe_print(" [Skip] Empty text.")
return q
salt = str(int(time.time() * 1000))
sign_str = APP_ID + q + salt + SECRET_KEY
sign = hashlib.md5(sign_str).hexdigest()
params = {
'q': q.encode('utf-8') if isinstance(q, unicode) else q,
'from': from_lang,
'to': to_lang,
'appid': APP_ID,
'salt': salt,
'sign': sign
}
try:
response = requests.get(API_URL, params=params, timeout=15)
result = response.json()
if 'trans_result' in result:
return result['trans_result'][0]['dst']
else:
error_msg = result.get('error_msg', 'Unknown error')
safe_print(u" [Error] Translation failed for '{}': {}".format(q, error_msg))
return q
except requests.exceptions.RequestException as e:
safe_print(u" [Error] Request to API failed for '{}': {}".format(q, e))
return q
except Exception as e:
safe_print(u" [Error] Unexpected error during translation of '{}': {}".format(q, e))
return q
def batch_translate():
if not os.path.exists(EN_JSON_PATH):
safe_print("Error: File not found - " + EN_JSON_PATH)
safe_print(" Please run extract_keys.py first to generate it.")
return
if not APP_ID or not SECRET_KEY:
safe_print("Error: APP_ID or SECRET_KEY is not set!")
return
safe_print("--- Starting translation process ---")
safe_print("Source file: " + EN_JSON_PATH)
try:
with codecs.open(EN_JSON_PATH, 'r', 'utf-8') as f:
en_data = json.load(f)
except Exception as e:
safe_print("Error: Failed to load " + EN_JSON_PATH + ": " + str(e))
return
zh_data = {}
total = len(en_data)
safe_print("Found {} entries to translate.\n".format(total))
for i, (key, value) in enumerate(en_data.items(), 1):
safe_print("[{}/{}] Translating: {}".format(i, total, value))
zh_data[key] = translate_text(value)
time.sleep(0.1)
try:
with codecs.open(ZH_JSON_PATH, 'w', 'utf-8') as f:
json.dump(zh_data, f, ensure_ascii=False, indent=2)
safe_print("\n--- Translation completed successfully! ---")
safe_print("Result saved to: " + ZH_JSON_PATH)
except Exception as e:
safe_print("\nError: Failed to save " + ZH_JSON_PATH + ": " + str(e))
if __name__ == "__main__":
batch_translate()
translate_py3.6_maya2020.py
# -*- coding: utf-8 -*-
import json
import hashlib
import time
import requests
import os
# --- 配置 ---
APP_ID = '你的APP_ID'
SECRET_KEY = '你的API-key' # 即 API Key
EN_JSON_PATH = 'src/i18n/en.json'
ZH_JSON_PATH = 'src/i18n/zh-CN.json'
API_URL = 'https://fanyi-api.baidu.com/api/trans/vip/translate'
def translate_text(q, from_lang='en', to_lang='zh'):
"""调用百度翻译API翻译单条文本"""
salt = str(int(time.time()))
sign = hashlib.md5((APP_ID + q + salt + SECRET_KEY).encode('utf-8')).hexdigest()
params = {
'q': q,
'from': from_lang,
'to': to_lang,
'appid': APP_ID,
'salt': salt,
'sign': sign
}
try:
response = requests.get(API_URL, params=params, timeout=10)
result = response.json()
if 'trans_result' in result:
return result['trans_result'][0]['dst']
else:
print(f" 翻译失败 for '{q}': {result.get('error_msg', 'Unknown error')}")
return q # 如果翻译失败,返回原文
except requests.exceptions.RequestException as e:
print(f" 请求API失败 for '{q}': {e}")
return q
def batch_translate():
"""批量翻译 en.json 并生成 zh-CN.json"""
if not os.path.exists(EN_JSON_PATH):
print(f" 错误:请先运行 extract_keys.py 生成 {EN_JSON_PATH}")
return
if not APP_ID or not SECRET_KEY:
print(" 错误:请在脚本中配置你的 APP_ID 和 SECRET_KEY")
return
print(f"开始翻译 {EN_JSON_PATH}...")
with open(EN_JSON_PATH, 'r', encoding='utf-8') as f:
en_data = json.load(f)
zh_data = {}
total = len(en_data)
for i, (key, value) in enumerate(en_data.items(), 1):
print(f"[{i}/{total}] Translating: {value}")
zh_data[key] = translate_text(value)
# 友好请求,避免过快调用API
time.sleep(0.1)
with open(ZH_JSON_PATH, 'w', encoding='utf-8') as f:
json.dump(zh_data, f, ensure_ascii=False, indent=2)
print(f"\n 翻译完成!已保存到 {ZH_JSON_PATH}")
if __name__ == "__main__":
batch_translate()
这个脚本会读取 en.json,调用百度翻译 API 将英文翻译成中文,并保存到 src/i18n/zh-CN.json。
运行方式:在终端中执行 python translate.py。
脚本 3:替换回 .mel 文件(replace_mel.py)
replace_mel_py2.8_maya2018.py
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import re
import json
import os
import io
# --- 配置 ---
MEL_FILE_PATH = 'AdvancedSkeleton.mel' # 你的 .mel 文件路径
ZH_JSON_PATH = 'src/i18n/zh-CN.json' # 中文翻译文件路径
def replace_in_mel():
"""用 zh-CN.json 中的翻译替换 .mel 文件里的文本"""
if not os.path.exists(ZH_JSON_PATH):
print(" 错误:请先运行 translate.py 生成 {}".format(ZH_JSON_PATH))
return
print("Loading translations from {}...".format(ZH_JSON_PATH))
with io.open(ZH_JSON_PATH, 'r', encoding='utf-8') as f:
zh_data = json.load(f)
print("Reading .mel file: {}...".format(MEL_FILE_PATH))
try:
# 首先尝试UTF-8编码
with io.open(MEL_FILE_PATH, 'r', encoding='utf-8') as f:
mel_content = f.read()
except UnicodeDecodeError:
try:
# 如果UTF-8失败,尝试GBK编码(中文Windows常用)
with io.open(MEL_FILE_PATH, 'r', encoding='gbk') as f:
mel_content = f.read()
except UnicodeDecodeError:
# 如果都失败,使用latin-1编码(可以读取任何字节)
with io.open(MEL_FILE_PATH, 'r', encoding='latin-1') as f:
mel_content = f.read()
# 为了确保最长的键最先被替换,避免部分匹配(例如 "Apple" 和 "Apple Pie")
sorted_keys = sorted(zh_data.keys(), key=len, reverse=True)
total_replacements = 0
for english in sorted_keys:
chinese = zh_data[english]
# 使用简单的字符串替换,避免复杂的正则表达式
count = 0
# 构建搜索和替换字符串
search_dbl = u'-l "{}"'.format(english)
search_sgl = u"-l '{}'".format(english)
replace_dbl = u'-l "{}"'.format(chinese)
replace_sgl = u"-l '{}'".format(chinese)
# 计算匹配次数
count += mel_content.count(search_dbl)
count += mel_content.count(search_sgl)
if count > 0:
# 替换双引号和单引号的情况
mel_content = mel_content.replace(search_dbl, replace_dbl)
mel_content = mel_content.replace(search_sgl, replace_sgl)
total_replacements += count
print("Replaced '{}' with '{}' ({} times)".format(english, chinese, count))
print("\nTotal replacements made: {}".format(total_replacements))
# 写入修改后的内容
try:
# 尝试用UTF-8编码写入
with io.open(MEL_FILE_PATH, 'w', encoding='utf-8') as f:
f.write(mel_content)
except UnicodeEncodeError:
# 如果UTF-8编码失败,使用GBK编码
with io.open(MEL_FILE_PATH, 'w', encoding='gbk') as f:
f.write(mel_content)
print(" 替换完成!{} 已更新。".format(MEL_FILE_PATH))
if __name__ == "__main__":
replace_in_mel()
replace_mel_py3.6_maya2020.py
# -*- coding: utf-8 -*-
import re
import json
import os
# --- 配置 ---
MEL_FILE_PATH = '../AdvancedSkeleton.mel' # 你的 .mel 文件路径
ZH_JSON_PATH = 'src/i18n/zh-CN.json' # 中文翻译文件路径
def replace_in_mel():
"""用 zh-CN.json 中的翻译替换 .mel 文件里的文本"""
if not os.path.exists(ZH_JSON_PATH):
print(f" 错误:请先运行 translate.py 生成 {ZH_JSON_PATH}")
return
print(f"Loading translations from {ZH_JSON_PATH}...")
with open(ZH_JSON_PATH, 'r', encoding='utf-8') as f:
zh_data = json.load(f)
print(f"Reading .mel file: {MEL_FILE_PATH}...")
with open(MEL_FILE_PATH, 'r', encoding='utf-8') as f:
mel_content = f.read()
# 为了确保最长的键最先被替换,避免部分匹配(例如 "Apple" 和 "Apple Pie")
sorted_keys = sorted(zh_data.keys(), key=len, reverse=True)
total_replacements = 0
for english in sorted_keys:
chinese = zh_data[english]
# 使用正则进行精确替换,注意转义英文中的特殊字符
pattern = re.compile(rf'-l\s+(["\']){re.escape(english)}\1')
# 替换所有匹配项
new_content, count = pattern.subn(rf'-l \1{chinese}\1', mel_content)
if count > 0:
mel_content = new_content
total_replacements += count
print(f"Replaced '{english}' with '{chinese}' ({count} times)")
print(f"\nTotal replacements made: {total_replacements}")
# 写入修改后的内容
with open(MEL_FILE_PATH, 'w', encoding='utf-8') as f:
f.write(mel_content)
print(f" 替换完成!{MEL_FILE_PATH} 已更新。")
if __name__ == "__main__":
replace_in_mel()
这个脚本会读取 zh-CN.json 中的中文翻译,然后批量替换 .mel 文件中的原始英文。
运行方式:在终端中执行 python replace_mel.py。
注意:你需要先去 百度翻译,火山翻译等开放平台 注册一个账号,创建一个应用,获取你的 APP_ID 和 SECRET_KEY。
如何使用这三个脚本
将上述三个代码块分别保存为 extract_keys.py、translate.py 和 replace_mel.py,并放置在你的项目根目录下。
修改配置:打开每个文件,将顶部 --- 配置 --- 部分的路径修改为你自己的文件路径。特别是在 translate.py 中,务必填入你的百度翻译 API 密钥。
按顺序运行:
依次运行
"C:\Program Files\Autodesk\Maya2018\bin\python.exe" extract_keys_py2.8_maya2018.py
"C:\Program Files\Autodesk\Maya2018\bin\python.exe" translate_py2.8_maya2018.py
"C:\Program Files\Autodesk\Maya2018\bin\python.exe" replace_mel_py2.8_maya2018.py
整个过程同样是全自动的
更多推荐


所有评论(0)