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.pytranslate.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
整个过程同样是全自动的

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