
本文提供一个轻量、可复用的 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,其余全部自动化——真正实现“改一次,全语言生效”。










