
本文提供一个轻量、可复用的 python 脚本,将含多语言字段(如 en、nl)的 csv 表格自动转换为按语言分组的嵌套 json 文件,支持任意新增语言列,无需手动修改逻辑。
本文提供一个轻量、可复用的 python 脚本,将含多语言字段(如 en、nl)的 csv 表格自动转换为按语言分组的嵌套 json 文件,支持任意新增语言列,无需手动修改逻辑。
在多语言网站或应用的本地化(i18n)实践中,常以 CSV 作为翻译内容的协作格式——结构清晰、便于编辑与版本管理。但运行时通常需加载结构化的嵌套 json,例如按 group(如 “global”、”menu”)组织,再嵌套 key → translation 映射。手动转换不仅低效,还极易因重复键或层级错误导致解析失败。
下面是一个健壮、零依赖的 Python 解决方案,它能自动识别所有非元数据列(即除 Group 和 Key 外的所有列)作为目标语言,并为每种语言生成符合要求的嵌套 JSON:
import csv import json def csv_to_json(csv_file): # 存储:{ 'EN': { 'global': { 'yes': 'yes', ... }, ... }, 'NL': { ... } } data = {} with open(csv_file, mode='r', encoding='utf-8') as file: reader = csv.DictReader(file) for row in reader: group = row['Group'].lower() # 统一小写,保证键名规范(如 Global → global) key = row['Key'] # 遍历所有语言列(跳过 Group 和 Key) for lang in row.keys(): if lang not in ['Group', 'Key']: # 初始化语言顶层字典 if lang not in data: data[lang] = {} # 初始化该语言下的 group 字典 if group not in data[lang]: data[lang][group] = {} # 写入 key-value 映射 data[lang][group][key] = row[lang] # 为每种语言生成独立 JSON 文件 for lang, lang_data in data.items(): output_file = f"{lang}.json" with open(output_file, mode='w', encoding='utf-8') as f: json.dump(lang_data, f, indent=4, ensure_ascii=False) print(f"✅ 已生成: {output_file}") if __name__ == "__main__": csv_file = "translations.csv" # ✅ 替换为你实际的 CSV 文件名 csv_to_json(csv_file)
✅ 使用说明
- 将上述代码保存为 csv-to-json.py;
- 确保你的 CSV 文件(如 translations.csv)首行为 Group,Key,EN,NL,…,且无空行或乱码;
- 在终端执行:
python3 csv-to-json.py即自动生成 EN.json、NL.json 等文件。
⚠️ 注意事项
- 编码必须为 UTF-8:避免中文、荷兰语特殊字符(如 ë, ï)乱码;
- 列名大小写敏感:脚本严格匹配 Group 和 Key;若 CSV 中为 group/key,请同步修改代码中的 ‘Group’ 和 ‘Key’;
- 空值处理:若某单元格为空,对应 JSON 值将为 NULL;如需跳过空翻译,可在赋值前加 if row[lang].strip(): 判断;
- 扩展性:新增语言列(如 FR, DE)无需改代码——脚本自动识别并生成 FR.json、DE.json。
? 输出示例(NL.json)
{ "global": { "yes": "ja", "no": "neen" }, "menu": { "openMenu": "Open menu", "signUp": "Registreer" } }
该方案兼顾简洁性与生产可用性:不依赖外部库(仅标准库)、逻辑清晰、易于维护,特别适合前端团队或本地化专员快速交付多语言资源。你只需维护一份 CSV,其余全部自动化——真正实现“改一次,全语言生效”。