
本文提供一个轻量、可复用的 python 脚本,自动将含多语言字段(如 en/nl)的 csv 表格转换为按语言分组的嵌套 json 文件,支持任意数量的语言列,无需手动逐条映射,开箱即用。
本文提供一个轻量、可复用的 python 脚本,自动将含多语言字段(如 en/nl)的 csv 表格转换为按语言分组的嵌套 json 文件,支持任意数量的语言列,无需手动逐条映射,开箱即用。
在国际化(i18n)项目中,常需将结构化的多语言文本(如网站文案)从 CSV 导出为各语言专属的嵌套 JSON 配置文件。典型需求是:以 Group 为一级对象键(转为小写),Key 为二级键,对应语言列为值,最终生成类似 en.json、nl.json 等独立文件。手动处理不仅易错,且难以维护;而通用在线转换工具往往无法满足“按 Group 分组 + 按 Key 嵌套 + 多语言并行输出”的复合结构要求。
以下是一个健壮、简洁、零依赖的 Python 解决方案(仅需标准库 csv 和 json):
import csv
import json
def csv_to_json(csv_file):
"""将多语言 CSV 转换为按语言分隔的嵌套 JSON 文件。
输入 CSV 必须包含 'Group' 和 'Key' 列,其余列为语言代码(如 EN, NL, ZH)。
输出:每个语言列生成一个 <LANG>.json 文件,结构为 {group: {key: value}}。
"""
data = {} # {lang: {group: {key: value}}}
with open(csv_file, mode='r', encoding='utf-8') as file:
reader = csv.DictReader(file)
for row in reader:
group = row['Group'].lower() # 统一小写,符合常见 JSON 命名规范
key = row['Key']
# 自动识别所有非 'Group'/'Key' 的列作为语言字段
for lang in row.keys():
if lang not in ['Group', 'Key']:
# 初始化语言层级
if lang not in data:
data[lang] = {}
if group not in data[lang]:
data[lang][group] = {}
# 写入键值对(保留原始字符串,支持空格、Unicode)
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 文件路径
csv_file = "translations.csv"
csv_to_json(csv_file)✅ 使用说明
- 将上述代码保存为 csv-to-json.py;
- 确保你的 CSV 文件(如 translations.csv)首行为标题行,且至少包含 Group, Key, EN, NL 等列;
- 在终端执行:
python3 csv-to-json.py
⚠️ 注意:Python 3.6+ 环境已预装 csv 和 json 模块,无需额外安装依赖。
? 示例输入与输出验证
基于你提供的 CSV:
Group,Key,EN,NL Global,yes,yes,ja Global,no,no,neen Menu,openMenu,Open menu,Open menu Menu,signUp,Sign up,Registreer
脚本将自动生成:
- EN.json:
{ "global": { "yes": "yes", "no": "no" }, "menu": { "openMenu": "Open menu", "signUp": "Sign up" } } - NL.json:
{ "global": { "yes": "ja", "no": "neen" }, "menu": { "openMenu": "Open menu", "signUp": "Registreer" } }
⚠️ 注意事项
- 列名敏感性:Group 和 Key 列名必须完全匹配(大小写敏感),语言列名(如 NL)将直接用作输出文件名;
- 空值与重复键:若 CSV 中存在重复 Group+Key 组合,后出现的行将覆盖前者;空单元格会写入 null,如需跳过,请在赋值前添加 if row[lang].strip(): 判断;
- 编码兼容性:脚本默认使用 utf-8,可正确处理中文、德语变音符等 Unicode 字符;
- 扩展性:新增语言只需在 CSV 中添加一列(如 FR, JA),无需修改代码。
该方案兼顾简洁性与生产可用性,一次编写,长期复用,是前端 i18n 工程化流程中值得纳入的标准工具。










