如何按语言拆分嵌套字典生成独立JSON文件并后续合并回原结构
嵌套翻译字典拆分与合并实现方案
拆分逻辑说明
- 先从原始字典的所有翻译key中提取唯一语言标识,比如
es_ES、it_IT等,去掉前缀label_即可得到 - 每个语言对应独立字典,结构为
{ 顶层分类键: 对应语言的翻译值 },拆分后可直接导出为单个JSON文件
合并逻辑说明
- 遍历所有拆分后的语言字典,把语言标识拼回
label_xx_XX格式,按顶层分类键聚合所有语言的翻译,还原为原始嵌套结构
完整可运行代码
import json from collections import defaultdict import glob # 按语言拆分函数 def split_translations_by_lang(origin_data: dict) -> dict: lang_dict = defaultdict(dict) # 遍历所有顶层分类 for category, trans_map in origin_data.items(): for trans_key, value in trans_map.items(): # 提取语言标识 如 label_en_EN 提取出 en_EN lang = trans_key.split("_", 1)[1] lang_dict[lang][category] = value return lang_dict # 拆分后合并还原函数 def merge_translations(lang_files: list) -> dict: merge_result = defaultdict(dict) for lang_file in lang_files: # 从文件名提取语言标识 如 trans_en_EN.json 提取 en_EN lang = lang_file.replace("trans_", "").replace(".json", "") with open(lang_file, 'r', encoding='utf-8') as f: lang_data = json.load(f) # 拼回原始结构 for category, value in lang_data.items(): merge_result[category][f'label_{lang}'] = value return dict(merge_result) if __name__ == '__main__': # 读取原始翻译文件 with open('translations.json', 'r', encoding='utf-8') as f: origin_data = json.load(f) # 执行拆分 split_result = split_translations_by_lang(origin_data) # 每种语言单独导出为JSON文件 for lang, data in split_result.items(): with open(f'trans_{lang}.json', 'w', encoding='utf-8') as f: json.dump(data, f, ensure_ascii=False, indent=2) # 读取所有拆分后的文件合并还原 all_lang_files = glob.glob("trans_*.json") merged_data = merge_translations(all_lang_files) # 校验合并结果正确性 assert merged_data == origin_data, "合并后数据与原始数据不一致" # 导出合并后的文件 with open('merged_translations.json', 'w', encoding='utf-8') as f: json.dump(merged_data, f, ensure_ascii=False, indent=2)
代码特性说明
- 自动识别所有存在的语言,无需手动枚举支持的语言类型
- 导出的JSON文件兼容中文等非ASCII字符,不会出现乱码
- 自带一致性校验逻辑,避免合并过程中出现数据丢失或错误
内容的提问来源于stack exchange,提问作者heroldonkey
相关产品推荐
相关产品推荐

