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()
|
|
|