1. 先搞清楚“AI汉化JSON”到底解决了什么痛点
如果你经常需要处理一些软件、游戏或工具的配置文件、语言包,尤其是那些以JSON格式存储的文本,那你肯定遇到过“机翻灾难”。用传统的在线翻译工具或某些集成度不高的插件(比如一些老旧的“mtool”类工具)直接整段粘贴,出来的中文经常是词不达意、语序混乱、术语错翻,后期人工校对的工作量巨大,几乎等于重翻。
“AI高质量汉化JSON”这个思路,核心就是绕过这种低质量的直接机翻。它利用现代大语言模型(LLM)对上下文的理解能力,去处理JSON这种结构化的文本。最关键的价值不是“翻译”,而是“在理解数据结构的前提下,进行高质量的语义转换”。这意味着AI能区分哪些键(key)是程序识别的标识符不能动,哪些值(value)是需要翻译的用户界面文本;它能保持术语的一致性(比如同一个英文单词在文件里出现几十次,翻译成同一个中文词);它甚至能根据上下文,把一些缩写或特定短语翻译得更符合中文习惯。
这篇文章适合任何需要批量、准确处理JSON文件内文本内容的开发者、本地化爱好者或普通用户。你不用懂深度学习,只需要明确你的需求:把一堆JSON文件里的英文(或其他语言)内容,变成通顺、准确、符合技术语境的中文,同时保持文件结构原封不动。
2. 动手之前:环境、工具与核心思路拆解
在开始找具体工具或写代码之前,我们先得把这件事的“可操作性”讲清楚。这不是一个魔法按钮,点一下就能完美输出,而是一个需要你稍作配置的自动化流程。
2.1 你需要准备什么?
- 待翻译的JSON文件:这是你的原材料。确保你有权修改它,并且最好有备份。
- 一个能调用AI模型的途径:这是“引擎”。目前的主流选择有几个:
- 大厂开放API:如 OpenAI 的 GPT 系列、DeepSeek、智谱AI、月之暗面(Kimi)等提供的API。它们稳定,质量高,但通常需要付费(可能有免费额度)。
- 本地开源模型:如 Qwen、Llama、Gemma 等模型的量化版,通过 Ollama、LM Studio 等工具在本地运行。完全免费,但对电脑硬件(尤其是内存和显存)有要求,速度可能较慢。
- 一些集成好的开源项目:有些开发者已经将翻译流程和AI调用封装成了工具,你可能只需要配置一下API密钥。
- 一个处理JSON的脚本(核心):这是“流水线”。你需要一段代码(Python是最常见的)来执行以下流程:
- 读取JSON文件。
- 遍历其结构,识别出需要翻译的文本值(通常要排除一些特定的键名,如
”id”,”code”,”filepath”等)。 - 将提取出的文本组织成合适的提示(Prompt)发送给AI。
- 接收AI返回的翻译结果,并精准地写回JSON的对应位置。
- 保存新的JSON文件。
重要概念:提示词(Prompt)是质量的关键。你不能简单地把句子扔给AI说“翻译”。一个基本的提示词应该包括:
- 角色设定:“你是一名专业的软件本地化工程师。”
- 任务指令:“请将以下JSON值中的英文用户界面文本翻译成专业、流畅、符合中国大陆用语习惯的中文。保持术语一致,不要翻译JSON键名和程序代码。”
- 输出格式要求:“只返回翻译后的中文文本,不要添加任何额外解释。”
2.2 免费路线的具体选择
标题强调“完全免费”,那么最可行的免费路线就是使用本地开源模型。以下是具体考量:
- 模型选择:对于翻译任务,不需要追求千亿参数的最新模型。一个7B(70亿)或13B参数的模型,在4-bit或8-bit量化后,通常就能提供远超传统机翻的质量。例如Qwen2.5-7B-Instruct、Llama 3.2-3B-Instruct都是不错的起点,对硬件要求相对友好。
- 硬件门槛:
- 内存:运行7B量化模型,建议至少有16GB系统内存。8B以下模型可能能在8GB内存上运行,但会比较吃力。
- 显存:如果有NVIDIA显卡(GPU),体验会好很多。6GB显存可以尝试运行7B 4-bit量化模型。纯CPU运行也可以,但速度会慢很多。
- 磁盘:模型文件本身从几GB到十几GB不等,需要预留空间。
- 工具链:
- Ollama:目前最易用的本地大模型运行框架。安装后,一行命令如
ollama run qwen2.5:7b就能拉取并运行模型,它同时提供了简单的API接口供你的脚本调用。 - LM Studio:图形化界面,更适合新手探索和测试模型,它也提供本地API服务器。
- text-generation-webui:功能更强大的Web界面,同样支持API。
- Ollama:目前最易用的本地大模型运行框架。安装后,一行命令如
我的建议是:先从 Ollama 开始。它简化了模型下载和管理,让你能快速聚焦在“如何用AI处理JSON”这个核心问题上。
3. 从零搭建你的免费AI JSON汉化流水线
我们假设一个最常见的场景:你有一个en.json文件,里面存储了软件的英文界面文本,你想生成一个zh-CN.json。我们将使用Python + Ollama(运行本地模型)这条免费路线。
3.1 第一步:搭建本地AI环境
安装Ollama:
- 访问 Ollama 官网,根据你的操作系统(Windows/macOS/Linux)下载安装包。
- 安装完成后,打开终端(命令行)。
- 拉取一个适合翻译的轻量模型,例如:
(这里用3B模型确保大多数机器都能跑起来,实际翻译质量已足够。如果你的机器性能好,可以换成ollama pull qwen2.5:3b-instructqwen2.5:7b-instruct或llama3.2:3b-instruct)
运行模型服务:
- 模型拉取完成后,它默认就在后台准备就绪了。Ollama 的API服务通常运行在
http://localhost:11434。
- 模型拉取完成后,它默认就在后台准备就绪了。Ollama 的API服务通常运行在
3.2 第二步:编写Python翻译脚本
你需要安装Python,并安装requests库(用于调用API)。
pip install requests创建一个名为translate_json.py的文件,内容如下。请仔细阅读注释:
import json import requests import time from pathlib import Path # 配置区 ============================================ OLLAMA_API_URL = "http://localhost:11434/api/generate" # Ollama API地址 MODEL_NAME = "qwen2.5:3b-instruct" # 你拉取的模型名称 SOURCE_JSON_PATH = “en.json” # 源JSON文件路径 TARGET_JSON_PATH = “zh-CN.json” # 目标JSON文件路径 # 定义哪些键(key)对应的值不需要翻译(比如id, code, file等程序标识符) KEYS_TO_SKIP = [‘id’, ‘code’, ‘name’, ‘key’, ‘file’, ‘path’, ‘url’, ‘version’, ‘author’] # 注意:这个列表需要你根据自己JSON文件的实际情况调整! # 系统提示词 - 这是翻译质量的核心! SYSTEM_PROMPT = “””你是一名专业的软件本地化工程师。你的任务是将用户提供的英文文本翻译成中文。 要求: 1. 翻译结果必须专业、流畅、符合中国大陆用户的阅读习惯。 2. 保持技术术语的一致性。 3. 如果文本是按钮、菜单、标签,翻译需简洁明了。 4. 不要添加任何额外的解释,只返回翻译后的中文文本。 “”” # 函数:调用本地Ollama API进行翻译 def translate_text(text): prompt = f”{SYSTEM_PROMPT}\n\n需要翻译的文本:{text}” payload = { “model”: MODEL_NAME, “prompt”: prompt, “stream”: False, # 我们不需要流式输出,一次性返回即可 “options”: { “temperature”: 0.1, # 温度调低,让输出更确定、更稳定 } } try: response = requests.post(OLLAMA_API_URL, json=payload, timeout=60) response.raise_for_status() result = response.json() return result.get(“response”, “”).strip() except requests.exceptions.RequestException as e: print(f”翻译请求失败: {e}”) return text # 如果失败,返回原文 except KeyError: print(“API返回格式异常”) return text # 函数:递归遍历JSON,翻译需要翻译的字符串值 def translate_json_obj(obj, parent_key=”): if isinstance(obj, dict): # 如果是字典,遍历每一个键值对 new_dict = {} for key, value in obj.items(): # 如果当前键在跳过列表中,并且它的值是字符串,则跳过翻译 if key.lower() in [k.lower() for k in KEYS_TO_SKIP] and isinstance(value, str): new_dict[key] = value print(f”跳过键 ‘{key}’: {value}”) else: # 否则,递归处理值 new_dict[key] = translate_json_obj(value, parent_key=key) return new_dict elif isinstance(obj, list): # 如果是列表,递归处理列表中的每个元素 return [translate_json_obj(item, parent_key=parent_key) for item in obj] elif isinstance(obj, str): # 如果是字符串,并且不是空字符串或纯数字,则进行翻译 if obj and not obj.isdigit(): print(f”正在翻译: {obj}”) translated = translate_text(obj) print(f”翻译结果: {translated}”) # 简单延迟,避免请求过快(如果模型在本地,可以调低或去掉) time.sleep(0.5) return translated else: return obj else: # 数字、布尔值、None等原样返回 return obj # 主程序 ============================================ def main(): print(“开始加载JSON文件…”) try: with open(SOURCE_JSON_PATH, ‘r’, encoding=‘utf-8’) as f: data = json.load(f) except FileNotFoundError: print(f”错误:找不到源文件 {SOURCE_JSON_PATH}”) return except json.JSONDecodeError as e: print(f”错误:JSON文件格式不正确 - {e}”) return print(“开始翻译过程(这可能需要一些时间,取决于文件大小)…”) translated_data = translate_json_obj(data) print(“翻译完成,正在保存文件…”) try: with open(TARGET_JSON_PATH, ‘w’, encoding=‘utf-8’, newline=‘\n’) as f: # ensure_ascii=False 确保中文不被转义成 \u 格式 json.dump(translated_data, f, ensure_ascii=False, indent=2) print(f”成功!已保存翻译后的文件至:{TARGET_JSON_PATH}”) except IOError as e: print(f”保存文件失败: {e}”) if __name__ == “__main__”: main()3.3 第三步:运行与验证
- 将你的英文
en.json文件放在与translate_json.py同一目录下。 - 确保 Ollama 服务正在运行(终端里能看到模型信息)。
- 在终端中运行脚本:
python translate_json.py - 观察终端输出。你会看到它跳过了一些键,并逐条翻译字符串。翻译完成后,会在同目录生成
zh-CN.json。
验证结果:
- 结构检查:用文本编辑器或IDE(如VSCode)同时打开源文件和目标文件,对比结构是否完全一致。键(key)应该都没有被改动。
- 质量抽查:随机检查一些条目的翻译是否通顺、准确,术语是否一致。
- 功能测试:如果这是一个软件语言包,将生成的文件替换到软件中,查看实际界面显示效果。
4. 关键细节、避坑与进阶优化
脚本能跑起来只是第一步。要让这个流程真正可靠、高效,你需要关注下面这些细节。
4.1 必须配置的“跳过键”列表
这是避免破坏JSON功能的关键。脚本里的KEYS_TO_SKIP列表必须根据你的文件内容仔细配置。
- 程序标识符:如
”id”,”code”,”key”,”type”。这些值如果被翻译,程序可能无法识别。 - 技术路径/名称:如
”file”,”path”,”url”,”className”,”functionName”。 - 格式占位符:如包含
”%s”,”{0}”的字符串。这些需要保留原样,AI有时会“好心”地翻译掉它们。 - 枚举值:有些值看起来是英文单词,但其实是程序内部使用的枚举常量,不应翻译。
排查方法:先在一个小样本或备份文件上运行,仔细观察终端输出的“跳过键”日志,检查是否有本应跳过的键被误翻译了,或者本应翻译的键被跳过了。
4.2 处理复杂嵌套与数组
上面的脚本已经通过递归函数处理了嵌套的字典(dict)和列表(list),这是通用做法。但要小心一种情况:数组里混合了需要翻译和不需要翻译的对象。例如:
“items”: [ { “id”: “item1”, “displayName”: “Start Game” }, { “code”: “OPT_AUDIO”, “label”: “Audio Settings” } ]我们的脚本会对数组里的每个对象递归调用translate_json_obj,而该函数会检查每个对象内部的键。”id”和”code”在KEYS_TO_SKIP列表中,所以”item1”和”OPT_AUDIO”会被跳过,而”displayName”和”label”会被翻译。这通常是符合预期的。
4.3 提升翻译质量的Prompt技巧
- 提供上下文:如果某些术语很特殊,可以在
SYSTEM_PROMPT里直接说明。例如:“’Portal’在本软件上下文中指代传送门,请统一翻译为‘传送门’,不要翻译为‘门户’或‘入口’。” - 分句处理:有些JSON值可能是长段落。虽然AI能处理,但拆分成单句有时准确率更高。你可以在脚本里用句号、分号等简单分割,然后批量发送翻译(注意API可能有token长度限制)。
- 术语表:对于大型项目,维护一个
{“英文”: “中文”}的术语表JSON文件。在调用AI翻译前,先用这个表进行全局替换,可以极大保证一致性。 - 温度(Temperature):脚本中设置为
0.1,这会让AI的输出非常确定和一致。如果你发现翻译结果过于死板,可以稍微调高到0.3,但不要超过0.7,否则会引入随机性。
4.4 性能、稳定性与错误处理
- 速率限制与延迟:即使是本地模型,连续快速调用也可能导致服务响应变慢或出错。脚本中的
time.sleep(0.5)是一个简单的缓冲。对于大批量文件,可以考虑更健壮的队列和重试机制。 - 网络问题(针对API):如果你未来改用云端API,必须加入重试逻辑和更详细的错误处理(如
requests.exceptions.ConnectionError,requests.exceptions.Timeout)。 - Token限制:模型有上下文长度限制。不要试图把整个巨大的JSON文件一次性塞给AI。我们的脚本是逐字段翻译,完美避开了这个问题。
- 保存进度:翻译一个超大的JSON文件时,如果中途出错或中断,你会希望从中断处继续。你可以修改脚本,将已翻译的部分定期保存到临时文件,实现简单的断点续传。
4.5 免费路线的替代与扩展
- 使用多个免费API额度:一些国内外的AI服务提供少量免费额度。你可以写一个简单的负载均衡器,在多个API Key间轮询,延长免费使用的时长。但要注意不同API的响应格式可能不同。
- 图形化界面(GUI)工具:如果你不想写代码,可以搜索一些开源项目,例如
Bilingual Translator、OpenAI Translator等,它们通常支持加载本地模型或配置API,并提供文件翻译功能。你需要检查它们是否支持结构化地翻译JSON(即保留键),而不是把整个文件当作文本处理。 - 集成到开发流程:对于开发者,可以将此脚本与构建工具(如Webpack、Gulp)或CI/CD流水线结合,在构建时自动生成多语言版本。
5. 当翻译结果不理想时,如何排查?
跑起来之后,如果翻译质量达不到预期,不要急着换模型或否定整个方案。按以下顺序排查:
- 检查输入:AI翻译的源文本质量如何?是否包含大量拼写错误、网络俚语或极其专业的领域术语?如果源文本就很差,需要先预处理。
- 审查Prompt:这是最可能出问题的地方。你的系统提示词(
SYSTEM_PROMPT)是否足够清晰、具体?有没有明确告诉AI“不要翻译键名”、“保持术语一致”?尝试修改和强化你的Prompt。 - 验证跳过逻辑:是否有关键的程序标识符被误翻译了?检查
KEYS_TO_SKIP列表,并查看运行日志。 - 测试模型能力:用同一个Prompt,在Ollama的聊天界面里手动输入几条待翻译的文本,看模型本身的输出是否合理。如果在这里就不行,说明这个模型不适合翻译任务,考虑换一个更大的或专门训练过的模型(如
qwen2.5:7b-instruct)。 - 调整参数:尝试微调
temperature(降低以获得更稳定输出,但不要为0),或者为复杂的句子提供更详细的上下文。 - 后处理:AI翻译后,用简单的查找替换进行后处理,修正一些系统性错误。例如,如果AI总是把
”Log”翻译成“日志”但你的场景需要“记录”,就全局替换一下。
最终建议:不要追求100%全自动。将AI汉化视为一个“超级增强版的机翻”,它能帮你完成95%的枯燥工作,剩下5%需要你进行关键术语的校准和语感的微调。这个投入产出比,已经远远超过和原始的“垃圾机翻”搏斗了。先从一个小而具体的JSON文件开始,跑通整个流程,理解每一个环节,然后再扩展到更复杂的项目中去。