添加多国语言支持

This commit is contained in:
VinJay
2025-02-18 19:33:07 +08:00
parent 140aab8999
commit d5594d01a3
12 changed files with 206 additions and 27 deletions

61
scripts/gen_lang.py Normal file
View File

@@ -0,0 +1,61 @@
#!/usr/bin/env python3
import argparse
import json
import os
HEADER_TEMPLATE = """// Auto-generated language config
#pragma once
#include <string>
#include <string_view>
namespace Lang {{
// 语言元数据
constexpr std::string_view CODE_VIEW = "{lang_code}";
const std::string CODE = std::string(CODE_VIEW);
// 字符串资源
namespace Strings {{
{strings_view}
{strings_string}
}}
}}
"""
def generate_header(input_path, output_path):
with open(input_path, 'r', encoding='utf-8') as f:
data = json.load(f)
# 验证数据结构
if 'language' not in data or 'strings' not in data:
raise ValueError("Invalid JSON structure")
lang_code = data['language']['type']
# 生成字符串常量
strings_view = []
strings_string = []
for key, value in data['strings'].items():
value = value.replace('"', '\\"')
strings_view.append(f' constexpr std::string_view {key.upper()}_VIEW = "{value}";')
strings_string.append(f' const std::string {key.upper()} = std::string({key.upper()}_VIEW);')
# 填充模板
content = HEADER_TEMPLATE.format(
lang_code=lang_code,
strings_view="\n".join(sorted(strings_view)),
strings_string="\n".join(sorted(strings_string))
)
# 写入文件
os.makedirs(os.path.dirname(output_path), exist_ok=True)
with open(output_path, 'w', encoding='utf-8') as f:
f.write(content)
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("--input", required=True, help="输入JSON文件路径")
parser.add_argument("--output", required=True, help="输出头文件路径")
args = parser.parse_args()
generate_header(args.input, args.output)