大家好,我是专注于分享实用开发技巧的技术博主。在日常开发或使用各类软件、工具时,我们经常会遇到需要汉化 JSON 配置文件、语言包或插件的情况。传统的汉化工具(如一些自动化脚本或早期工具)往往依赖简单的机器翻译,导致译文生硬、词不达意,甚至出现“垃圾机翻”,严重影响使用体验和开发效率。
本文将为你彻底解决这个问题。我们将深入探讨如何利用当前先进的 AI 大模型能力,实现高质量、高准确度的 JSON 文件汉化。整个过程完全免费,无需依赖任何付费 API 或商业软件,你可以完全掌控汉化流程与质量。无论你是需要汉化一个前端项目的i18n语言包、一个软件的用户界面配置,还是一个游戏模组的描述文件,这套方法都能帮你获得媲美人工校对的专业级译文。
接下来,我将从核心概念讲起,逐步拆解实现原理,并提供从环境准备、代码编写到批量处理的完整实战方案。同时,也会分享提升翻译质量的独家提示词技巧和常见问题排查方法。让我们告别“垃圾机翻”,拥抱 AI 赋能的高效汉化。
1. 背景与核心概念:为什么需要 AI 汉化 JSON?
在深入技术细节之前,我们有必要厘清几个关键概念,并理解传统方法的弊端。
1.1 什么是 JSON 汉化?
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛应用于配置文件、语言包和 API 响应中。所谓“JSON 汉化”,特指将 JSON 文件中某些特定字段的值(通常是字符串类型),从一种语言(如英语、日语)转换为中文的过程。
一个典型的待汉化 JSON 片段可能长这样:
{ "app": { "name": "Awesome Tool", "description": "A powerful utility for developers.", "menu": { "file": "File", "edit": "Edit", "help": "Help" } } }汉化的目标是将"name"、"description"、"file"等键对应的英文值,转换为符合中文语境和软件术语习惯的译文。
1.2 传统机翻工具(如 Mtool 类工具)的痛点
许多开发者曾使用过一些自动化汉化工具或脚本,它们通常存在以下问题:
- 翻译生硬,脱离上下文:单纯进行逐词或逐句翻译,无法理解字段所在的上下文环境。例如,将菜单中的
“File”翻译为“文件”是正确的,但若是一个游戏技能描述中的“File”(意为“列队”),翻译成“文件”就闹了笑话。 - 术语不统一:同一个英文术语在软件不同位置出现时,可能被翻译成不同的中文词,导致用户困惑。
- 破坏 JSON 结构:一些粗糙的工具可能无法正确处理 JSON 中的转义字符(如
\n,\")、嵌套结构或非字符串值(数字、布尔值),导致文件格式损坏,无法被程序解析。 - 无法处理占位符:开发中常用占位符如
{0}、%s、{{name}}。低质量机翻可能会翻译这些占位符本身,或者打乱它们的顺序,导致程序运行时替换出错。
1.3 AI 大模型汉化的优势
以 OpenAI GPT、DeepSeek、通义千问等为代表的大语言模型,为 JSON 汉化带来了革命性的提升:
- 理解上下文:AI 可以通读整个 JSON 结构,理解每个字段所处的“场景”。例如,它能区分
“key”是“钥匙”还是“按键”。 - 专业术语一致性:通过合理的提示词(Prompt)引导,AI 可以记住并统一整个文件中的特定术语翻译。
- 保持格式与占位符:AI 能严格遵循指令,不修改 JSON 的键(key)、结构、数字、布尔值以及字符串中的占位符和特殊符号。
- 译文更自然:生成的译文更符合中文表达习惯,读起来流畅自然。
我们的目标就是利用这些 AI 模型的零样本或少样本学习能力,构建一个免费、自动化、高质量的汉化流水线。
2. 环境准备与核心工具选择
实现免费 AI 汉化的核心在于:选择一个免费的 AI 模型 API,以及编写一个能与之交互并处理 JSON 文件的脚本。这里我们提供两种主流且完全免费的方案。
2.1 方案一:使用 DeepSeek API(推荐)
DeepSeek 提供了免费且强大的 API,非常适合本项目。
- 注册与获取 API Key:
- 访问 DeepSeek 开放平台官网并注册账号。
- 在控制台中创建 API Key,并妥善保存。免费额度通常足够个人进行大量汉化工作。
- 本地 Python 环境:
- Python 版本:建议使用 Python 3.8 及以上版本。
- 必要库:我们需要
requests库来调用 API,json库来处理数据,tqdm库(可选)来显示进度。 - 安装命令:
pip install requests tqdm
2.2 方案二:使用 Ollama 本地模型(完全离线,数据安全)
如果你对数据隐私要求极高,或没有网络环境,可以在本地部署开源模型。
- 安装 Ollama:前往 Ollama 官网,下载并安装对应操作系统的版本。
- 拉取模型:Ollama 安装后,在终端运行命令拉取一个适合的中英翻译模型,例如
qwen2.5:7b(7B参数版本在翻译任务上表现良好,对硬件要求相对友好)。ollama pull qwen2.5:7b - Python 环境:同样需要 Python 环境,并安装
requests库(用于调用 Ollama 的本地 API)。
版本说明:本文的代码示例将主要围绕DeepSeek API方案展开,因为其准备最简单,效果稳定。对于 Ollama 方案,我会在相应部分指出调用的区别。所有代码在常见操作系统(Windows, macOS, Linux)上均可运行。
2.3 项目结构规划
在开始编码前,我们先规划好项目目录,使其清晰易懂:
ai_json_translator/ ├── config.py # 配置文件,存放API密钥等 ├── translator.py # 核心翻译器类 ├── main.py # 主程序入口 ├── input.json # 待翻译的原始JSON文件 ├── output.json # 翻译后输出的JSON文件 ├── requirements.txt # 项目依赖列表 └── README.md # 项目说明3. 核心原理与实现拆解
我们的汉化程序核心工作流程可以概括为:“读取 -> 提取 -> 翻译 -> 回填 -> 保存”。下面我们分步拆解其中的关键技术点。
3.1 递归遍历提取所有字符串值
JSON 结构可能是多层嵌套的。我们需要一个函数,能够遍历整个 JSON 对象(字典或列表),找出所有需要翻译的字符串值(str类型),同时记住它的“路径”,以便翻译后能准确放回原处。
关键点:
- 跳过 JSON 的键(key)。通常键是程序识别的标识符,不应被翻译。
- 跳过非字符串的值,如数字、布尔值
true/false、null。 - 需要处理嵌套的字典和列表。
3.2 设计高效的 AI 翻译提示词(Prompt)
这是决定翻译质量的核心。一个好的 Prompt 需要明确告诉 AI:
- 任务:你是一个专业的技术文档/软件界面翻译助手。
- 输入与输出格式:输入是一段 JSON 数据,输出是翻译成中文的 JSON,保持原结构。
- 翻译规则:
- 只翻译字符串值,不翻译键名。
- 保持术语一致(例如,全文的
“User”都译为“用户”)。 - 保留所有数字、布尔值、
null和 JSON 格式。 - 严格保留字符串中的代码、变量、占位符(如
{name}、%s、\n)及其顺序。 - 译文需符合中文软件用语习惯,简洁准确。
- 示例(Few-shot Learning):提供一两个简单的例子,让 AI 更好地理解格式。
3.3 处理长文本与 API 限制
AI API 通常有上下文长度(Token)限制。一个大型的 JSON 文件可能包含成千上万个字符串,无法一次性发送。策略:我们将需要翻译的字符串列表进行分块(Chunking),每次发送一个合理大小的块给 AI 进行批量翻译,然后汇总结果。
3.4 翻译结果回填与校验
收到 AI 返回的翻译后,我们需要根据之前记录的“路径”,将翻译好的字符串逐一写回原始的 JSON 数据结构中。最后,将完整的、翻译后的 JSON 对象保存为新的文件。保存前最好进行一次 JSON 格式校验,确保生成的文件是有效的。
4. 完整实战:构建免费 AI JSON 汉化工具
现在,我们将把上述原理转化为可运行的代码。请跟随步骤一步步操作。
4.1 创建项目与安装依赖
首先,创建项目目录并初始化环境。
# 创建项目文件夹 mkdir ai_json_translator cd ai_json_translator # 创建虚拟环境(可选但推荐) python -m venv venv # Windows 激活: venv\Scripts\activate # macOS/Linux 激活: source venv/bin/activate # 安装依赖 pip install requests tqdm创建requirements.txt文件:
requests>=2.28.0 tqdm>=4.64.04.2 编写配置文件
创建config.py,用于管理敏感信息和配置。请务必将此文件加入.gitignore,不要提交到公开仓库。
# config.py # DeepSeek API 配置 DEEPSEEK_API_KEY = "your_deepseek_api_key_here" # 请替换为你的真实 API Key DEEPSEEK_API_URL = "https://api.deepseek.com/v1/chat/completions" DEEPSEEK_MODEL = "deepseek-chat" # 或其他你拥有的模型 # 翻译配置 TRANSLATION_PROMPT = """ 你是一个专业的软件本地化翻译专家。请将以下 JSON 数据中的字符串值(value)从英文翻译成简体中文。 请严格遵守以下规则: 1. 只翻译字符串类型的值,不要翻译键名(key)。 2. 保持术语一致性。例如,如果“User”被翻译为“用户”,那么全文都应保持一致。 3. 保留所有 JSON 格式、数字、布尔值(true/false)、null。 4. 严格保留字符串中的所有占位符(如 {0}, {name}, %s, %d)、换行符(\\n)、HTML标签(如 <br>, <color=red>)及其原始顺序和格式,不要翻译或修改它们。 5. 译文应准确、流畅,符合中文软件界面和文档的用语习惯。 以下是需要你翻译的 JSON 数据: {text} 请直接返回翻译后的完整 JSON,不要添加任何额外的解释。 """ # Ollama 配置(备用) OLLAMA_API_URL = "http://localhost:11434/api/generate" OLLAMA_MODEL = "qwen2.5:7b" # 性能配置 MAX_TOKENS_PER_REQUEST = 2000 # 根据模型上下文窗口调整,预留空间 TRANSLATION_TIMEOUT = 30 # 请求超时时间(秒)4.3 实现核心翻译器类
创建translator.py,这是我们工具的心脏。
# translator.py import json import time from typing import Any, Dict, List, Tuple import requests from tqdm import tqdm from config import DEEPSEEK_API_KEY, DEEPSEEK_API_URL, DEEPSEEK_MODEL, TRANSLATION_PROMPT, MAX_TOKENS_PER_REQUEST, TRANSLATION_TIMEOUT, OLLAMA_API_URL, OLLAMA_MODEL class JsonTranslator: def __init__(self, use_ollama=False): """ 初始化翻译器 :param use_ollama: 如果为 True,则使用本地 Ollama,否则使用 DeepSeek API """ self.use_ollama = use_ollama self.session = requests.Session() if not use_ollama: self.session.headers.update({ "Authorization": f"Bearer {DEEPSEEK_API_KEY}", "Content-Type": "application/json" }) def _extract_strings_with_path(self, data: Any, path: str = "") -> List[Tuple[str, str]]: """ 递归提取 JSON 中所有字符串值及其路径 :param data: 当前处理的 JSON 数据节点 :param path: 当前节点的路径表示,用于定位 :return: 列表,每个元素是 (路径, 字符串值) """ strings = [] if isinstance(data, dict): for key, value in data.items(): # 构建新路径,例如 “app.name” new_path = f"{path}.{key}" if path else key strings.extend(self._extract_strings_with_path(value, new_path)) elif isinstance(data, list): for idx, item in enumerate(data): new_path = f"{path}[{idx}]" strings.extend(self._extract_strings_with_path(item, new_path)) elif isinstance(data, str): # 只收集非空的字符串 if data.strip(): strings.append((path, data)) # 其他类型(int, float, bool, None)跳过 return strings def _chunk_strings(self, strings: List[Tuple[str, str]]) -> List[List[Tuple[str, str]]]: """ 将待翻译的字符串列表分块,以适应 API 的 Token 限制。 这里采用简单的按字符数估算,更精确的做法可以调用 tokenizer。 """ chunks = [] current_chunk = [] current_chunk_size = 0 for path, text in strings: text_size = len(text) # 如果当前块已满或加上新文本会超限,则开启新块 if current_chunk and (current_chunk_size + text_size > MAX_TOKENS_PER_REQUEST): chunks.append(current_chunk) current_chunk = [] current_chunk_size = 0 current_chunk.append((path, text)) current_chunk_size += text_size if current_chunk: chunks.append(current_chunk) return chunks def _translate_chunk_deepseek(self, chunk: List[Tuple[str, str]]) -> Dict[str, str]: """使用 DeepSeek API 翻译一个字符串块""" # 构建一个临时的迷你 JSON 用于发送,键为路径,值为原文 temp_json = {path: text for path, text in chunk} prompt = TRANSLATION_PROMPT.format(text=json.dumps(temp_json, ensure_ascii=False, indent=2)) payload = { "model": DEEPSEEK_MODEL, "messages": [ {"role": "system", "content": "你是一个专业的翻译助手。"}, {"role": "user", "content": prompt} ], "temperature": 0.1, # 低温度保证输出稳定,减少随机性 "max_tokens": 4000 } try: response = self.session.post(DEEPSEEK_API_URL, json=payload, timeout=TRANSLATION_TIMEOUT) response.raise_for_status() result = response.json() translated_content = result["choices"][0]["message"]["content"].strip() # 尝试解析返回的 JSON # AI 有时会在返回内容外加 ```json ``` 标记,需要处理 if translated_content.startswith("```json"): translated_content = translated_content[7:] # 去掉 ```json if translated_content.endswith("```"): translated_content = translated_content[:-3] translated_content = translated_content.strip() translated_dict = json.loads(translated_content) return translated_dict except json.JSONDecodeError as e: print(f"解析 AI 返回的 JSON 失败: {e}") print(f"AI 返回的内容是:\n{translated_content}") # 应急处理:如果解析失败,返回一个空字典,这个块的翻译将失败 return {} except requests.exceptions.RequestException as e: print(f"API 请求失败: {e}") return {} def _translate_chunk_ollama(self, chunk: List[Tuple[str, str]]) -> Dict[str, str]: """使用本地 Ollama API 翻译一个字符串块""" temp_json = {path: text for path, text in chunk} prompt = TRANSLATION_PROMPT.format(text=json.dumps(temp_json, ensure_ascii=False, indent=2)) payload = { "model": OLLAMA_MODEL, "prompt": prompt, "stream": False, "options": { "temperature": 0.1 } } try: response = self.session.post(OLLAMA_API_URL, json=payload, timeout=TRANSLATION_TIMEOUT*2) # Ollama可能慢一些 response.raise_for_status() result = response.json() translated_content = result["response"].strip() # 清理可能的标记 if translated_content.startswith("```json"): translated_content = translated_content[7:] if translated_content.endswith("```"): translated_content = translated_content[:-3] translated_content = translated_content.strip() translated_dict = json.loads(translated_content) return translated_dict except (json.JSONDecodeError, KeyError) as e: print(f"解析 Ollama 返回的 JSON 失败: {e}") print(f"Ollama 返回的内容是:\n{translated_content}") return {} except requests.exceptions.RequestException as e: print(f"Ollama API 请求失败: {e}") return {} def _update_json_with_translations(self, data: Any, translations: Dict[str, str]): """ 根据翻译字典,将译文写回原始 JSON 数据结构 :param data: 原始的 JSON 数据(字典或列表) :param translations: 路径到译文的映射字典 """ # 这是一个递归辅助函数 def _update(node, path_prefix=""): if isinstance(node, dict): for key, value in node.items(): current_path = f"{path_prefix}.{key}" if path_prefix else key if isinstance(value, str) and value.strip(): # 如果当前路径的字符串在翻译字典中,则替换 if current_path in translations: node[key] = translations[current_path] else: # 递归处理子对象 _update(value, current_path) elif isinstance(node, list): for idx, item in enumerate(node): current_path = f"{path_prefix}[{idx}]" if isinstance(item, str) and item.strip(): if current_path in translations: node[idx] = translations[current_path] else: _update(item, current_path) _update(data) return data def translate_file(self, input_filepath: str, output_filepath: str): """ 主翻译函数:读取 JSON 文件,翻译,并保存结果。 """ print(f"开始处理文件: {input_filepath}") # 1. 读取原始 JSON with open(input_filepath, 'r', encoding='utf-8') as f: original_data = json.load(f) # 2. 提取所有需要翻译的字符串及其路径 print("正在提取待翻译文本...") strings_to_translate = self._extract_strings_with_path(original_data) if not strings_to_translate: print("未找到需要翻译的字符串。") with open(output_filepath, 'w', encoding='utf-8') as f: json.dump(original_data, f, ensure_ascii=False, indent=2) return print(f"共找到 {len(strings_to_translate)} 处需要翻译的文本。") # 3. 分块 chunks = self._chunk_strings(strings_to_translate) print(f"文本已分为 {len(chunks)} 个块进行翻译。") # 4. 逐块翻译 all_translations = {} with tqdm(total=len(chunks), desc="翻译进度") as pbar: for chunk in chunks: if self.use_ollama: translated_dict = self._translate_chunk_ollama(chunk) else: translated_dict = self._translate_chunk_deepseek(chunk) # 合并翻译结果 all_translations.update(translated_dict) pbar.update(1) time.sleep(0.5) # 简单限流,避免请求过快 print(f"成功获取 {len(all_translations)} 条翻译结果。") # 5. 将翻译写回原数据 translated_data = self._update_json_with_translations(original_data, all_translations) # 6. 保存翻译后的 JSON with open(output_filepath, 'w', encoding='utf-8') as f: json.dump(translated_data, f, ensure_ascii=False, indent=2) print(f"翻译完成!结果已保存至: {output_filepath}")4.4 编写主程序入口
创建main.py,作为程序的启动脚本。
# main.py import argparse from translator import JsonTranslator def main(): parser = argparse.ArgumentParser(description='免费 AI JSON 汉化工具') parser.add_argument('input', help='输入的 JSON 文件路径') parser.add_argument('-o', '--output', help='输出的 JSON 文件路径(可选,默认为 input_translated.json)') parser.add_argument('--ollama', action='store_true', help='使用本地 Ollama 代替 DeepSeek API') args = parser.parse_args() input_file = args.input if args.output: output_file = args.output else: # 默认在输入文件名后加 _translated import os base, ext = os.path.splitext(input_file) output_file = f"{base}_translated{ext}" # 初始化翻译器 translator = JsonTranslator(use_ollama=args.ollama) # 开始翻译 translator.translate_file(input_file, output_file) if __name__ == "__main__": main()4.5 准备测试文件并运行
在项目根目录下创建一个input.json文件作为测试。
{ "app": { "name": "Awesome Tool", "description": "A powerful utility for developers to manage their projects efficiently.", "version": "1.0.0", "settings": { "theme": "Dark", "language": "English", "autoSave": true } }, "menu": { "file": { "new": "New Project", "open": "Open...", "save": "Save", "saveAs": "Save As...", "exit": "Exit" }, "edit": { "undo": "Undo", "redo": "Redo", "cut": "Cut", "copy": "Copy", "paste": "Paste" }, "help": { "documentation": "Documentation", "checkForUpdates": "Check for Updates", "about": "About {appName}" } }, "messages": { "welcome": "Hello, {user}! Welcome back.", "saveSuccess": "File '{fileName}' saved successfully.", "confirmExit": "Are you sure you want to exit? Any unsaved changes will be lost." } }运行程序(使用 DeepSeek API):
- 确保已在
config.py中填写正确的DEEPSEEK_API_KEY。 - 在终端中执行:
程序会自动生成python main.py input.jsoninput_translated.json文件。
运行程序(使用 Ollama):
- 确保 Ollama 服务已启动(通常安装后会自动运行)。
- 在终端中执行:
python main.py input.json --ollama
4.6 查看翻译结果
打开生成的input_translated.json文件,你应该能看到类似以下的高质量译文:
{ "app": { "name": "Awesome Tool", "description": "一款供开发者高效管理项目的强大工具。", "version": "1.0.0", "settings": { "theme": "深色", "language": "English", "autoSave": true } }, "menu": { "file": { "new": "新建项目", "open": "打开...", "save": "保存", "saveAs": "另存为...", "exit": "退出" }, "edit": { "undo": "撤销", "redo": "重做", "cut": "剪切", "copy": "复制", "paste": "粘贴" }, "help": { "documentation": "文档", "checkForUpdates": "检查更新", "about": "关于 {appName}" } }, "messages": { "welcome": "你好,{user}!欢迎回来。", "saveSuccess": "文件“{fileName}”保存成功。", "confirmExit": "确定要退出吗?所有未保存的更改将会丢失。" } }请注意:
- 键(如
"app","name","version")没有被翻译。 - 占位符
{appName},{user},{fileName}被完整保留。 - 布尔值
true和数字"1.0.0"保持不变。 - 译文符合软件界面用语习惯(如“新建项目”、“另存为”、“撤销”)。
5. 常见问题与排查思路
在实际使用中,你可能会遇到一些问题。以下是常见问题的排查指南。
| 问题现象 | 可能原因 | 解决思路 |
|---|---|---|
ModuleNotFoundError: No module named ‘requests’ | 未安装依赖库。 | 在项目目录下运行pip install -r requirements.txt。 |
401 Client Error: Unauthorized | API Key 错误或未设置。 | 1. 检查config.py中的DEEPSEEK_API_KEY是否正确。2. 确认 API Key 是否有余额或权限。 |
json.decoder.JSONDecodeError | 1. 输入的input.json文件格式错误。2. AI 返回的内容不是合法 JSON。 | 1. 使用在线 JSON 校验工具检查input.json。2. 查看程序打印的 AI 返回内容,调整 TRANSLATION_PROMPT,使其更明确地要求返回纯 JSON。可以在 Prompt 开头强调“请直接返回一个 JSON 对象,不要有任何额外文本。” |
| 翻译结果缺失或部分未翻译 | 1. 字符串路径在翻译后字典中未匹配。 2. 分块导致上下文丢失,AI 未能理解某些术语。 | 1. 检查_extract_strings_with_path和_update_json_with_translations中的路径生成和匹配逻辑是否一致。2. 尝试减小 MAX_TOKENS_PER_REQUEST,让每个块更小,或尝试不分组,一次性翻译(如果文件很小)。3. 在 Prompt 中提供更详细的上下文或术语表。 |
| 翻译质量不佳(术语不一致、生硬) | Prompt 指令不够明确。 | 优化config.py中的TRANSLATION_PROMPT:1. 在 Prompt 开头提供术语表。例如:“术语表:’User’ 请统一翻译为‘用户’,’Server’ 翻译为‘服务器’。” 2. 要求 AI 进行“本地化”而非直译。 |
| 使用 Ollama 时连接被拒绝 | Ollama 服务未运行。 | 1. 在终端运行ollama serve启动服务。2. 检查 config.py中的OLLAMA_API_URL是否为http://localhost:11434/api/generate。 |
| 处理大型 JSON 文件时速度慢或内存不足 | 文件过大,一次性加载到内存。 | 1. 对于超大型文件,考虑流式读取和分块处理,而不是一次性加载整个json.load()。2. 可以按顶级键进行拆分,分别翻译后再合并。 |
| AI 返回了非 JSON 的说明文字 | AI 有时会“自作多情”地添加解释。 | 强化 Prompt 的约束力。在TRANSLATION_PROMPT的最后一行用非常强硬的语气写明:“你必须只返回一个完整的、格式正确的 JSON 对象,不要包含任何其他文字、解释、代码块标记或问候语。” |
6. 最佳实践与进阶优化指南
掌握了基础方法后,通过以下实践可以让你汉化的效率和质量更上一层楼。
6.1 优化提示词工程
Prompt 是灵魂,这里提供几个优化方向:
- 提供上下文:如果可能,在发送给 AI 的 JSON 块中包含一些父级键名,帮助 AI 理解领域。例如,不要只发送
{"text": "Save"},而是发送{"menu.file.save": "Save"}。 - 定义术语表:在长文档或专业软件汉化前,整理一个中英术语对照表,放在 Prompt 开头。
TERM_GLOSSARY = """ 术语对照表: - “Dashboard” -> “仪表板” - “Pipeline” -> “流水线” - “Deploy” -> “部署” - “Repository” -> “仓库” - “Commit” -> “提交” """ TRANSLATION_PROMPT = TERM_GLOSSARY + TRANSLATION_PROMPT - 指定风格:明确译文风格,如“简洁的软件界面用语”、“正式的技术文档风格”、“轻松的游戏对话风格”。
6.2 处理特殊格式与标记
- HTML/XML 标签:确保 Prompt 中明确要求保留
<b>,<i>,<color=#FF0000>等标签。AI 通常能很好地处理。 - Markdown:如果 JSON 值包含 Markdown,同样要求 AI 只翻译文本部分,保留
**粗体**、[链接](url)等语法。 - 多行文本:JSON 中的多行字符串(含
\n)会被正确保留。
6.3 实现增量翻译与人工校对
- 生成翻译映射文件:修改程序,在翻译的同时生成一个
translation_map.json文件,记录每个路径的原文和译文。方便人工校对和复用。{ "app.description": { "source": "A powerful utility for developers...", "target": "一款供开发者...的强大工具。" } } - 加载已有映射:在翻译前,先加载已有的映射文件,跳过已翻译的内容,实现增量更新。
6.4 集成到自动化流程
你可以将此脚本集成到你的构建流程中:
- 前端项目:在
npm run build前,自动运行脚本汉化src/locales/en.json,输出src/locales/zh-CN.json。 - 游戏开发:将工具作为编辑器插件或命令行工具,在资源导出后自动汉化配置表。
- CI/CD 管道:在持续集成服务器上设置任务,当源语言文件更新时,自动触发 AI 汉化并提交到仓库。
6.5 性能与成本考量
- 免费额度:DeepSeek 等平台的免费额度对于个人和小型项目完全足够。大规模商用前请查阅平台定价策略。
- 缓存机制:对翻译结果进行本地缓存(如保存到
.cache文件),相同原文第二次请求时直接使用缓存,节省 Token 和费用。 - 超时与重试:在网络不稳定或 API 限流时,实现简单的重试机制。
通过本文的详细讲解,你已经掌握了一套完全免费、高质量、可定制化的 AI JSON 汉化解决方案。从理解痛点、环境搭建、原理剖析到代码实战,我们一步步构建了一个比传统机翻工具强大得多的自动化工具。关键在于精心设计的 Prompt 和稳健的 JSON 处理逻辑。你可以在此基础上,根据具体项目需求进行扩展,例如支持更多语言对、集成图形界面、或对接其他 AI 模型。希望这个工具能帮助你彻底告别“垃圾机翻”,提升开发和本地化效率。如果在使用中遇到任何问题,欢迎在评论区交流探讨。