121 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			121 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 
								 | 
							
								#!/usr/bin/env python3
							 | 
						|||
| 
								 | 
							
								# -*- coding: utf-8 -*-
							 | 
						|||
| 
								 | 
							
								"""
							 | 
						|||
| 
								 | 
							
								生成星图节点中文名称映射
							 | 
						|||
| 
								 | 
							
								从 ExportRegions.json 提取节点名称,在 dict.zh.json 中查找对应的中文翻译
							 | 
						|||
| 
								 | 
							
								"""
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								import json
							 | 
						|||
| 
								 | 
							
								import sys
							 | 
						|||
| 
								 | 
							
								from pathlib import Path
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								def main():
							 | 
						|||
| 
								 | 
							
								    # 设置路径
							 | 
						|||
| 
								 | 
							
								    script_dir = Path(__file__).parent
							 | 
						|||
| 
								 | 
							
								    project_root = script_dir.parent
							 | 
						|||
| 
								 | 
							
								    export_dir = project_root / "warframe-public-export-plus"
							 | 
						|||
| 
								 | 
							
								    
							 | 
						|||
| 
								 | 
							
								    regions_file = export_dir / "ExportRegions.json"
							 | 
						|||
| 
								 | 
							
								    dict_file = export_dir / "dict.zh.json"
							 | 
						|||
| 
								 | 
							
								    output_file = project_root / "Scripts" / "RegionNameMapping.pluto"
							 | 
						|||
| 
								 | 
							
								    
							 | 
						|||
| 
								 | 
							
								    # 检查文件是否存在
							 | 
						|||
| 
								 | 
							
								    if not regions_file.exists():
							 | 
						|||
| 
								 | 
							
								        print(f"❌ 错误:找不到 {regions_file}")
							 | 
						|||
| 
								 | 
							
								        sys.exit(1)
							 | 
						|||
| 
								 | 
							
								    if not dict_file.exists():
							 | 
						|||
| 
								 | 
							
								        print(f"❌ 错误:找不到 {dict_file}")
							 | 
						|||
| 
								 | 
							
								        sys.exit(1)
							 | 
						|||
| 
								 | 
							
								    
							 | 
						|||
| 
								 | 
							
								    print("📖 正在读取 ExportRegions.json...")
							 | 
						|||
| 
								 | 
							
								    try:
							 | 
						|||
| 
								 | 
							
								        with open(regions_file, 'r', encoding='utf-8') as f:
							 | 
						|||
| 
								 | 
							
								            regions = json.load(f)
							 | 
						|||
| 
								 | 
							
								    except Exception as e:
							 | 
						|||
| 
								 | 
							
								        print(f"❌ 读取 ExportRegions.json 失败: {e}")
							 | 
						|||
| 
								 | 
							
								        sys.exit(1)
							 | 
						|||
| 
								 | 
							
								    
							 | 
						|||
| 
								 | 
							
								    print("📖 正在读取 dict.zh.json...")
							 | 
						|||
| 
								 | 
							
								    try:
							 | 
						|||
| 
								 | 
							
								        with open(dict_file, 'r', encoding='utf-8') as f:
							 | 
						|||
| 
								 | 
							
								            zh_dict = json.load(f)
							 | 
						|||
| 
								 | 
							
								    except Exception as e:
							 | 
						|||
| 
								 | 
							
								        print(f"❌ 读取 dict.zh.json 失败: {e}")
							 | 
						|||
| 
								 | 
							
								        sys.exit(1)
							 | 
						|||
| 
								 | 
							
								    
							 | 
						|||
| 
								 | 
							
								    # 构建映射
							 | 
						|||
| 
								 | 
							
								    print("🔄 正在构建节点名称映射...")
							 | 
						|||
| 
								 | 
							
								    node_mapping = {}
							 | 
						|||
| 
								 | 
							
								    missing_translations = []
							 | 
						|||
| 
								 | 
							
								    
							 | 
						|||
| 
								 | 
							
								    for node_id, node_data in regions.items():
							 | 
						|||
| 
								 | 
							
								        if isinstance(node_data, dict) and 'name' in node_data:
							 | 
						|||
| 
								 | 
							
								            name_path = node_data['name']
							 | 
						|||
| 
								 | 
							
								            
							 | 
						|||
| 
								 | 
							
								            # 在中文字典中查找
							 | 
						|||
| 
								 | 
							
								            if name_path in zh_dict:
							 | 
						|||
| 
								 | 
							
								                cn_name = zh_dict[name_path]
							 | 
						|||
| 
								 | 
							
								                node_mapping[cn_name] = node_id
							 | 
						|||
| 
								 | 
							
								                
							 | 
						|||
| 
								 | 
							
								                # 同时记录节点的系统名称
							 | 
						|||
| 
								 | 
							
								                if 'systemName' in node_data and node_data['systemName'] in zh_dict:
							 | 
						|||
| 
								 | 
							
								                    system_cn = zh_dict[node_data['systemName']]
							 | 
						|||
