mirror of
https://github.com/langbot-app/LangBot.git
synced 2026-06-27 16:04:21 +00:00
161 lines
4.8 KiB
Python
161 lines
4.8 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
自动修复所有语言文件中缺失的 nodeOutputs 和 nodeInputs 键
|
|
"""
|
|
|
|
import re
|
|
from pathlib import Path
|
|
|
|
# 需要添加的 nodeOutputs 键(使用英文作为临时翻译)
|
|
MISSING_NODE_OUTPUTS = {
|
|
'sender': 'Sender',
|
|
'output': 'Output',
|
|
'result': 'Result',
|
|
'data': 'Data',
|
|
'error': 'Error Message',
|
|
'success': 'Success Status',
|
|
'event': 'Event',
|
|
'trigger_time': 'Trigger Time',
|
|
'logs': 'Logs',
|
|
'scores': 'Scores',
|
|
'missing': 'Missing Parameters',
|
|
'parsed': 'Parsed Result',
|
|
'chunks': 'Text Chunks',
|
|
'text': 'Text Content',
|
|
'case_1': 'Case 1 Output',
|
|
'case_2': 'Case 2 Output',
|
|
'branch_1': 'Branch 1 Output',
|
|
'branch_2': 'Branch 2 Output',
|
|
'count': 'Count',
|
|
'execution_id': 'Execution ID',
|
|
'notification_id': 'Notification ID',
|
|
'suggestions': 'Suggestions',
|
|
'embedding': 'Embedding Vector',
|
|
'dimensions': 'Vector Dimensions',
|
|
'intent': 'Intent',
|
|
'entities': 'Entities',
|
|
}
|
|
|
|
# 需要添加的 nodeInputs 键
|
|
MISSING_NODE_INPUTS = {
|
|
'payload': 'Payload',
|
|
'input_value': 'Input Value',
|
|
'conversation_id': 'Conversation ID',
|
|
}
|
|
|
|
# 需要修复的语言文件
|
|
LANGUAGE_FILES = [
|
|
'ja-JP.ts',
|
|
'zh-Hant.ts',
|
|
'es-ES.ts',
|
|
'ru-RU.ts',
|
|
'th-TH.ts',
|
|
'vi-VN.ts',
|
|
]
|
|
|
|
def find_insertion_point(content: str, section: str) -> tuple[int, str]:
|
|
"""
|
|
找到插入点的位置
|
|
section: 'nodeOutputs' 或 'nodeInputs'
|
|
返回: (插入位置的行号, 缩进字符串)
|
|
"""
|
|
lines = content.split('\n')
|
|
in_section = False
|
|
last_key_line = -1
|
|
indent = ' '
|
|
|
|
for i, line in enumerate(lines):
|
|
if f'{section}:' in line and '{' in line:
|
|
in_section = True
|
|
continue
|
|
|
|
if in_section:
|
|
# 检测缩进
|
|
if line.strip() and not line.strip().startswith('//'):
|
|
match = re.match(r'^(\s+)', line)
|
|
if match:
|
|
indent = match.group(1)
|
|
|
|
# 找到最后一个键值对
|
|
if ':' in line and not line.strip().startswith('//'):
|
|
last_key_line = i
|
|
|
|
# 遇到闭合括号,说明section结束
|
|
if '},' in line and last_key_line > 0:
|
|
return last_key_line, indent
|
|
|
|
return -1, indent
|
|
|
|
def add_missing_keys(file_path: Path):
|
|
"""为指定的语言文件添加缺失的键"""
|
|
print(f"\n处理文件: {file_path.name}")
|
|
|
|
with open(file_path, 'r', encoding='utf-8') as f:
|
|
content = f.read()
|
|
|
|
lines = content.split('\n')
|
|
modified = False
|
|
|
|
# 处理 nodeOutputs
|
|
for key, value in MISSING_NODE_OUTPUTS.items():
|
|
if f" {key}:" not in content:
|
|
print(f" 添加 nodeOutputs.{key}")
|
|
|
|
# 找到插入点
|
|
insert_line, indent = find_insertion_point(content, 'nodeOutputs')
|
|
if insert_line > 0:
|
|
# 在最后一个键之后插入
|
|
new_line = f"{indent}{key}: '{value}',"
|
|
lines.insert(insert_line + 1, new_line)
|
|
content = '\n'.join(lines)
|
|
lines = content.split('\n')
|
|
modified = True
|
|
|
|
# 处理 nodeInputs
|
|
for key, value in MISSING_NODE_INPUTS.items():
|
|
if f" {key}:" not in content:
|
|
print(f" 添加 nodeInputs.{key}")
|
|
|
|
# 找到插入点
|
|
insert_line, indent = find_insertion_point(content, 'nodeInputs')
|
|
if insert_line > 0:
|
|
# 在最后一个键之后插入
|
|
new_line = f"{indent}{key}: '{value}',"
|
|
lines.insert(insert_line + 1, new_line)
|
|
content = '\n'.join(lines)
|
|
lines = content.split('\n')
|
|
modified = True
|
|
|
|
if modified:
|
|
# 写回文件
|
|
with open(file_path, 'w', encoding='utf-8') as f:
|
|
f.write('\n'.join(lines))
|
|
print(f" ✓ 已更新 {file_path.name}")
|
|
else:
|
|
print(f" - {file_path.name} 无需更新")
|
|
|
|
def main():
|
|
"""主函数"""
|
|
locales_dir = Path(__file__).parent / 'src' / 'i18n' / 'locales'
|
|
|
|
print("=" * 60)
|
|
print("开始修复多语言 i18n 文件")
|
|
print("=" * 60)
|
|
|
|
for lang_file in LANGUAGE_FILES:
|
|
file_path = locales_dir / lang_file
|
|
if file_path.exists():
|
|
add_missing_keys(file_path)
|
|
else:
|
|
print(f"\n警告: 文件不存在 - {lang_file}")
|
|
|
|
print("\n" + "=" * 60)
|
|
print("修复完成!")
|
|
print("=" * 60)
|
|
print(f"\n已处理 {len(LANGUAGE_FILES)} 个语言文件")
|
|
print(f"添加了 {len(MISSING_NODE_OUTPUTS)} 个 nodeOutputs 键")
|
|
print(f"添加了 {len(MISSING_NODE_INPUTS)} 个 nodeInputs 键")
|
|
|
|
if __name__ == '__main__':
|
|
main()
|