| 
								 | 
							
								                    # 创建 "星系-节点" 格式的键
							 | 
						|||
| 
								 | 
							
								                    full_name = f"{system_cn}-{cn_name}"
							 | 
						|||
| 
								 | 
							
								                    node_mapping[full_name] = node_id
							 | 
						|||
| 
								 | 
							
								            else:
							 | 
						|||
| 
								 | 
							
								                missing_translations.append((node_id, name_path))
							 | 
						|||
| 
								 | 
							
								    
							 | 
						|||
| 
								 | 
							
								    # 输出统计
							 | 
						|||
| 
								 | 
							
								    print(f"\n✅ 成功映射 {len(node_mapping)} 个节点名称")
							 | 
						|||
| 
								 | 
							
								    if missing_translations:
							 | 
						|||
| 
								 | 
							
								        print(f"⚠️  {len(missing_translations)} 个节点缺少中文翻译")
							 | 
						|||
| 
								 | 
							
								    
							 | 
						|||
| 
								 | 
							
								    # 生成 Pluto 文件
							 | 
						|||
| 
								 | 
							
								    print(f"\n📝 正在生成 {output_file.name}...")
							 | 
						|||
| 
								 | 
							
								    
							 | 
						|||
| 
								 | 
							
								    lines = [
							 | 
						|||
| 
								 | 
							
								        "-- 星图节点中文名称映射\n",
							 | 
						|||
| 
								 | 
							
								        "-- 自动生成,请勿手动编辑\n",
							 | 
						|||
| 
								 | 
							
								        "-- 生成工具: Tools/generate_region_name_mapping.py\n",
							 | 
						|||
| 
								 | 
							
								        "\n",
							 | 
						|||
| 
								 | 
							
								        "return {\n"
							 | 
						|||
| 
								 | 
							
								    ]
							 | 
						|||
| 
								 | 
							
								    
							 | 
						|||
| 
								 | 
							
								    # 排序并写入
							 | 
						|||
| 
								 | 
							
								    sorted_names = sorted(node_mapping.keys())
							 | 
						|||
| 
								 | 
							
								    for i, name in enumerate(sorted_names):
							 | 
						|||
| 
								 | 
							
								        node_id = node_mapping[name]
							 | 
						|||
| 
								 | 
							
								        # 转义特殊字符
							 | 
						|||
| 
								 | 
							
								        k = str(name).replace('\\', '\\\\').replace('"', '\\"').replace('\n', ' ').replace('\r', '')
							 | 
						|||
| 
								 | 
							
								        v = str(node_id).replace('\\', '\\\\').replace('"', '\\"')
							 | 
						|||
| 
								 | 
							
								        # 最后一项不加逗号
							 | 
						|||
| 
								 | 
							
								        comma = "," if i < len(sorted_names) - 1 else ""
							 | 
						|||
| 
								 | 
							
								        lines.append(f'    ["{k}"] = "{v}"{comma}\n')
							 | 
						|||
| 
								 | 
							
								    
							 | 
						|||
| 
								 | 
							
								    lines.append("}\n")
							 | 
						|||
| 
								 | 
							
								    
							 | 
						|||
| 
								 | 
							
								    # 写入文件
							 | 
						|||
| 
								 | 
							
								    try:
							 | 
						|||
| 
								 | 
							
								        with open(output_file, 'w', encoding='utf-8') as f:
							 | 
						|||
| 
								 | 
							
								            f.writelines(lines)
							 | 
						|||
| 
								 | 
							
								        print(f"✅ 已生成: {output_file}")
							 | 
						|||
| 
								 | 
							
								        print(f"📊 总计 {len(node_mapping)} 个节点映射")
							 | 
						|||
| 
								 | 
							
								    except Exception as e:
							 | 
						|||
| 
								 | 
							
								        print(f"❌ 写入文件失败: {e}")
							 | 
						|||
| 
								 | 
							
								        sys.exit(1)
							 | 
						|||
| 
								 | 
							
								    
							 | 
						|||
| 
								 | 
							
								    # 显示缺失翻译(可选)
							 | 
						|||
| 
								 | 
							
								    if missing_translations and len(missing_translations) <= 20:
							 | 
						|||
| 
								 | 
							
								        print("\n⚠️  缺少中文翻译的节点:")
							 | 
						|||
| 
								 | 
							
								        for node_id, path in missing_translations[:10]:
							 | 
						|||
| 
								 | 
							
								            print(f"   {node_id}: {path}")
							 | 
						|||
| 
								 | 
							
								        if len(missing_translations) > 10:
							 | 
						|||
| 
								 | 
							
								            print(f"   ... 还有 {len(missing_translations) - 10} 个")
							 | 
						|||
| 
								 | 
							
								    
							 | 
						|||
| 
								 | 
							
								    print("\n✨ 完成!")
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								if __name__ == '__main__':
							 | 
						|||
| 
								 | 
							
								    main()
							 | 
						|||
| 
								 | 
							
								
							 |