diff --git a/web/ai_translate_workflows.py b/web/ai_translate_workflows.py deleted file mode 100644 index 688e00ee..00000000 --- a/web/ai_translate_workflows.py +++ /dev/null @@ -1,151 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -""" -AI翻译工作流i18n - 使用完整短语翻译而非词汇替换 -""" - -import json -import re -from typing import Dict, List - -def has_chinese(text: str) -> bool: - """检查文本是否包含中文字符""" - return bool(re.search(r'[\u4e00-\u9fff]', text)) - -def load_translations() -> Dict: - """加载翻译文件""" - with open('workflows_translations.json', 'r', encoding='utf-8') as f: - return json.load(f) - -def save_translations(data: Dict): - """保存翻译文件""" - with open('workflows_translations.json', 'w', encoding='utf-8') as f: - json.dump(data, f, ensure_ascii=False, indent=2) - -# 完整短语翻译字典 - 第一批(基础UI和操作) -TRANSLATIONS_BATCH_1 = { - # 基础操作 - "工作流": {"es-ES": "Flujo de trabajo", "ru-RU": "Рабочий процесс", "th-TH": "เวิร์กโฟลว์", "vi-VN": "Quy trình làm việc"}, - "节点": {"es-ES": "Nodo", "ru-RU": "Узел", "th-TH": "โหนด", "vi-VN": "Nút"}, - "创建工作流": {"es-ES": "Crear flujo de trabajo", "ru-RU": "Создать рабочий процесс", "th-TH": "สร้างเวิร์กโฟลว์", "vi-VN": "Tạo quy trình làm việc"}, - "从侧边栏选择": {"es-ES": "Seleccionar desde la barra lateral", "ru-RU": "Выбрать из боковой панели", "th-TH": "เลือกจากแถบด้านข้าง", "vi-VN": "Chọn từ thanh bên"}, - "编辑工作流": {"es-ES": "Editar flujo de trabajo", "ru-RU": "Редактировать рабочий процесс", "th-TH": "แก้ไขเวิร์กโฟลว์", "vi-VN": "Chỉnh sửa quy trình làm việc"}, - "新建工作流": {"es-ES": "Nuevo flujo de trabajo", "ru-RU": "Новый рабочий процесс", "th-TH": "เวิร์กโฟลว์ใหม่", "vi-VN": "Quy trình làm việc mới"}, - "获取工作流列表失败": {"es-ES": "Error al obtener la lista de flujos de trabajo", "ru-RU": "Не удалось получить список рабочих процессов", "th-TH": "ไม่สามารถรับรายการเวิร์กโฟลว์", "vi-VN": "Không thể lấy danh sách quy trình làm việc"}, - "工作流名称": {"es-ES": "Nombre del flujo de trabajo", "ru-RU": "Название рабочего процесса", "th-TH": "ชื่อเวิร์กโฟลว์", "vi-VN": "Tên quy trình làm việc"}, - "工作流描述": {"es-ES": "Descripción del flujo de trabajo", "ru-RU": "Описание рабочего процесса", "th-TH": "คำอธิบายเวิร์กโฟลว์", "vi-VN": "Mô tả quy trình làm việc"}, - "工作流名称不能为空": {"es-ES": "El nombre del flujo de trabajo no puede estar vacío", "ru-RU": "Название рабочего процесса не может быть пустым", "th-TH": "ชื่อเวิร์กโฟลว์ไม่สามารถว่างเปล่า", "vi-VN": "Tên quy trình làm việc không được để trống"}, - "默认工作流描述": {"es-ES": "Descripción predeterminada del flujo de trabajo", "ru-RU": "Описание рабочего процесса по умолчанию", "th-TH": "คำอธิบายเวิร์กโฟลว์เริ่มต้น", "vi-VN": "Mô tả quy trình làm việc mặc định"}, - - # 成功/失败消息 - "保存成功": {"es-ES": "Guardado exitosamente", "ru-RU": "Успешно сохранено", "th-TH": "บันทึกสำเร็จ", "vi-VN": "Lưu thành công"}, - "保存失败": {"es-ES": "Error al guardar", "ru-RU": "Не удалось сохранить", "th-TH": "บันทึกล้มเหลว", "vi-VN": "Lưu thất bại"}, - "创建成功": {"es-ES": "Creado exitosamente", "ru-RU": "Успешно создано", "th-TH": "สร้างสำเร็จ", "vi-VN": "Tạo thành công"}, - "创建失败": {"es-ES": "Error al crear", "ru-RU": "Не удалось создать", "th-TH": "สร้างล้มเหลว", "vi-VN": "Tạo thất bại"}, - "删除成功": {"es-ES": "Eliminado exitosamente", "ru-RU": "Успешно удалено", "th-TH": "ลบสำเร็จ", "vi-VN": "Xóa thành công"}, - "删除失败": {"es-ES": "Error al eliminar", "ru-RU": "Не удалось удалить", "th-TH": "ลบล้มเหลว", "vi-VN": "Xóa thất bại"}, - "复制成功": {"es-ES": "Copiado exitosamente", "ru-RU": "Успешно скопировано", "th-TH": "คัดลอกสำเร็จ", "vi-VN": "Sao chép thành công"}, - "复制失败": {"es-ES": "Error al copiar", "ru-RU": "Не удалось скопировать", "th-TH": "คัดลอกล้มเหลว", "vi-VN": "Sao chép thất bại"}, - "导出成功": {"es-ES": "Exportado exitosamente", "ru-RU": "Успешно экспортировано", "th-TH": "ส่งออกสำเร็จ", "vi-VN": "Xuất thành công"}, - "导入成功": {"es-ES": "Importado exitosamente", "ru-RU": "Успешно импортировано", "th-TH": "นำเข้าสำเร็จ", "vi-VN": "Nhập thành công"}, - "导入失败": {"es-ES": "Error al importar", "ru-RU": "Не удалось импортировать", "th-TH": "นำเข้าล้มเหลว", "vi-VN": "Nhập thất bại"}, - "发布成功": {"es-ES": "Publicado exitosamente", "ru-RU": "Успешно опубликовано", "th-TH": "เผยแพร่สำเร็จ", "vi-VN": "Xuất bản thành công"}, - "发布失败": {"es-ES": "Error al publicar", "ru-RU": "Не удалось опубликовать", "th-TH": "เผยแพร่ล้มเหลว", "vi-VN": "Xuất bản thất bại"}, - "获取工作流失败": {"es-ES": "Error al obtener el flujo de trabajo", "ru-RU": "Не удалось получить рабочий процесс", "th-TH": "ไม่สามารถรับเวิร์กโฟลว์", "vi-VN": "Không thể lấy quy trình làm việc"}, - "加载失败": {"es-ES": "Error al cargar", "ru-RU": "Не удалось загрузить", "th-TH": "โหลดล้มเหลว", "vi-VN": "Tải thất bại"}, - - # 确认对话框 - "确认删除": {"es-ES": "Confirmar eliminación", "ru-RU": "Подтвердить удаление", "th-TH": "ยืนยันการลบ", "vi-VN": "Xác nhận xóa"}, - "确认删除此工作流吗?": {"es-ES": "¿Confirmar la eliminación de este flujo de trabajo?", "ru-RU": "Подтвердить удаление этого рабочего процесса?", "th-TH": "ยืนยันการลบเวิร์กโฟลว์นี้หรือไม่?", "vi-VN": "Xác nhận xóa quy trình làm việc này?"}, - - # 基本操作 - "导出": {"es-ES": "Exportar", "ru-RU": "Экспорт", "th-TH": "ส่งออก", "vi-VN": "Xuất"}, - "导入": {"es-ES": "Importar", "ru-RU": "Импорт", "th-TH": "นำเข้า", "vi-VN": "Nhập"}, - "发布": {"es-ES": "Publicar", "ru-RU": "Опубликовать", "th-TH": "เผยแพร่", "vi-VN": "Xuất bản"}, - "配置": {"es-ES": "Configuración", "ru-RU": "Конфигурация", "th-TH": "การกำหนดค่า", "vi-VN": "Cấu hình"}, - "执行记录": {"es-ES": "Registros de ejecución", "ru-RU": "Записи выполнения", "th-TH": "บันทึกการดำเนินการ", "vi-VN": "Bản ghi thực thi"}, - "编辑器": {"es-ES": "Editor", "ru-RU": "Редактор", "th-TH": "ตัวแก้ไข", "vi-VN": "Trình chỉnh sửa"}, - "调试聊天": {"es-ES": "Chat de depuración", "ru-RU": "Отладочный чат", "th-TH": "แชทดีบัก", "vi-VN": "Chat gỡ lỗi"}, - - # 配置部分 - "基本信息": {"es-ES": "Información básica", "ru-RU": "Основная информация", "th-TH": "ข้อมูลพื้นฐาน", "vi-VN": "Thông tin cơ bản"}, - "基本信息描述": {"es-ES": "Descripción de información básica", "ru-RU": "Описание основной информации", "th-TH": "คำอธิบายข้อมูลพื้นฐาน", "vi-VN": "Mô tả thông tin cơ bản"}, - "危险区域": {"es-ES": "Zona peligrosa", "ru-RU": "Опасная зона", "th-TH": "พื้นที่อันตราย", "vi-VN": "Khu vực nguy hiểm"}, - "危险区域描述": {"es-ES": "Descripción de zona peligrosa", "ru-RU": "Описание опасной зоны", "th-TH": "คำอธิบายพื้นที่อันตราย", "vi-VN": "Mô tả khu vực nguy hiểm"}, - "删除工作流操作": {"es-ES": "Eliminar operación de flujo de trabajo", "ru-RU": "Удалить операцию рабочего процесса", "th-TH": "ลบการดำเนินการเวิร์กโฟลว์", "vi-VN": "Xóa thao tác quy trình làm việc"}, - "删除工作流提示": {"es-ES": "Sugerencia de eliminación de flujo de trabajo", "ru-RU": "Подсказка удаления рабочего процесса", "th-TH": "คำแนะนำการลบเวิร์กโฟลว์", "vi-VN": "Gợi ý xóa quy trình làm việc"}, - "删除工作流": {"es-ES": "Eliminar flujo de trabajo", "ru-RU": "Удалить рабочий процесс", "th-TH": "ลบเวิร์กโฟลว์", "vi-VN": "Xóa quy trình làm việc"}, - "删除确认描述": {"es-ES": "Descripción de confirmación de eliminación", "ru-RU": "Описание подтверждения удаления", "th-TH": "คำอธิบายการยืนยันการลบ", "vi-VN": "Mô tả xác nhận xóa"}, - - # 表单字段 - "名称": {"es-ES": "Nombre", "ru-RU": "Название", "th-TH": "ชื่อ", "vi-VN": "Tên"}, - "名称占位符": {"es-ES": "Marcador de posición de nombre", "ru-RU": "Заполнитель имени", "th-TH": "ตัวยึดตำแหน่งชื่อ", "vi-VN": "Trình giữ chỗ tên"}, - "描述占位符": {"es-ES": "Marcador de posición de descripción", "ru-RU": "Заполнитель описания", "th-TH": "ตัวยึดตำแหน่งคำอธิบาย", "vi-VN": "Trình giữ chỗ mô tả"}, - "已启用": {"es-ES": "Habilitado", "ru-RU": "Включено", "th-TH": "เปิดใช้งาน", "vi-VN": "Đã bật"}, - "已启用描述": {"es-ES": "Descripción habilitada", "ru-RU": "Описание включено", "th-TH": "คำอธิบายเปิดใช้งาน", "vi-VN": "Mô tả đã bật"}, - "加载中": {"es-ES": "Cargando", "ru-RU": "Загрузка", "th-TH": "กำลังโหลด", "vi-VN": "Đang tải"}, - "信息": {"es-ES": "Información", "ru-RU": "Информация", "th-TH": "ข้อมูล", "vi-VN": "Thông tin"}, - - # 统计信息 - "版本": {"es-ES": "Versión", "ru-RU": "Версия", "th-TH": "เวอร์ชัน", "vi-VN": "Phiên bản"}, - "创建时间": {"es-ES": "Tiempo de creación", "ru-RU": "Время создания", "th-TH": "เวลาสร้าง", "vi-VN": "Thời gian tạo"}, - "更新时间": {"es-ES": "Tiempo de actualización", "ru-RU": "Время обновления", "th-TH": "เวลาอัปเดต", "vi-VN": "Thời gian cập nhật"}, - "总执行次数": {"es-ES": "Total de ejecuciones", "ru-RU": "Всего выполнений", "th-TH": "จำนวนการดำเนินการทั้งหมด", "vi-VN": "Tổng số lần thực thi"}, - "统计": {"es-ES": "Estadísticas", "ru-RU": "Статистика", "th-TH": "สถิติ", "vi-VN": "Thống kê"}, - "成功次数": {"es-ES": "Número de éxitos", "ru-RU": "Количество успехов", "th-TH": "จำนวนความสำเร็จ", "vi-VN": "Số lần thành công"}, - "成功率": {"es-ES": "Tasa de éxito", "ru-RU": "Процент успеха", "th-TH": "อัตราความสำเร็จ", "vi-VN": "Tỷ lệ thành công"}, - "平均耗时": {"es-ES": "Duración promedio", "ru-RU": "Средняя продолжительность", "th-TH": "ระยะเวลาเฉลี่ย", "vi-VN": "Thời gian trung bình"}, - "每次执行": {"es-ES": "Por ejecución", "ru-RU": "За выполнение", "th-TH": "ต่อการดำเนินการ", "vi-VN": "Mỗi lần thực thi"}, - "失败的执行": {"es-ES": "Ejecuciones fallidas", "ru-RU": "Неудачные выполнения", "th-TH": "การดำเนินการที่ล้มเหลว", "vi-VN": "Các lần thực thi thất bại"}, - "最后执行": {"es-ES": "Última ejecución", "ru-RU": "Последнее выполнение", "th-TH": "การดำเนินการล่าสุด", "vi-VN": "Lần thực thi cuối"}, -} - -def translate_batch(data: Dict, translations: Dict[str, Dict[str, str]]): - """应用一批翻译""" - count = 0 - for key, trans_obj in data['translations'].items(): - zh_text = trans_obj.get('zh-Hans', '') - if not zh_text: - continue - - # 检查是否有完整短语翻译 - if zh_text in translations: - for lang in ['es-ES', 'ru-RU', 'th-TH', 'vi-VN']: - if trans_obj.get(lang) == 'TODO': - trans_obj[lang] = translations[zh_text][lang] - count += 1 - - return count - -def main(): - print("🚀 开始AI翻译工作流i18n...") - - # 加载数据 - data = load_translations() - - # 应用第一批翻译 - print("\n📝 应用第一批翻译(基础UI和操作)...") - count = translate_batch(data, TRANSLATIONS_BATCH_1) - print(f" ✅ 已翻译 {count} 个条目") - - # 保存 - save_translations(data) - print("\n✅ 翻译完成并已保存") - - # 检查是否还有中文字符 - print("\n🔍 检查翻译质量...") - problem_count = 0 - for key, trans_obj in data['translations'].items(): - for lang in ['es-ES', 'ru-RU', 'th-TH', 'vi-VN']: - text = trans_obj.get(lang, '') - if text != 'TODO' and has_chinese(text): - problem_count += 1 - print(f" ⚠️ {key} ({lang}): {text}") - - if problem_count == 0: - print(" ✅ 所有翻译都不包含中文字符") - else: - print(f" ⚠️ 发现 {problem_count} 个翻译仍包含中文字符") - -if __name__ == '__main__': - main() diff --git a/web/analyze_missing_translations.py b/web/analyze_missing_translations.py deleted file mode 100644 index ae38cff2..00000000 --- a/web/analyze_missing_translations.py +++ /dev/null @@ -1,141 +0,0 @@ -#!/usr/bin/env python3 -""" -分析所有语言文件中缺失的翻译键 -对比 zh-Hans.ts(完整翻译)和其他语言文件,找出所有英文键 -""" - -import re -from pathlib import Path -from typing import Dict, List, Set - -def extract_keys_from_ts(file_path: Path) -> Dict[str, str]: - """从 TypeScript 文件中提取所有键值对""" - content = file_path.read_text(encoding='utf-8') - - # 匹配键值对:key: 'value' 或 key: "value" - pattern = r"(\w+):\s*['\"]([^'\"]+)['\"]" - matches = re.findall(pattern, content) - - return dict(matches) - -def is_english(text: str) -> bool: - """判断文本是否主要是英文""" - # 如果文本中英文字符占比超过50%,认为是英文 - english_chars = sum(1 for c in text if c.isascii() and c.isalpha()) - total_chars = sum(1 for c in text if c.isalpha()) - - if total_chars == 0: - return False - - return english_chars / total_chars > 0.5 - -def analyze_file(file_path: Path, reference_keys: Dict[str, str]) -> Dict[str, List[str]]: - """分析单个文件,找出需要翻译的英文键""" - keys = extract_keys_from_ts(file_path) - - english_keys = [] - missing_keys = [] - - for key, value in keys.items(): - if is_english(value): - english_keys.append(f"{key}: '{value}'") - - # 找出参考文件中有但当前文件缺失的键 - for ref_key in reference_keys: - if ref_key not in keys: - missing_keys.append(ref_key) - - return { - 'english_keys': english_keys, - 'missing_keys': missing_keys, - 'total_keys': len(keys) - } - -def main(): - locales_dir = Path(__file__).parent / 'src' / 'i18n' / 'locales' - - # 读取参考文件(简体中文,完整翻译) - zh_hans_path = locales_dir / 'zh-Hans.ts' - print(f"读取参考文件: {zh_hans_path}") - reference_keys = extract_keys_from_ts(zh_hans_path) - print(f"参考文件包含 {len(reference_keys)} 个键\n") - - # 分析所有非中文语言文件 - target_files = [ - 'ja-JP.ts', - 'zh-Hant.ts', - 'es-ES.ts', - 'ru-RU.ts', - 'th-TH.ts', - 'vi-VN.ts' - ] - - results = {} - - for filename in target_files: - file_path = locales_dir / filename - if not file_path.exists(): - print(f"⚠️ 文件不存在: {filename}") - continue - - print(f"\n{'='*60}") - print(f"分析文件: {filename}") - print(f"{'='*60}") - - result = analyze_file(file_path, reference_keys) - results[filename] = result - - print(f"总键数: {result['total_keys']}") - print(f"英文键数: {len(result['english_keys'])}") - print(f"缺失键数: {len(result['missing_keys'])}") - - if result['english_keys']: - print(f"\n前10个英文键示例:") - for key in result['english_keys'][:10]: - print(f" - {key}") - - if result['missing_keys']: - print(f"\n前10个缺失键示例:") - for key in result['missing_keys'][:10]: - print(f" - {key}") - - # 汇总统计 - print(f"\n\n{'='*60}") - print("汇总统计") - print(f"{'='*60}") - - total_english = sum(len(r['english_keys']) for r in results.values()) - total_missing = sum(len(r['missing_keys']) for r in results.values()) - - print(f"总计需要翻译的英文键: {total_english}") - print(f"总计缺失的键: {total_missing}") - print(f"总计需要处理: {total_english + total_missing}") - - # 保存详细报告 - report_path = Path(__file__).parent.parent / 'plans' / 'translation-analysis-report.txt' - with open(report_path, 'w', encoding='utf-8') as f: - f.write("翻译分析报告\n") - f.write("="*60 + "\n\n") - - for filename, result in results.items(): - f.write(f"\n文件: {filename}\n") - f.write(f"总键数: {result['total_keys']}\n") - f.write(f"英文键数: {len(result['english_keys'])}\n") - f.write(f"缺失键数: {len(result['missing_keys'])}\n") - - if result['english_keys']: - f.write(f"\n英文键列表:\n") - for key in result['english_keys']: - f.write(f" {key}\n") - - if result['missing_keys']: - f.write(f"\n缺失键列表:\n") - for key in result['missing_keys']: - f.write(f" {key}\n") - - f.write("\n" + "="*60 + "\n") - - print(f"\n详细报告已保存到: {report_path}") - -if __name__ == '__main__': - main() diff --git a/web/apply_workflows_translations.py b/web/apply_workflows_translations.py deleted file mode 100644 index 1b8347cb..00000000 --- a/web/apply_workflows_translations.py +++ /dev/null @@ -1,262 +0,0 @@ -#!/usr/bin/env python3 -""" -应用workflows翻译到语言文件 - -使用方法: -1. 编辑 workflows_translations.json 文件 -2. 将 'TODO' 替换为实际翻译 -3. 运行此脚本:python3 apply_workflows_translations.py - -脚本会: -- 读取 workflows_translations.json -- 识别已完成的翻译(非"TODO") -- 应用到对应的语言文件 -- 生成进度报告 -- 支持增量应用(可以分批翻译) -""" - -import json -import re -from pathlib import Path -from typing import Dict, List, Tuple, Set - - -def load_translations() -> Dict: - """加载翻译JSON文件""" - json_path = Path(__file__).parent / 'workflows_translations.json' - - if not json_path.exists(): - raise FileNotFoundError(f"找不到翻译文件: {json_path}") - - with open(json_path, 'r', encoding='utf-8') as f: - return json.load(f) - - -def get_completed_translations(translations_data: Dict) -> Dict[str, Dict[str, str]]: - """ - 获取已完成的翻译 - - 返回格式: - { - 'ja-JP': {'title': '工作流对话', 'description': '...', ...}, - 'zh-Hant': {...}, - ... - } - """ - translations = translations_data.get('translations', {}) - languages = ['ja-JP', 'zh-Hant', 'es-ES', 'ru-RU', 'th-TH', 'vi-VN'] - - completed = {lang: {} for lang in languages} - - for key, values in translations.items(): - for lang in languages: - translation = values.get(lang, 'TODO') - if translation != 'TODO' and translation.strip(): - completed[lang][key] = translation - - return completed - - -def apply_translations_to_file(file_path: Path, translations: Dict[str, str], lang_code: str) -> Tuple[int, List[str]]: - """ - 应用翻译到指定语言文件 - - 返回:(成功应用的数量, 失败的键列表) - """ - if not file_path.exists(): - print(f"⚠️ 文件不存在: {file_path}") - return 0, list(translations.keys()) - - # 读取文件内容 - with open(file_path, 'r', encoding='utf-8') as f: - content = f.read() - - # 找到workflows部分的起始和结束位置 - workflows_start = content.find('workflows: {') - if workflows_start == -1: - print(f"⚠️ 找不到workflows部分: {file_path}") - return 0, list(translations.keys()) - - # 找到workflows部分的结束位置(匹配的闭合大括号) - brace_count = 0 - workflows_end = workflows_start - for i in range(workflows_start, len(content)): - if content[i] == '{': - brace_count += 1 - elif content[i] == '}': - brace_count -= 1 - if brace_count == 0: - workflows_end = i + 1 - break - - if workflows_end == workflows_start: - print(f"⚠️ 无法确定workflows部分的结束位置: {file_path}") - return 0, list(translations.keys()) - - # 提取workflows部分 - before_workflows = content[:workflows_start] - workflows_section = content[workflows_start:workflows_end] - after_workflows = content[workflows_end:] - - # 应用翻译 - success_count = 0 - failed_keys = [] - - for key, translation in translations.items(): - # 转义特殊字符 - escaped_key = re.escape(key) - - # 匹配模式:key: 'value', 或 key: "value", - # 支持多行和注释 - patterns = [ - # 单引号,可能有尾随逗号和注释 - rf"(\s+{escaped_key}:\s*)'[^']*'(,?\s*(?://.*)?(?:\n|$))", - # 双引号,可能有尾随逗号和注释 - rf'(\s+{escaped_key}:\s*)"[^"]*"(,?\s*(?://.*)?(?:\n|$))', - ] - - replaced = False - for pattern in patterns: - if re.search(pattern, workflows_section): - # 转义翻译文本中的单引号 - escaped_translation = translation.replace("'", "\\'") - replacement = rf"\1'{escaped_translation}'\2" - workflows_section = re.sub(pattern, replacement, workflows_section) - replaced = True - success_count += 1 - break - - if not replaced: - failed_keys.append(key) - - # 重新组合文件内容 - new_content = before_workflows + workflows_section + after_workflows - - # 写回文件 - with open(file_path, 'w', encoding='utf-8') as f: - f.write(new_content) - - return success_count, failed_keys - - -def update_progress_in_json(json_path: Path, completed_by_lang: Dict[str, int]): - """更新JSON文件中的进度信息""" - with open(json_path, 'r', encoding='utf-8') as f: - data = json.load(f) - - # 计算总的已翻译键数(取所有语言的平均值) - total_translated = sum(completed_by_lang.values()) // len(completed_by_lang) if completed_by_lang else 0 - total_keys = data.get('_progress', {}).get('total_keys', 0) - - data['_progress']['translated_keys'] = total_translated - data['_progress']['remaining_keys'] = total_keys - total_translated - data['_progress']['by_language'] = completed_by_lang - - with open(json_path, 'w', encoding='utf-8') as f: - json.dump(data, f, ensure_ascii=False, indent=2) - - -def generate_report(results: Dict[str, Tuple[int, List[str]]], total_keys: int): - """生成应用报告""" - print("\n" + "="*80) - print("📊 Workflows翻译应用报告") - print("="*80) - - total_applied = 0 - - for lang, (success_count, failed_keys) in results.items(): - total_applied += success_count - success_rate = (success_count / total_keys * 100) if total_keys > 0 else 0 - - print(f"\n【{lang}】") - print(f" ✅ 成功应用: {success_count}/{total_keys} ({success_rate:.1f}%)") - - if failed_keys: - print(f" ❌ 失败: {len(failed_keys)} 个键") - if len(failed_keys) <= 10: - print(f" 失败的键: {', '.join(failed_keys)}") - else: - print(f" 失败的键(前10个): {', '.join(failed_keys[:10])}...") - - print("\n" + "-"*80) - avg_applied = total_applied // len(results) if results else 0 - avg_rate = (avg_applied / total_keys * 100) if total_keys > 0 else 0 - print(f"📈 总体进度: {avg_applied}/{total_keys} ({avg_rate:.1f}%)") - print(f"📝 剩余待翻译: {total_keys - avg_applied} 个键") - print("="*80) - - -def main(): - print("🚀 开始应用workflows翻译...") - - # 加载翻译数据 - print("\n📖 读取翻译文件...") - translations_data = load_translations() - total_keys = translations_data.get('_progress', {}).get('total_keys', 0) - print(f" 总键数: {total_keys}") - - # 获取已完成的翻译 - print("\n🔍 识别已完成的翻译...") - completed = get_completed_translations(translations_data) - - for lang, trans in completed.items(): - print(f" {lang}: {len(trans)} 个键已翻译") - - # 如果没有任何翻译,提示用户 - if all(len(trans) == 0 for trans in completed.values()): - print("\n⚠️ 没有发现任何已完成的翻译(所有值都是'TODO')") - print("💡 请先编辑 workflows_translations.json 文件,将 'TODO' 替换为实际翻译") - return - - # 应用翻译到各个语言文件 - print("\n✏️ 应用翻译到语言文件...") - - locales_dir = Path(__file__).parent / 'src' / 'i18n' / 'locales' - - language_files = { - 'ja-JP': locales_dir / 'ja-JP.ts', - 'zh-Hant': locales_dir / 'zh-Hant.ts', - 'es-ES': locales_dir / 'es-ES.ts', - 'ru-RU': locales_dir / 'ru-RU.ts', - 'th-TH': locales_dir / 'th-TH.ts', - 'vi-VN': locales_dir / 'vi-VN.ts', - } - - results = {} - completed_by_lang = {} - - for lang, file_path in language_files.items(): - translations = completed[lang] - if not translations: - print(f" ⏭️ 跳过 {lang}(没有已完成的翻译)") - results[lang] = (0, []) - completed_by_lang[lang] = 0 - continue - - print(f" 📝 处理 {lang}...") - success_count, failed_keys = apply_translations_to_file(file_path, translations, lang) - results[lang] = (success_count, failed_keys) - completed_by_lang[lang] = success_count - - if success_count > 0: - print(f" ✅ 成功应用 {success_count} 个翻译") - if failed_keys: - print(f" ⚠️ {len(failed_keys)} 个键应用失败") - - # 更新JSON文件中的进度 - print("\n📊 更新进度信息...") - json_path = Path(__file__).parent / 'workflows_translations.json' - update_progress_in_json(json_path, completed_by_lang) - - # 生成报告 - generate_report(results, total_keys) - - print("\n✅ 翻译应用完成!") - print("\n💡 提示:") - print(" 1. 继续编辑 workflows_translations.json 翻译更多键") - print(" 2. 再次运行此脚本应用新的翻译") - print(" 3. 重复以上步骤直到所有翻译完成") - - -if __name__ == '__main__': - main() diff --git a/web/batch_translate_workflows.py b/web/batch_translate_workflows.py deleted file mode 100644 index 0516dc18..00000000 --- a/web/batch_translate_workflows.py +++ /dev/null @@ -1,351 +0,0 @@ -#!/usr/bin/env python3 -""" -批量翻译workflows的多语言文件 -支持:西班牙语(es-ES)、俄语(ru-RU)、泰语(th-TH)、越南语(vi-VN) -""" - -import json -import os -from pathlib import Path -from typing import Dict - -# 翻译映射表 - 基于中文原文的专业翻译 -TRANSLATIONS = { - # 基础UI文本 - "title": { - "es-ES": "Conversación de Flujo de Trabajo", - "ru-RU": "Диалог Рабочего Процесса", - "th-TH": "การสนทนาเวิร์กโฟลว์", - "vi-VN": "Hội thoại Quy trình" - }, - "description": { - "es-ES": "Descripción", - "ru-RU": "Описание", - "th-TH": "คำอธิบาย", - "vi-VN": "Mô tả" - }, - "createWorkflow": { - "es-ES": "Crear Flujo de Trabajo", - "ru-RU": "Создать Рабочий Процесс", - "th-TH": "สร้างเวิร์กโฟลว์", - "vi-VN": "Tạo Quy trình" - }, - "selectFromSidebar": { - "es-ES": "Seleccione un flujo de trabajo de la barra lateral", - "ru-RU": "Выберите рабочий процесс из боковой панели", - "th-TH": "เลือกเวิร์กโฟลว์จากแถบด้านข้าง", - "vi-VN": "Chọn một quy trình từ thanh bên" - }, - "editWorkflow": { - "es-ES": "Editar Flujo de Trabajo", - "ru-RU": "Редактировать Рабочий Процесс", - "th-TH": "แก้ไขเวิร์กโฟลว์", - "vi-VN": "Chỉnh sửa Quy trình" - }, - "newWorkflow": { - "es-ES": "Nuevo Flujo de Trabajo", - "ru-RU": "Новый Рабочий Процесс", - "th-TH": "เวิร์กโฟลว์ใหม่", - "vi-VN": "Quy trình Mới" - }, - "getWorkflowListError": { - "es-ES": "Error al obtener la lista de flujos de trabajo:", - "ru-RU": "Ошибка получения списка рабочих процессов:", - "th-TH": "ไม่สามารถรับรายการเวิร์กโฟลว์:", - "vi-VN": "Lỗi khi lấy danh sách quy trình:" - }, - "workflowName": { - "es-ES": "Nombre del Flujo de Trabajo", - "ru-RU": "Название Рабочего Процесса", - "th-TH": "ชื่อเวิร์กโฟลว์", - "vi-VN": "Tên Quy trình" - }, - "workflowDescription": { - "es-ES": "Descripción del Flujo de Trabajo", - "ru-RU": "Описание Рабочего Процесса", - "th-TH": "คำอธิบายเวิร์กโฟลว์", - "vi-VN": "Mô tả Quy trình" - }, -} - - -def load_translations_json(): - """加载翻译JSON文件""" - json_path = Path(__file__).parent / 'workflows_translations.json' - - if not json_path.exists(): - raise FileNotFoundError(f"找不到翻译文件: {json_path}") - - with open(json_path, 'r', encoding='utf-8') as f: - return json.load(f) - - -def save_translations_json(data): - """保存翻译JSON文件""" - json_path = Path(__file__).parent / 'workflows_translations.json' - - with open(json_path, 'w', encoding='utf-8') as f: - json.dump(data, f, ensure_ascii=False, indent=2) - - -def translate_text(text: str, target_lang: str) -> str: - """ - 翻译文本到目标语言 - 使用规则和模式匹配进行翻译 - """ - # 如果有预定义翻译,直接使用 - if text in TRANSLATIONS and target_lang in TRANSLATIONS[text]: - return TRANSLATIONS[text][target_lang] - - # 通用翻译规则 - common_translations = { - "es-ES": { - # 常用词汇 - "工作流": "Flujo de Trabajo", - "节点": "Nodo", - "触发器": "Disparador", - "执行": "Ejecutar", - "调试": "Depurar", - "配置": "Configuración", - "变量": "Variable", - "条件": "Condición", - "循环": "Bucle", - "等待": "Esperar", - "结束": "Fin", - "开始": "Inicio", - "消息": "Mensaje", - "发送": "Enviar", - "接收": "Recibir", - "错误": "Error", - "成功": "Éxito", - "失败": "Fallo", - "保存": "Guardar", - "取消": "Cancelar", - "删除": "Eliminar", - "编辑": "Editar", - "添加": "Agregar", - "创建": "Crear", - "名称": "Nombre", - "描述": "Descripción", - "类型": "Tipo", - "值": "Valor", - "参数": "Parámetro", - "输入": "Entrada", - "输出": "Salida", - "请": "Por favor", - "选择": "Seleccionar", - "确认": "Confirmar", - "提示": "Aviso", - "警告": "Advertencia", - "信息": "Información", - }, - "ru-RU": { - "工作流": "Рабочий Процесс", - "节点": "Узел", - "触发器": "Триггер", - "执行": "Выполнить", - "调试": "Отладка", - "配置": "Конфигурация", - "变量": "Переменная", - "条件": "Условие", - "循环": "Цикл", - "等待": "Ожидание", - "结束": "Конец", - "开始": "Начало", - "消息": "Сообщение", - "发送": "Отправить", - "接收": "Получить", - "错误": "Ошибка", - "成功": "Успех", - "失败": "Неудача", - "保存": "Сохранить", - "取消": "Отмена", - "删除": "Удалить", - "编辑": "Редактировать", - "添加": "Добавить", - "创建": "Создать", - "名称": "Название", - "描述": "Описание", - "类型": "Тип", - "值": "Значение", - "参数": "Параметр", - "输入": "Вход", - "输出": "Выход", - "请": "Пожалуйста", - "选择": "Выбрать", - "确认": "Подтвердить", - "提示": "Подсказка", - "警告": "Предупреждение", - "信息": "Информация", - }, - "th-TH": { - "工作流": "เวิร์กโฟลว์", - "节点": "โหนด", - "触发器": "ทริกเกอร์", - "执行": "ดำเนินการ", - "调试": "ดีบัก", - "配置": "การกำหนดค่า", - "变量": "ตัวแปร", - "条件": "เงื่อนไข", - "循环": "วนซ้ำ", - "等待": "รอ", - "结束": "สิ้นสุด", - "开始": "เริ่มต้น", - "消息": "ข้อความ", - "发送": "ส่ง", - "接收": "รับ", - "错误": "ข้อผิดพลาด", - "成功": "สำเร็จ", - "失败": "ล้มเหลว", - "保存": "บันทึก", - "取消": "ยกเลิก", - "删除": "ลบ", - "编辑": "แก้ไข", - "添加": "เพิ่ม", - "创建": "สร้าง", - "名称": "ชื่อ", - "描述": "คำอธิบาย", - "类型": "ประเภท", - "值": "ค่า", - "参数": "พารามิเตอร์", - "输入": "อินพุต", - "输出": "เอาต์พุต", - "请": "กรุณา", - "选择": "เลือก", - "确认": "ยืนยัน", - "提示": "คำแนะนำ", - "警告": "คำเตือน", - "信息": "ข้อมูล", - }, - "vi-VN": { - "工作流": "Quy trình", - "节点": "Nút", - "触发器": "Trình kích hoạt", - "执行": "Thực thi", - "调试": "Gỡ lỗi", - "配置": "Cấu hình", - "变量": "Biến", - "条件": "Điều kiện", - "循环": "Vòng lặp", - "等待": "Chờ", - "结束": "Kết thúc", - "开始": "Bắt đầu", - "消息": "Tin nhắn", - "发送": "Gửi", - "接收": "Nhận", - "错误": "Lỗi", - "成功": "Thành công", - "失败": "Thất bại", - "保存": "Lưu", - "取消": "Hủy", - "删除": "Xóa", - "编辑": "Chỉnh sửa", - "添加": "Thêm", - "创建": "Tạo", - "名称": "Tên", - "描述": "Mô tả", - "类型": "Loại", - "值": "Giá trị", - "参数": "Tham số", - "输入": "Đầu vào", - "输出": "Đầu ra", - "请": "Vui lòng", - "选择": "Chọn", - "确认": "Xác nhận", - "提示": "Gợi ý", - "警告": "Cảnh báo", - "信息": "Thông tin", - } - } - - # 尝试使用通用翻译规则 - if target_lang in common_translations: - result = text - for zh, translation in common_translations[target_lang].items(): - result = result.replace(zh, translation) - if result != text: - return result - - # 如果没有匹配的翻译规则,返回原文 - return text - - -def batch_translate(): - """批量翻译所有TODO项""" - print("🚀 开始批量翻译workflows...") - print("=" * 80) - - # 加载翻译数据 - data = load_translations_json() - translations = data.get('translations', {}) - - target_languages = ['es-ES', 'ru-RU', 'th-TH', 'vi-VN'] - - stats = {lang: {'total': 0, 'translated': 0} for lang in target_languages} - - # 遍历所有键进行翻译 - for key, values in translations.items(): - zh_hans = values.get('zh-Hans', '') - - if not zh_hans or zh_hans == 'TODO': - continue - - for lang in target_languages: - stats[lang]['total'] += 1 - - current_value = values.get(lang, 'TODO') - - # 如果已经翻译过,跳过 - if current_value != 'TODO' and current_value.strip(): - stats[lang]['translated'] += 1 - continue - - # 执行翻译 - translated = translate_text(zh_hans, lang) - - # 更新翻译 - if translated and translated != zh_hans: - values[lang] = translated - stats[lang]['translated'] += 1 - print(f"✅ [{lang}] {key}: {zh_hans} -> {translated}") - - # 保存更新后的数据 - save_translations_json(data) - - # 显示统计信息 - print("\n" + "=" * 80) - print("📊 翻译统计:") - print("=" * 80) - - for lang in target_languages: - total = stats[lang]['total'] - translated = stats[lang]['translated'] - percentage = (translated / total * 100) if total > 0 else 0 - - lang_names = { - 'es-ES': '西班牙语', - 'ru-RU': '俄语', - 'th-TH': '泰语', - 'vi-VN': '越南语' - } - - print(f"\n【{lang_names[lang]} ({lang})】") - print(f" 总计: {total}") - print(f" 已翻译: {translated}") - print(f" 完成度: {percentage:.1f}%") - - print("\n" + "=" * 80) - print("✅ 批量翻译完成!") - print("\n💡 下一步:") - print(" 1. 运行 python3 check_translation_progress.py 查看进度") - print(" 2. 运行 python3 apply_workflows_translations.py 应用翻译") - print("=" * 80) - - -if __name__ == '__main__': - try: - batch_translate() - except Exception as e: - print(f"\n❌ 错误: {e}") - import traceback - traceback.print_exc() diff --git a/web/batch_translate_zh_hant.py b/web/batch_translate_zh_hant.py deleted file mode 100644 index 42a969a4..00000000 --- a/web/batch_translate_zh_hant.py +++ /dev/null @@ -1,280 +0,0 @@ -#!/usr/bin/env python3 -""" -批量翻译繁体中文workflows部分 -基于简体中文进行繁体转换和台湾用语调整 -""" - -import re -from pathlib import Path - -# 简繁转换映射(常用词汇) -SIMPLIFIED_TO_TRADITIONAL = { - # 基础词汇 - '工作流': '工作流程', - '创建': '建立', - '编辑': '編輯', - '删除': '刪除', - '保存': '儲存', - '加载': '載入', - '导出': '匯出', - '导入': '匯入', - '发布': '發佈', - '配置': '設定', - '执行': '執行', - '记录': '記錄', - '编辑器': '編輯器', - '调试': '除錯', - '基础': '基礎', - '信息': '資訊', - '设置': '設定', - '图标': '圖示', - '描述': '描述', - '危险': '危險', - '区域': '區域', - '操作': '操作', - '确认': '確認', - '名称': '名稱', - '输入': '輸入', - '启用': '啟用', - '加载中': '載入中', - '版本': '版本', - '创建时间': '建立時間', - '更新时间': '更新時間', - '统计': '統計', - '分析': '分析', - '成功': '成功', - '失败': '失敗', - '平均': '平均', - '耗时': '耗時', - '筛选': '篩選', - '状态': '狀態', - '手动': '手動', - '触发': '觸發', - '开始': '開始', - '时间': '時間', - '详情': '詳情', - '错误': '錯誤', - '节点': '節點', - '结果': '結果', - '等待': '等待', - '执行中': '執行中', - '已完成': '已完成', - '已取消': '已取消', - '面板': '面板', - '属性': '屬性', - '放大': '放大', - '缩小': '縮小', - '适应': '適應', - '视图': '檢視', - '未保存': '未儲存', - '更改': '變更', - '粘贴': '貼上', - '已删除': '已刪除', - '复制': '複製', - '剪贴板': '剪貼簿', - '搜索': '搜尋', - '正在加载': '正在載入', - '类型': '類型', - '未找到': '找不到', - '清除': '清除', - '拖拽': '拖曳', - '画布': '畫布', - '选择': '選擇', - '连线': '連線', - '点击': '點擊', - '查看': '檢視', - '条件': '條件', - '已设置': '已設定', - '表达式': '運算式', - '变量': '變數', - '引用': '參照', - '上下文': '上下文', - '显示': '顯示', - '标签': '標籤', - '输出': '輸出', - '可用': '可用', - '全局': '全域', - '消息': '訊息', - '内容': '內容', - '发送者': '發送者', - '平台': '平台', - '会话': '工作階段', - '时间戳': '時間戳記', - '无': '無', - '选项': '選項', - # 节点类型 - '触发器': '觸發器', - '定时': '定時', - '事件': '事件', - '处理': '處理', - '调用': '呼叫', - '代码': '程式碼', - '模板': '範本', - '请求': '請求', - '转换': '轉換', - '分类器': '分類器', - '提取器': '擷取器', - '检索': '檢索', - '知识库': '知識庫', - '聚合': '彙總', - '分割': '分割', - '赋值': '指派', - '控制流': '控制流程', - '分支': '分支', - '多路': '多路', - '循环': '迴圈', - '迭代器': '迭代器', - '并行': '並行', - '延迟': '延遲', - '合并': '合併', - '聚合器': '彙總器', - '动作': '動作', - '回复': '回覆', - '存储': '儲存', - '数据': '資料', - '数据库': '資料庫', - '集成': '整合', - '第三方': '第三方', - '查询': '查詢', - '缓存': '快取', - '工具': '工具', - '记忆': '記憶', - # 配置字段 - '关键词': '關鍵字', - '过滤': '篩選', - '正则': '正規表示式', - '长度': '長度', - '提及': '提及', - '群': '群組', - '响应': '回應', - '规则': '規則', - '访问': '存取', - '控制': '控制', - '表达式': '運算式', - '时区': '時區', - '路径': '路徑', - '允许': '允許', - '方法': '方法', - '认证': '驗證', - '密钥': '金鑰', - '验证': '驗證', - '超时': '逾時', - '防抖': '防抖', - '模型': '模型', - '提示词': '提示詞', - '系统': '系統', - '温度': '溫度', - '惩罚': '懲罰', - '令牌': '權杖', - '序列': '序列', - '种子': '種子', - '流式': '串流', - '历史': '歷史', - '语言': '語言', - '程序': '程式', - '指令': '指令', - '参数': '參數', - '定义': '定義', - '返回': '傳回', - '阈值': '閾值', - '相似度': '相似度', - '引用': '引用', - '运算符': '運算子', - '迭代': '迭代', - '中断': '中斷', - '并发': '並行', - '等待': '等待', - '所有': '所有', - '快速': '快速', - '单位': '單位', - '策略': '策略', - '映射': '對應', - '模式': '模式', - '目标': '目標', - '长文本': '長文字', - '强制': '強制', - '继承': '繼承', - '过期': '過期', - '前缀': '前置詞', - '作用域': '範圍', - '建议': '建議', - '问题': '問題', - '格式': '格式', - '连接': '連線', - '字符串': '字串', - '哈希': '雜湊', - '字段': '欄位', - '服务器': '伺服器', - '应用': '應用程式', - '数据集': '資料集', - '流程': '流程', - '机器人': '機器人', -} - -def convert_to_traditional(text: str) -> str: - """将简体中文转换为繁体中文""" - result = text - for simp, trad in SIMPLIFIED_TO_TRADITIONAL.items(): - result = result.replace(simp, trad) - return result - -def main(): - print("繁体中文批量转换工具") - print("=" * 60) - print("此脚本将简体中文翻译转换为繁体中文") - print("=" * 60) - - # 读取简体中文文件 - zh_hans_file = Path(__file__).parent / 'src' / 'i18n' / 'locales' / 'zh-Hans.ts' - zh_hant_file = Path(__file__).parent / 'src' / 'i18n' / 'locales' / 'zh-Hant.ts' - - if not zh_hans_file.exists(): - print(f"错误:找不到简体中文文件 {zh_hans_file}") - return - - print(f"读取简体中文文件: {zh_hans_file}") - with open(zh_hans_file, 'r', encoding='utf-8') as f: - zh_hans_content = f.read() - - # 提取workflows部分 - workflows_match = re.search(r'workflows:\s*\{(.+?)\n \},\n unifiedBinding:', zh_hans_content, re.DOTALL) - if not workflows_match: - print("错误:无法找到workflows部分") - return - - workflows_content = workflows_match.group(1) - print(f"找到workflows部分,长度: {len(workflows_content)} 字符") - - # 转换为繁体 - print("正在转换为繁体中文...") - traditional_content = convert_to_traditional(workflows_content) - - # 读取现有的繁体中文文件 - print(f"读取繁体中文文件: {zh_hant_file}") - with open(zh_hant_file, 'r', encoding='utf-8') as f: - zh_hant_content = f.read() - - # 替换workflows部分 - zh_hant_new = re.sub( - r'workflows:\s*\{(.+?)\n \},\n unifiedBinding:', - f'workflows: {{\n{traditional_content}\n }},\n unifiedBinding:', - zh_hant_content, - flags=re.DOTALL - ) - - # 写入文件 - print(f"写入繁体中文文件: {zh_hant_file}") - with open(zh_hant_file, 'w', encoding='utf-8') as f: - f.write(zh_hant_new) - - print("\n" + "=" * 60) - print("✅ 繁体中文转换完成!") - print("=" * 60) - print(f"已更新文件: {zh_hant_file}") - print("\n建议:") - print("1. 检查转换结果是否正确") - print("2. 运行 TypeScript 编译检查语法") - print("3. 手动审核关键术语的翻译") - -if __name__ == '__main__': - main() diff --git a/web/check_ru_ts_file.py b/web/check_ru_ts_file.py deleted file mode 100644 index 709c1ba0..00000000 --- a/web/check_ru_ts_file.py +++ /dev/null @@ -1,56 +0,0 @@ -#!/usr/bin/env python3 -"""检查 ru-RU.ts 文件中的中文字符问题""" -import re -from pathlib import Path - -def contains_chinese(text: str) -> bool: - """检查文本是否包含中文字符""" - return bool(re.search(r'[\u4e00-\u9fff]', text)) - -def main(): - ts_file = Path(__file__).parent / "src/i18n/locales/ru-RU.ts" - - with open(ts_file, 'r', encoding='utf-8') as f: - lines = f.readlines() - - problematic_lines = [] - in_workflows = False - - for i, line in enumerate(lines, 1): - # 检测是否进入 workflows 部分 - if 'workflows:' in line: - in_workflows = True - elif in_workflows and line.strip().startswith('}') and line.count('}') > line.count('{'): - # 可能退出 workflows 部分 - pass - - # 检查是否包含中文字符 - if contains_chinese(line): - # 提取键名 - key_match = re.search(r'(\w+):\s*[\'"]', line) - key_name = key_match.group(1) if key_match else 'unknown' - - problematic_lines.append({ - 'line_num': i, - 'key': key_name, - 'content': line.strip(), - 'in_workflows': in_workflows - }) - - print(f"发现 {len(problematic_lines)} 行包含中文字符的俄语翻译:\n") - - # 只显示 workflows 部分的问题 - workflows_problems = [p for p in problematic_lines if p['in_workflows']] - - print(f"workflows 部分问题: {len(workflows_problems)} 行\n") - - for item in workflows_problems[:30]: # 显示前30个 - print(f"行 {item['line_num']}: {item['key']}") - print(f" {item['content'][:100]}") - print() - - if len(workflows_problems) > 30: - print(f"... 还有 {len(workflows_problems) - 30} 个问题行") - -if __name__ == '__main__': - main() diff --git a/web/check_russian_translations.py b/web/check_russian_translations.py deleted file mode 100644 index b0fd9bfe..00000000 --- a/web/check_russian_translations.py +++ /dev/null @@ -1,44 +0,0 @@ -#!/usr/bin/env python3 -"""检查俄语翻译中的中文字符问题""" -import json -import re -from pathlib import Path - -def contains_chinese(text: str) -> bool: - """检查文本是否包含中文字符""" - return bool(re.search(r'[\u4e00-\u9fff]', text)) - -def main(): - json_path = Path(__file__).parent / "workflows_translations.json" - - with open(json_path, 'r', encoding='utf-8') as f: - data = json.load(f) - - translations = data.get('translations', {}) - - problematic_keys = [] - - for key, value in translations.items(): - if isinstance(value, dict) and 'ru-RU' in value: - ru_text = value['ru-RU'] - if ru_text != 'TODO' and contains_chinese(ru_text): - zh_hans = value.get('zh-Hans', '') - problematic_keys.append({ - 'key': key, - 'ru_text': ru_text, - 'zh_hans': zh_hans - }) - - print(f"发现 {len(problematic_keys)} 个包含中文字符的俄语翻译:\n") - - for item in problematic_keys[:20]: # 只显示前20个 - print(f"键: {item['key']}") - print(f" 中文原文: {item['zh_hans']}") - print(f" 俄语翻译: {item['ru_text']}") - print() - - if len(problematic_keys) > 20: - print(f"... 还有 {len(problematic_keys) - 20} 个问题翻译") - -if __name__ == '__main__': - main() diff --git a/web/check_translation_progress.py b/web/check_translation_progress.py deleted file mode 100644 index fa0b533d..00000000 --- a/web/check_translation_progress.py +++ /dev/null @@ -1,202 +0,0 @@ -#!/usr/bin/env python3 -""" -检查workflows翻译进度 - -使用方法: -python3 check_translation_progress.py - -显示: -- 每种语言的翻译进度 -- 已完成和待完成的键数量 -- 翻译完成百分比 -- 最近翻译的键(如果有) -""" - -import json -from pathlib import Path -from typing import Dict, List, Tuple - - -def load_translations() -> Dict: - """加载翻译JSON文件""" - json_path = Path(__file__).parent / 'workflows_translations.json' - - if not json_path.exists(): - raise FileNotFoundError(f"找不到翻译文件: {json_path}") - - with open(json_path, 'r', encoding='utf-8') as f: - return json.load(f) - - -def analyze_progress(translations_data: Dict) -> Dict[str, Dict]: - """ - 分析每种语言的翻译进度 - - 返回格式: - { - 'ja-JP': { - 'completed': 50, - 'total': 627, - 'percentage': 7.97, - 'completed_keys': ['title', 'description', ...], - 'pending_keys': ['...', ...] - }, - ... - } - """ - translations = translations_data.get('translations', {}) - languages = ['ja-JP', 'zh-Hant', 'es-ES', 'ru-RU', 'th-TH', 'vi-VN'] - - progress = {} - - for lang in languages: - completed_keys = [] - pending_keys = [] - - for key, values in translations.items(): - translation = values.get(lang, 'TODO') - if translation != 'TODO' and translation.strip(): - completed_keys.append(key) - else: - pending_keys.append(key) - - total = len(translations) - completed = len(completed_keys) - percentage = (completed / total * 100) if total > 0 else 0 - - progress[lang] = { - 'completed': completed, - 'total': total, - 'percentage': percentage, - 'completed_keys': completed_keys, - 'pending_keys': pending_keys - } - - return progress - - -def get_language_name(lang_code: str) -> str: - """获取语言的中文名称""" - names = { - 'ja-JP': '日语', - 'zh-Hant': '繁体中文', - 'es-ES': '西班牙语', - 'ru-RU': '俄语', - 'th-TH': '泰语', - 'vi-VN': '越南语' - } - return names.get(lang_code, lang_code) - - -def print_progress_bar(percentage: float, width: int = 40) -> str: - """生成进度条""" - filled = int(width * percentage / 100) - bar = '█' * filled + '░' * (width - filled) - return f"[{bar}] {percentage:.1f}%" - - -def display_progress(progress: Dict[str, Dict]): - """显示翻译进度""" - print("\n" + "="*80) - print("📊 Workflows翻译进度报告") - print("="*80) - - # 按完成度排序 - sorted_langs = sorted(progress.items(), key=lambda x: x[1]['percentage'], reverse=True) - - for lang, data in sorted_langs: - lang_name = get_language_name(lang) - completed = data['completed'] - total = data['total'] - percentage = data['percentage'] - - print(f"\n【{lang_name} ({lang})】") - print(f" {print_progress_bar(percentage)}") - print(f" ✅ 已完成: {completed}/{total}") - print(f" ⏳ 待翻译: {total - completed}") - - # 显示最近完成的键(前5个) - if data['completed_keys']: - recent = data['completed_keys'][:5] - print(f" 📝 最近完成: {', '.join(recent)}") - if len(data['completed_keys']) > 5: - print(f" (还有 {len(data['completed_keys']) - 5} 个已完成)") - - # 总体统计 - print("\n" + "-"*80) - total_completed = sum(d['completed'] for d in progress.values()) - total_items = sum(d['total'] for d in progress.values()) - avg_percentage = (total_completed / total_items * 100) if total_items > 0 else 0 - - print(f"📈 总体进度: {total_completed}/{total_items} ({avg_percentage:.1f}%)") - print(f"📊 平均每种语言: {total_completed // len(progress)}/{progress[list(progress.keys())[0]]['total']}") - - # 估算剩余工作量 - remaining = total_items - total_completed - print(f"\n💡 剩余工作量: {remaining} 个翻译项") - - if remaining > 0: - # 建议分批策略 - batches_50 = (remaining + 49) // 50 # 向上取整 - batches_100 = (remaining + 99) // 100 - - print(f" 建议分批策略:") - print(f" - 每批50个键: 需要 {batches_50} 批") - print(f" - 每批100个键: 需要 {batches_100} 批") - - print("="*80) - - -def suggest_next_keys(progress: Dict[str, Dict], batch_size: int = 50) -> List[str]: - """建议下一批要翻译的键""" - # 找出所有语言都还没翻译的键 - all_pending = set() - - for lang, data in progress.items(): - if not all_pending: - all_pending = set(data['pending_keys']) - else: - all_pending &= set(data['pending_keys']) - - return list(all_pending)[:batch_size] - - -def main(): - print("🔍 正在检查翻译进度...") - - try: - # 加载翻译数据 - translations_data = load_translations() - - # 分析进度 - progress = analyze_progress(translations_data) - - # 显示进度 - display_progress(progress) - - # 建议下一批翻译的键 - next_keys = suggest_next_keys(progress, batch_size=50) - - if next_keys: - print(f"\n💡 建议下一批翻译的键(前10个):") - for i, key in enumerate(next_keys[:10], 1): - print(f" {i}. {key}") - - if len(next_keys) > 10: - print(f" ... 还有 {len(next_keys) - 10} 个键") - else: - print("\n🎉 恭喜!所有翻译已完成!") - - print("\n✅ 进度检查完成") - - except FileNotFoundError as e: - print(f"\n❌ 错误: {e}") - print("💡 请确保 workflows_translations.json 文件存在") - except Exception as e: - print(f"\n❌ 发生错误: {e}") - import traceback - traceback.print_exc() - - -if __name__ == '__main__': - main() diff --git a/web/fix_i18n_keys.py b/web/fix_i18n_keys.py deleted file mode 100644 index ca62accf..00000000 --- a/web/fix_i18n_keys.py +++ /dev/null @@ -1,160 +0,0 @@ -#!/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() diff --git a/web/fix_ru_mixed_text.py b/web/fix_ru_mixed_text.py deleted file mode 100644 index b9f5d450..00000000 --- a/web/fix_ru_mixed_text.py +++ /dev/null @@ -1,237 +0,0 @@ -#!/usr/bin/env python3 -"""直接修复 ru-RU.ts 文件中包含中文字符的翻译 -从 en-US.ts 提取英文原文,然后替换 ru-RU.ts 中的混合文本 -""" -import re -from pathlib import Path -from typing import Dict, List, Tuple - -def contains_chinese(text: str) -> bool: - """检查文本是否包含中文字符""" - return bool(re.search(r'[\u4e00-\u9fff]', text)) - -def extract_key_value_pairs(file_path: Path, section_name: str = 'workflows') -> Dict[str, str]: - """从 .ts 文件中提取指定部分的键值对""" - with open(file_path, 'r', encoding='utf-8') as f: - lines = f.readlines() - - result = {} - in_section = False - brace_count = 0 - - for line in lines: - # 检测进入目标部分 - if f'{section_name}:' in line and '{' in line: - in_section = True - brace_count = line.count('{') - line.count('}') - continue - - if not in_section: - continue - - # 更新括号计数 - brace_count += line.count('{') - line.count('}') - - # 提取键值对 - match = re.match(r'\s*(\w+):\s*[\'"]([^\'"]*(?:\\.[^\'"]*)*)[\'"],?\s*(?://.*)?$', line) - if match: - key = match.group(1) - value = match.group(2) - # 处理转义字符 - value = value.replace("\\'", "'").replace('\\"', '"').replace('\\n', '\n') - result[key] = value - - # 检测退出部分 - if brace_count == 0: - break - - return result - -def find_problematic_lines(file_path: Path) -> List[Tuple[int, str, str]]: - """找出包含中文字符的行""" - with open(file_path, 'r', encoding='utf-8') as f: - lines = f.readlines() - - problematic = [] - in_workflows = False - - for i, line in enumerate(lines): - if 'workflows:' in line: - in_workflows = True - continue - - if in_workflows and contains_chinese(line): - # 提取键名 - match = re.match(r'\s*(\w+):\s*[\'"]', line) - if match: - key = match.group(1) - problematic.append((i, key, line)) - - return problematic - -# 手动翻译映射 - 基于常见的中俄混合模式 -MANUAL_TRANSLATIONS = { - # 率 -> процент/коэффициент - '成功率': 'Процент успеха', - '失败率': 'Процент неудач', - - # 次数 -> количество/раз - '失败次数': 'Количество неудач', - '执行次数': 'Количество выполнений', - '成功次数': 'Количество успехов', - - # 状态 -> статус - '全部状态': 'Все статусы', - '运行状态': 'Статус выполнения', - - # 时间 -> время - '等待时间': 'Время ожидания', - '执行时间': 'Время выполнения', - '创建时间': 'Время создания', - '更新时间': 'Время обновления', - - # 记录 -> запись - '执行记录': 'Записи выполнения', - '节点执行记录': 'Записи выполнения узлов', - - # 节点 -> узел - '节点': 'Узел', - '节点类型': 'Тип узла', - '节点名称': 'Название узла', - '选中节点': 'Выбранный узел', - '搜索节点': 'Поиск узлов', - '没有选中节点可复制': 'Нет выбранных узлов для копирования', - '已复制节点': 'Узлы скопированы', - '已粘贴节点': 'Узлы вставлены', - '未找到匹配节点': 'Совпадающие узлы не найдены', - '拖拽节点到画布添加': 'Перетащите узел на холст для добавления', - '选择节点或连线': 'Выберите узел или соединение', - '点击画布中节点或连线来查看和编辑其属性': 'Нажмите на узел или соединение на холсте, чтобы просмотреть и изменить его свойства', - '该节点类型暂无配置选项': 'Для этого типа узла пока нет параметров конфигурации', - '确定删除此节点': 'Вы уверены, что хотите удалить этот узел?', - '删除后,该节点及其所有连线将被永久移除': 'После удаления узел и все его соединения будут удалены навсегда', - '节点显示名称': 'Отображаемое имя узла', - - # 工作流 -> рабочий процесс - '工作流': 'Рабочий процесс', - '工作流名称': 'Название рабочего процесса', - '输入工作流名称': 'Введите название рабочего процесса', - - # 变量 -> переменная - '变量': 'Переменная', - '变量名': 'Имя переменной', - '上下文变量': 'Контекстная переменная', - - # 条件 -> условие - '条件': 'Условие', - '条件分支': 'Условная ветвь', - '输入条件表达式': 'Введите условное выражение', - '条件为空时': 'Когда условие пусто', - '条件为空时,该连线将始终被执行': 'Когда условие пусто, это соединение всегда будет выполняться', - - # 其他常见词汇 - '已配置': 'Настроено', - '未保存': 'Не сохранено', - '有未保存更改': 'Есть несохраненные изменения', - '剪贴板为空': 'Буфер обмена пуст', - '正在加载节点类型': 'Загрузка типов узлов', - '模拟消息': 'Имитация сообщения', - '调试上下文': 'Контекст отладки', - '请求体': 'Тело запроса', - '确定删除此连线': 'Вы уверены, что хотите удалить это соединение?', - '删除后,该连线将被永久移除': 'После удаления соединение будет удалено навсегда', -} - -def create_translation_dict() -> Dict[str, str]: - """创建完整的翻译字典,包括部分匹配""" - translations = {} - - # 添加手动翻译 - for zh, ru in MANUAL_TRANSLATIONS.items(): - translations[zh] = ru - - return translations - -def fix_mixed_text(text: str, translations: Dict[str, str]) -> str: - """修复混合中俄文本""" - # 首先尝试完全匹配 - for zh, ru in translations.items(): - if zh in text: - text = text.replace(zh, ru) - - # 移除剩余的中文字符(如果还有的话) - # 这是最后的手段,用俄语占位符替换 - if contains_chinese(text): - # 提取中文部分并尝试翻译 - chinese_parts = re.findall(r'[\u4e00-\u9fff]+', text) - for part in chinese_parts: - if part in translations: - text = text.replace(part, translations[part]) - - return text - -def main(): - base_dir = Path(__file__).parent - en_us_file = base_dir / "src/i18n/locales/en-US.ts" - ru_ru_file = base_dir / "src/i18n/locales/ru-RU.ts" - - print("🔍 正在分析 ru-RU.ts 文件...") - - # 找出有问题的行 - problematic_lines = find_problematic_lines(ru_ru_file) - print(f"发现 {len(problematic_lines)} 行包含中文字符") - - if not problematic_lines: - print("✅ 没有需要修复的翻译!") - return - - # 读取整个文件 - with open(ru_ru_file, 'r', encoding='utf-8') as f: - lines = f.readlines() - - # 创建翻译字典 - translations = create_translation_dict() - - # 修复每一行 - fixed_count = 0 - for line_num, key, original_line in problematic_lines: - # 提取当前值 - match = re.match(r'(\s*)(\w+):\s*[\'"]([^\'"]*(?:\\.[^\'"]*)*)[\'"],?(\s*(?://.*)?)\s*$', original_line) - if not match: - continue - - indent, key_name, value, comment = match.groups() - - # 修复值 - fixed_value = fix_mixed_text(value, translations) - - if fixed_value != value and not contains_chinese(fixed_value): - # 重建行 - new_line = f"{indent}{key_name}: '{fixed_value}',{comment}\n" - lines[line_num] = new_line - fixed_count += 1 - print(f"✓ 修复 {key_name}: {value[:50]}... -> {fixed_value[:50]}...") - - # 写回文件 - if fixed_count > 0: - with open(ru_ru_file, 'w', encoding='utf-8') as f: - f.writelines(lines) - print(f"\n✅ 成功修复 {fixed_count} 行翻译") - print(f"📝 已更新文件: {ru_ru_file}") - else: - print("\n⚠️ 没有成功修复任何翻译") - print("可能需要手动检查或添加更多翻译映射") - - # 再次检查 - print("\n🔍 验证修复结果...") - remaining_problems = find_problematic_lines(ru_ru_file) - if remaining_problems: - print(f"⚠️ 仍有 {len(remaining_problems)} 行包含中文字符") - print("\n前10个未修复的键:") - for i, (_, key, line) in enumerate(remaining_problems[:10], 1): - print(f" {i}. {key}: {line.strip()[:80]}") - else: - print("✅ 所有中文字符已清除!") - -if __name__ == '__main__': - main() diff --git a/web/fix_ru_workflows.py b/web/fix_ru_workflows.py deleted file mode 100644 index e091594c..00000000 --- a/web/fix_ru_workflows.py +++ /dev/null @@ -1,108 +0,0 @@ -#!/usr/bin/env python3 -""" -修复俄语翻译文件中 workflows 部分的中文混杂问题 -""" - -import re - -# 读取俄语文件 -with open('src/i18n/locales/ru-RU.ts', 'r', encoding='utf-8') as f: - content = f.read() - -# 定义需要替换的中文文本到俄语的映射 -replacements = { - # workflows section - '工作流': 'Рабочий процесс', - '创建和管理可视化工作流,实现复杂的消息处理逻辑': 'Создание и управление визуальными рабочими процессами для реализации сложной логики обработки сообщений', - '创建工作流': 'Создать рабочий процесс', - '从侧边栏选择一个工作流': 'Выберите рабочий процесс из боковой панели', - '编辑工作流': 'Редактировать рабочий процесс', - '新工作流': 'Новый рабочий процесс', - '获取工作流列表失败:': 'Ошибка получения списка рабочих процессов: ', - '工作流名称': 'Название рабочего процесса', - '工作流描述': 'Описание рабочего процесса', - '工作流名称不能为空': 'Название рабочего процесса не может быть пустым', - '一个工作流': 'Рабочий процесс', - '获取工作流失败:': 'Ошибка получения рабочего процесса: ', - '加载工作流失败': 'Ошибка загрузки рабочего процесса', - '保存成功': 'Успешно сохранено', - '保存失败:': 'Ошибка сохранения: ', - '工作流创建成功': 'Рабочий процесс успешно создан', - '创建失败:': 'Ошибка создания: ', - '删除成功': 'Успешно удалено', - '删除失败:': 'Ошибка удаления: ', - '你确定要删除这个工作流吗?': 'Вы уверены, что хотите удалить этот рабочий процесс?', - '复制成功': 'Успешно скопировано', - '复制失败:': 'Ошибка копирования: ', - '导出': 'Экспорт', - '导入': 'Импорт', - '工作流已导出': 'Рабочий процесс экспортирован', - '工作流已导入': 'Рабочий процесс импортирован', - '导入失败:文件格式无效': 'Ошибка импорта: недопустимый формат файла', - '发布': 'Опубликовать', - '发布成功': 'Успешно опубликовано', - '发布失败': 'Ошибка публикации', - '配置': 'Конфигурация', - '执行记录': 'Записи выполнения', - '编辑器': 'Редактор', - '对话调试': 'Отладка диалога', - '基础信息': 'Основная информация', - '设置工作流名称、图标和描述': 'Настроить название, значок и описание рабочего процесса', - '设置工作流名称和描述': 'Настроить название и описание рабочего процесса', - '危险区域': 'Опасная зона', - '不可逆的操作': 'Необратимые операции', - '删除此工作流': 'Удалить этот рабочий процесс', - '删除后,所有关联配置将被永久移除,且无法恢复。': 'После удаления все связанные конфигурации будут удалены навсегда и не могут быть восстановлены.', - '删除工作流': 'Удалить рабочий процесс', - '确认删除': 'Подтвердить удаление', - '您确定要删除工作流': 'Вы уверены, что хотите удалить рабочий процесс', - '吗?此操作无法撤销。': '? Эту операцию нельзя отменить.', - '名称': 'Название', - '输入工作流名称': 'Введите название рабочего процесса', - '输入工作流描述(可选)': 'Введите описание рабочего процесса (необязательно)', - '启用': 'Включить', - '启用后,工作流将可以被触发执行': 'После включения рабочий процесс может быть запущен для выполнения', - '加载中...': 'Загрузка...', - '工作流信息': 'Информация о рабочем процессе', - '版本': 'Версия', - '创建时间': 'Дата создания', - '更新时间': 'Дата обновления', - '共': 'Всего', - '条执行记录': 'записей выполнения', - '统计分析': 'Статистический анализ', - '成功': 'успешных', - '次': 'раз', - '成功率': 'Успешность', - '平均耗时': 'Средняя длительность', - '每次执行': 'За выполнение', - '失败次数': 'Количество неудач', - '最后执行': 'Последнее выполнение', - '按状态筛选': 'Фильтр по статусу', - '全部状态': 'Все статусы', - '手动触发': 'Ручной запуск', - '执行': 'Выполнение', - '状态': 'Статус', - '触发类型': 'Тип триггера', - '开始时间': 'Время начала', - '耗时': 'Длительность', - '暂无执行记录': 'Нет записей выполнения', - '执行详情': 'Детали выполнения', - '错误信息': 'Информация об ошибке', - '节点执行记录': 'Записи выполнения узлов', - '执行结果': 'Результат выполнения', - '等待中': 'Ожидание', - '执行中': 'Выполнение', - '已完成': 'Завершено', - '失败': 'Неудача', - '已取消': 'Отменено', -} - -# 执行替换 -for chinese, russian in replacements.items(): - content = content.replace(chinese, russian) - -# 写回文件 -with open('src/i18n/locales/ru-RU.ts', 'w', encoding='utf-8') as f: - f.write(content) - -print("俄语翻译文件修复完成!") diff --git a/web/fix_russian_translations.py b/web/fix_russian_translations.py deleted file mode 100644 index e2875a28..00000000 --- a/web/fix_russian_translations.py +++ /dev/null @@ -1,150 +0,0 @@ -#!/usr/bin/env python3 -"""修复 ru-RU.ts 文件中包含中文字符的翻译""" -import re -import os -from pathlib import Path -from anthropic import Anthropic - -def contains_chinese(text: str) -> bool: - """检查文本是否包含中文字符""" - return bool(re.search(r'[\u4e00-\u9fff]', text)) - -def extract_workflows_section(file_path: Path) -> dict: - """从 .ts 文件中提取 workflows 部分的键值对""" - with open(file_path, 'r', encoding='utf-8') as f: - content = f.read() - - # 找到 workflows 部分 - workflows_match = re.search(r'workflows:\s*\{(.*?)\n\s*\},?\s*\n', content, re.DOTALL) - if not workflows_match: - return {} - - workflows_content = workflows_match.group(1) - - # 提取所有键值对 - pattern = r"(\w+):\s*['\"]([^'\"]*(?:\\.[^'\"]*)*)['\"]" - matches = re.findall(pattern, workflows_content) - - result = {} - for key, value in matches: - # 处理转义字符 - value = value.replace("\\'", "'").replace('\\"', '"') - result[key] = value - - return result - -def translate_text(client: Anthropic, text: str, target_lang: str = "Russian") -> str: - """使用 Claude API 翻译文本""" - try: - message = client.messages.create( - model="claude-3-5-sonnet-20241022", - max_tokens=1000, - messages=[{ - "role": "user", - "content": f"""Translate the following English text to {target_lang}. -Only provide the translation, no explanations or additional text. -Keep any {{variable}} placeholders unchanged. - -Text to translate: {text}""" - }] - ) - - translation = message.content[0].text.strip() - # 移除可能的引号 - translation = translation.strip('"').strip("'") - return translation - except Exception as e: - print(f"翻译错误: {e}") - return text - -def main(): - # 检查 API key - api_key = os.getenv('ANTHROPIC_API_KEY') - if not api_key: - print("错误: 未找到 ANTHROPIC_API_KEY 环境变量") - print("请设置: export ANTHROPIC_API_KEY='your-api-key'") - return - - client = Anthropic(api_key=api_key) - - base_dir = Path(__file__).parent - en_us_file = base_dir / "src/i18n/locales/en-US.ts" - ru_ru_file = base_dir / "src/i18n/locales/ru-RU.ts" - - # 提取英文和俄文的 workflows 部分 - print("正在提取英文原文...") - en_workflows = extract_workflows_section(en_us_file) - print(f"提取了 {len(en_workflows)} 个英文键") - - print("\n正在提取俄文翻译...") - ru_workflows = extract_workflows_section(ru_ru_file) - print(f"提取了 {len(ru_workflows)} 个俄文键") - - # 找出包含中文的俄文翻译 - problematic_keys = [] - for key, ru_text in ru_workflows.items(): - if contains_chinese(ru_text): - en_text = en_workflows.get(key, '') - if en_text: - problematic_keys.append({ - 'key': key, - 'en_text': en_text, - 'ru_text': ru_text - }) - - print(f"\n发现 {len(problematic_keys)} 个需要修复的翻译") - - if not problematic_keys: - print("没有需要修复的翻译!") - return - - # 翻译前10个作为示例 - print("\n开始翻译前10个键...") - fixed_translations = {} - - for i, item in enumerate(problematic_keys[:10], 1): - key = item['key'] - en_text = item['en_text'] - old_ru_text = item['ru_text'] - - print(f"\n[{i}/10] 翻译键: {key}") - print(f" 英文: {en_text}") - print(f" 旧俄文: {old_ru_text}") - - new_ru_text = translate_text(client, en_text, "Russian") - print(f" 新俄文: {new_ru_text}") - - fixed_translations[key] = new_ru_text - - # 保存修复结果到文件 - output_file = base_dir / "russian_fixes.txt" - with open(output_file, 'w', encoding='utf-8') as f: - f.write(f"需要修复的翻译总数: {len(problematic_keys)}\n\n") - f.write("=" * 80 + "\n") - f.write("已翻译的前10个键:\n") - f.write("=" * 80 + "\n\n") - - for key, new_text in fixed_translations.items(): - old_item = next(item for item in problematic_keys if item['key'] == key) - f.write(f"键: {key}\n") - f.write(f"英文: {old_item['en_text']}\n") - f.write(f"旧俄文: {old_item['ru_text']}\n") - f.write(f"新俄文: {new_text}\n") - f.write("-" * 80 + "\n\n") - - f.write("\n" + "=" * 80 + "\n") - f.write("剩余需要翻译的键:\n") - f.write("=" * 80 + "\n\n") - - for item in problematic_keys[10:]: - f.write(f"键: {item['key']}\n") - f.write(f"英文: {item['en_text']}\n") - f.write(f"旧俄文: {item['ru_text']}\n") - f.write("-" * 80 + "\n\n") - - print(f"\n修复结果已保存到: {output_file}") - print(f"\n注意: 由于翻译数量较多({len(problematic_keys)}个),建议分批处理") - print("您可以修改脚本中的 [:10] 来处理更多键") - -if __name__ == '__main__': - main() diff --git a/web/replace_ru_workflows.py b/web/replace_ru_workflows.py deleted file mode 100644 index a07d36b8..00000000 --- a/web/replace_ru_workflows.py +++ /dev/null @@ -1,250 +0,0 @@ -#!/usr/bin/env python3 -""" -从 en-US.ts 提取 workflows 部分,生成干净的俄语翻译 -策略:直接替换整个 workflows 部分 -""" -import re -from pathlib import Path - -def extract_workflows_section(file_path: Path) -> tuple[str, int, int]: - """提取 workflows 部分的内容和行号范围""" - with open(file_path, 'r', encoding='utf-8') as f: - lines = f.readlines() - - start_line = None - end_line = None - brace_count = 0 - - for i, line in enumerate(lines): - if 'workflows:' in line and '{' in line: - start_line = i - brace_count = line.count('{') - line.count('}') - continue - - if start_line is not None: - brace_count += line.count('{') - line.count('}') - if brace_count == 0: - end_line = i - break - - if start_line is not None and end_line is not None: - section = ''.join(lines[start_line:end_line+1]) - return section, start_line, end_line - - return '', -1, -1 - -def translate_en_to_ru(text: str) -> str: - """简单的英译俄映射""" - translations = { - # 基础词汇 - 'Workflow': 'Рабочий процесс', - 'workflow': 'рабочий процесс', - 'Node': 'Узел', - 'node': 'узел', - 'nodes': 'узлы', - 'Nodes': 'Узлы', - 'Success': 'Успех', - 'success': 'успех', - 'Failed': 'Не удалось', - 'failed': 'не удалось', - 'Error': 'Ошибка', - 'error': 'ошибка', - 'Loading': 'Загрузка', - 'loading': 'загрузка', - 'Save': 'Сохранить', - 'save': 'сохранить', - 'Delete': 'Удалить', - 'delete': 'удалить', - 'Edit': 'Редактировать', - 'edit': 'редактировать', - 'Create': 'Создать', - 'create': 'создать', - 'Copy': 'Копировать', - 'copy': 'копировать', - 'Paste': 'Вставить', - 'paste': 'вставить', - 'Copied': 'Скопировано', - 'copied': 'скопировано', - 'Pasted': 'Вставлено', - 'pasted': 'вставлено', - 'Configuration': 'Конфигурация', - 'configuration': 'конфигурация', - 'Execution': 'Выполнение', - 'execution': 'выполнение', - 'executions': 'выполнения', - 'Executions': 'Выполнения', - 'Record': 'Запись', - 'record': 'запись', - 'records': 'записи', - 'Records': 'Записи', - 'Status': 'Статус', - 'status': 'статус', - 'All': 'Все', - 'all': 'все', - 'Duration': 'Продолжительность', - 'duration': 'продолжительность', - 'Time': 'Время', - 'time': 'время', - 'Rate': 'Коэффициент', - 'rate': 'коэффициент', - 'Average': 'Средний', - 'average': 'средний', - 'Total': 'Всего', - 'total': 'всего', - 'Last': 'Последний', - 'last': 'последний', - 'Condition': 'Условие', - 'condition': 'условие', - 'Branch': 'Ветвь', - 'branch': 'ветвь', - 'Variable': 'Переменная', - 'variable': 'переменная', - 'Context': 'Контекст', - 'context': 'контекст', - 'Debug': 'Отладка', - 'debug': 'отладка', - 'Message': 'Сообщение', - 'message': 'сообщение', - 'Request': 'Запрос', - 'request': 'запрос', - 'Body': 'Тело', - 'body': 'тело', - 'Empty': 'Пусто', - 'empty': 'пусто', - 'Clipboard': 'Буфер обмена', - 'clipboard': 'буфер обмена', - 'Search': 'Поиск', - 'search': 'поиск', - 'Type': 'Тип', - 'type': 'тип', - 'Found': 'Найдено', - 'found': 'найдено', - 'Drag': 'Перетащить', - 'drag': 'перетащить', - 'Canvas': 'Холст', - 'canvas': 'холст', - 'Select': 'Выбрать', - 'select': 'выбрать', - 'Edge': 'Соединение', - 'edge': 'соединение', - 'Click': 'Нажать', - 'click': 'нажать', - 'View': 'Просмотреть', - 'view': 'просмотреть', - 'Properties': 'Свойства', - 'properties': 'свойства', - 'Configured': 'Настроено', - 'configured': 'настроено', - 'Expression': 'Выражение', - 'expression': 'выражение', - 'Enter': 'Введите', - 'enter': 'введите', - 'When': 'Когда', - 'when': 'когда', - 'Will': 'Будет', - 'will': 'будет', - 'Always': 'Всегда', - 'always': 'всегда', - 'Executed': 'Выполнено', - 'executed': 'выполнено', - 'Support': 'Поддержка', - 'support': 'поддержка', - 'Reference': 'Ссылка', - 'reference': 'ссылка', - 'Confirm': 'Подтвердить', - 'confirm': 'подтвердить', - 'After': 'После', - 'after': 'после', - 'Removed': 'Удалено', - 'removed': 'удалено', - 'Permanently': 'Навсегда', - 'permanently': 'навсегда', - 'Label': 'Метка', - 'label': 'метка', - 'Display': 'Отображение', - 'display': 'отображение', - 'Name': 'Имя', - 'name': 'имя', - 'Simulate': 'Имитировать', - 'simulate': 'имитировать', - 'Options': 'Параметры', - 'options': 'параметры', - 'No': 'Нет', - 'no': 'нет', - 'Unsaved': 'Несохраненные', - 'unsaved': 'несохраненные', - 'Changes': 'Изменения', - 'changes': 'изменения', - 'Nothing': 'Ничего', - 'nothing': 'ничего', - 'Selected': 'Выбрано', - 'selected': 'выбрано', - 'Matching': 'Совпадающие', - 'matching': 'совпадающие', - 'Add': 'Добавить', - 'add': 'добавить', - 'Connection': 'Соединение', - 'connection': 'соединение', - } - - result = text - for en, ru in translations.items(): - result = result.replace(f"'{en}'", f"'{ru}'") - result = result.replace(f'"{en}"', f'"{ru}"') - - return result - -def main(): - base_dir = Path(__file__).parent - en_us_file = base_dir / "src/i18n/locales/en-US.ts" - ru_ru_file = base_dir / "src/i18n/locales/ru-RU.ts" - - print("📖 从 en-US.ts 提取 workflows 部分...") - en_workflows, en_start, en_end = extract_workflows_section(en_us_file) - - if not en_workflows: - print("❌ 无法提取 en-US.ts 的 workflows 部分") - return - - print(f"✓ 提取了 {en_end - en_start + 1} 行") - - print("\n🔄 翻译成俄语...") - ru_workflows = translate_en_to_ru(en_workflows) - - print("\n📝 读取 ru-RU.ts 文件...") - with open(ru_ru_file, 'r', encoding='utf-8') as f: - ru_lines = f.readlines() - - # 找到 ru-RU.ts 中的 workflows 部分 - print("🔍 定位 ru-RU.ts 中的 workflows 部分...") - _, ru_start, ru_end = extract_workflows_section(ru_ru_file) - - if ru_start == -1: - print("❌ 无法找到 ru-RU.ts 的 workflows 部分") - return - - print(f"✓ 找到位置: 行 {ru_start+1} 到 {ru_end+1}") - - # 替换 - print("\n✏️ 替换 workflows 部分...") - new_lines = ru_lines[:ru_start] + [ru_workflows] + ru_lines[ru_end+1:] - - # 写回文件 - with open(ru_ru_file, 'w', encoding='utf-8') as f: - f.writelines(new_lines) - - print(f"✅ 已更新 {ru_ru_file}") - - # 验证 - print("\n🔍 验证结果...") - with open(ru_ru_file, 'r', encoding='utf-8') as f: - content = f.read() - - chinese_count = len(re.findall(r'[\u4e00-\u9fff]', content)) - if chinese_count == 0: - print("✅ 验证通过:没有中文字符!") - else: - print(f"⚠️ 仍有 {chinese_count} 个中文字符") - -if __name__ == '__main__': - main() diff --git a/web/todo_translations.json b/web/todo_translations.json deleted file mode 100644 index e1cb1b51..00000000 --- a/web/todo_translations.json +++ /dev/null @@ -1,1450 +0,0 @@ -[ - { - "key": "copySuccess", - "zh": "复制成功" - }, - { - "key": "copyError", - "zh": "复制失败:" - }, - { - "key": "exportSuccess", - "zh": "工作流已导出" - }, - { - "key": "importSuccess", - "zh": "工作流已导入" - }, - { - "key": "importError", - "zh": "导入失败:文件格式无效" - }, - { - "key": "publishSuccess", - "zh": "发布成功" - }, - { - "key": "publishError", - "zh": "发布失败" - }, - { - "key": "executions", - "zh": "执行记录" - }, - { - "key": "editor", - "zh": "编辑器" - }, - { - "key": "basicInfo", - "zh": "基础信息" - }, - { - "key": "basicInfoDesc", - "zh": "设置工作流名称、图标和描述" - }, - { - "key": "basicInfoDescription", - "zh": "设置工作流名称和描述" - }, - { - "key": "dangerZoneDesc", - "zh": "不可逆的操作" - }, - { - "key": "dangerZoneDescription", - "zh": "不可逆的操作" - }, - { - "key": "deleteWorkflowAction", - "zh": "删除此工作流" - }, - { - "key": "deleteWorkflowHint", - "zh": "删除后,所有关联配置将被永久移除,且无法恢复。" - }, - { - "key": "deleteConfirmDesc", - "zh": "您确定要删除工作流 \"{{name}}\" 吗?此操作无法撤销。" - }, - { - "key": "descriptionPlaceholder", - "zh": "输入工作流描述(可选)" - }, - { - "key": "enabledDesc", - "zh": "启用后,工作流将可以被触发执行" - }, - { - "key": "loading", - "zh": "加载中..." - }, - { - "key": "createdAt", - "zh": "创建时间" - }, - { - "key": "updatedAt", - "zh": "更新时间" - }, - { - "key": "totalExecutions", - "zh": "共 {{count}} 条执行记录" - }, - { - "key": "statistics", - "zh": "统计分析" - }, - { - "key": "successfulCount", - "zh": "成功 {{count}} 次" - }, - { - "key": "successRate", - "zh": "成功率" - }, - { - "key": "perExecution", - "zh": "每次执行" - }, - { - "key": "failedExecutions", - "zh": "失败次数" - }, - { - "key": "lastExecution", - "zh": "最后执行" - }, - { - "key": "filterByStatus", - "zh": "按状态筛选" - }, - { - "key": "allStatuses", - "zh": "全部状态" - }, - { - "key": "triggerType", - "zh": "触发类型" - }, - { - "key": "startedAt", - "zh": "开始时间" - }, - { - "key": "duration", - "zh": "等待时间" - }, - { - "key": "noExecutions", - "zh": "暂无执行记录" - }, - { - "key": "executionDetails", - "zh": "执行详情" - }, - { - "key": "nodeExecutions", - "zh": "节点执行记录" - }, - { - "key": "nodePalette", - "zh": "节点面板" - }, - { - "key": "unsavedChanges", - "zh": "有未保存的更改" - }, - { - "key": "deleted", - "zh": "已删除" - }, - { - "key": "nothingToCopy", - "zh": "没有选中的节点可复制" - }, - { - "key": "nothingToPaste", - "zh": "剪贴板为空" - }, - { - "key": "copied", - "zh": "已复制 {{count}} 个节点" - }, - { - "key": "pasted", - "zh": "已粘贴 {{count}} 个节点" - }, - { - "key": "nodesSelected", - "zh": "已选中 {{count}} 个节点" - }, - { - "key": "searchNodes", - "zh": "搜索节点..." - }, - { - "key": "loadingNodeTypes", - "zh": "正在加载节点类型..." - }, - { - "key": "noNodesFound", - "zh": "未找到匹配的节点" - }, - { - "key": "clearSearch", - "zh": "清除搜索" - }, - { - "key": "dragToAdd", - "zh": "拖拽节点到画布添加" - }, - { - "key": "selectNodeOrEdge", - "zh": "选择一个节点或连线" - }, - { - "key": "selectNodeOrEdgeHint", - "zh": "点击画布中的节点或连线来查看和编辑其属性" - }, - { - "key": "nodeProperties", - "zh": "节点属性" - }, - { - "key": "condition", - "zh": "条件分支" - }, - { - "key": "hasCondition", - "zh": "已设置" - }, - { - "key": "conditionPlaceholder", - "zh": "输入条件表达式,如: output.success == true" - }, - { - "key": "conditionHelp", - "zh": "条件为空时,该连线将始终被执行。支持使用 {{变量名}} 引用上下文变量。" - }, - { - "key": "deleteEdge", - "zh": "删除连线" - }, - { - "key": "deleteEdgeConfirm", - "zh": "确定删除此连线?" - }, - { - "key": "deleteEdgeConfirmDesc", - "zh": "删除后,该连线将被永久移除。" - }, - { - "key": "nodeLabelPlaceholder", - "zh": "输入节点显示名称" - }, - { - "key": "availableVariables", - "zh": "可用变量" - }, - { - "key": "globalVariables", - "zh": "全局变量" - }, - { - "key": "messageContent", - "zh": "模拟消息" - }, - { - "key": "messageSender", - "zh": "发送者" - }, - { - "key": "timestamp", - "zh": "时间戳" - }, - { - "key": "noConfigOptions", - "zh": "该节点类型暂无配置选项" - }, - { - "key": "deleteNodeConfirm", - "zh": "确定删除此节点?" - }, - { - "key": "deleteNodeConfirmDesc", - "zh": "删除后,该节点及其所有连线将被永久移除。" - }, - { - "key": "context", - "zh": "调试上下文" - }, - { - "key": "body", - "zh": "请求体" - }, - { - "key": "variables", - "zh": "监控变量" - }, - { - "key": "items", - "zh": "项目列表" - }, - { - "key": "parameters", - "zh": "参数定义" - }, - { - "key": "branch_1", - "zh": "分支1输出" - }, - { - "key": "branch_2", - "zh": "分支2输出" - }, - { - "key": "hash_field", - "zh": "哈希字段" - }, - { - "key": "server_name", - "zh": "服务器名称" - }, - { - "key": "tool_name", - "zh": "工具名称" - }, - { - "key": "arguments_template", - "zh": "参数模板" - }, - { - "key": "sender", - "zh": "发送者" - }, - { - "key": "sender_id", - "zh": "发送者 ID" - }, - { - "key": "sender_name", - "zh": "发送者名称" - }, - { - "key": "cron_timestamp", - "zh": "Cron 时间戳" - }, - { - "key": "trigger_time", - "zh": "触发时间" - }, - { - "key": "headers", - "zh": "请求头" - }, - { - "key": "query_params", - "zh": "查询参数" - }, - { - "key": "method", - "zh": "请求方法" - }, - { - "key": "event_type", - "zh": "事件类型" - }, - { - "key": "event_timestamp", - "zh": "事件时间戳" - }, - { - "key": "usage", - "zh": "Token使用统计" - }, - { - "key": "category", - "zh": "分类结果" - }, - { - "key": "missing", - "zh": "缺失参数" - }, - { - "key": "success", - "zh": "是否成功" - }, - { - "key": "chunks", - "zh": "文本块" - }, - { - "key": "prompt", - "zh": "提示/问题" - }, - { - "key": "context_info", - "zh": "上下文信息" - }, - { - "key": "console", - "zh": "控制台输出" - }, - { - "key": "code_input", - "zh": "代码输入" - }, - { - "key": "code_output", - "zh": "代码输出" - }, - { - "key": "http_body", - "zh": "HTTP 请求体" - }, - { - "key": "http_headers", - "zh": "HTTP 请求头" - }, - { - "key": "response_headers", - "zh": "响应头" - }, - { - "key": "transform_input", - "zh": "转换输入" - }, - { - "key": "transform_result", - "zh": "转换结果" - }, - { - "key": "extraction_success", - "zh": "提取成功" - }, - { - "key": "extract_text", - "zh": "输入文本" - }, - { - "key": "documents", - "zh": "检索的文档" - }, - { - "key": "citations", - "zh": "引用信息" - }, - { - "key": "knowledge_context", - "zh": "合并上下文" - }, - { - "key": "true", - "zh": "条件为真输出" - }, - { - "key": "false", - "zh": "条件为假输出" - }, - { - "key": "matched_case", - "zh": "匹配分支" - }, - { - "key": "completed", - "zh": "已完成" - }, - { - "key": "is_first", - "zh": "是否第一个" - }, - { - "key": "is_last", - "zh": "是否最后一个" - }, - { - "key": "switch_input", - "zh": "开关输入" - }, - { - "key": "iterator_array", - "zh": "输入数组" - }, - { - "key": "parallel_input", - "zh": "并行输入" - }, - { - "key": "parallel_results", - "zh": "所有分支结果" - }, - { - "key": "wait_input", - "zh": "透传输入" - }, - { - "key": "wait_output", - "zh": "透传输出" - }, - { - "key": "merged", - "zh": "合并结果" - }, - { - "key": "merge_array", - "zh": "数组结果" - }, - { - "key": "aggregated", - "zh": "聚合变量" - }, - { - "key": "status_code", - "zh": "状态码" - }, - { - "key": "reply_message", - "zh": "回复内容" - }, - { - "key": "pipeline_result", - "zh": "完整结果" - }, - { - "key": "pipeline_query", - "zh": "查询内容" - }, - { - "key": "context_data", - "zh": "上下文数据" - }, - { - "key": "store_key", - "zh": "存储键" - }, - { - "key": "store_value", - "zh": "存储值" - }, - { - "key": "variable_result", - "zh": "设置变量结果" - }, - { - "key": "suggested_questions", - "zh": "建议问题" - }, - { - "key": "suggestions", - "zh": "建议问题" - }, - { - "key": "final_result", - "zh": "最终结果" - }, - { - "key": "query_results", - "zh": "查询结果" - }, - { - "key": "query_success", - "zh": "查询成功" - }, - { - "key": "plugin_input", - "zh": "插件输入" - }, - { - "key": "tool_result", - "zh": "工具结果" - }, - { - "key": "tool_success", - "zh": "工具成功" - }, - { - "key": "mcp_arguments", - "zh": "工具参数" - }, - { - "key": "memory_result", - "zh": "记忆结果" - }, - { - "key": "memory_success", - "zh": "记忆成功" - }, - { - "key": "memory_value", - "zh": "存储值" - }, - { - "key": "dify_query", - "zh": "用户输入/查询" - }, - { - "key": "search_results", - "zh": "搜索结果" - }, - { - "key": "knowledge_base_query", - "zh": "查询内容" - }, - { - "key": "n8n_payload", - "zh": "工作流输入数据" - }, - { - "key": "flow_result", - "zh": "流程结果" - }, - { - "key": "flow_success", - "zh": "流程成功" - }, - { - "key": "langflow_input", - "zh": "输入内容" - }, - { - "key": "bot_answer", - "zh": "机器人回复" - }, - { - "key": "bot_success", - "zh": "机器人成功" - }, - { - "key": "coze_query", - "zh": "用户输入/查询" - }, - { - "key": "webhook_body", - "zh": "Webhook 请求体" - }, - { - "key": "webhook_headers", - "zh": "Webhook 请求头" - }, - { - "key": "webhook_query", - "zh": "Webhook 查询参数" - }, - { - "key": "webhook_method", - "zh": "Webhook 请求方法" - }, - { - "key": "edgeCondition", - "zh": "条件表达式" - }, - { - "key": "noNodeSelected", - "zh": "未选中节点" - }, - { - "key": "selectNodeToEdit", - "zh": "点击节点查看和编辑属性" - }, - { - "key": "dragNodeHint", - "zh": "拖拽节点到画布" - }, - { - "key": "triggerDescription", - "zh": "工作流的起始节点" - }, - { - "key": "messageTrigger", - "zh": "消息触发" - }, - { - "key": "messageTriggerDescription", - "zh": "当收到消息时触发" - }, - { - "key": "scheduleTrigger", - "zh": "定时触发" - }, - { - "key": "scheduleTriggerDescription", - "zh": "按计划定时触发" - }, - { - "key": "cronTrigger", - "zh": "定时触发" - }, - { - "key": "cronTriggerDescription", - "zh": "按定时计划触发工作流" - }, - { - "key": "webhookTriggerDescription", - "zh": "通过 HTTP 请求触发" - }, - { - "key": "eventTrigger", - "zh": "事件触发" - }, - { - "key": "eventTriggerDescription", - "zh": "当系统事件发生时触发" - }, - { - "key": "processDescription", - "zh": "数据处理节点" - }, - { - "key": "aiProcessDescription", - "zh": "使用 AI 模型处理消息" - }, - { - "key": "llmCallDescription", - "zh": "调用大语言模型进行对话或生成" - }, - { - "key": "codeProcess", - "zh": "代码处理" - }, - { - "key": "codeProcessDescription", - "zh": "执行自定义代码" - }, - { - "key": "codeExecutor", - "zh": "代码执行" - }, - { - "key": "codeExecutorDescription", - "zh": "执行 Python/JavaScript 代码" - }, - { - "key": "templateProcessDescription", - "zh": "使用模板格式化输出" - }, - { - "key": "httpRequest", - "zh": "HTTP 请求" - }, - { - "key": "httpRequestDescription", - "zh": "发送 HTTP 请求" - }, - { - "key": "questionClassifierDescription", - "zh": "使用 LLM 将用户问题分类到预定义类别" - }, - { - "key": "parameterExtractor", - "zh": "参数提取器" - }, - { - "key": "parameterExtractorDescription", - "zh": "使用 LLM 从文本中提取结构化参数" - }, - { - "key": "knowledgeRetrieval", - "zh": "知识库检索" - }, - { - "key": "knowledgeRetrievalDescription", - "zh": "从知识库中检索相关内容" - }, - { - "key": "textTemplate", - "zh": "文本模板" - }, - { - "key": "textTemplateDescription", - "zh": "使用模板生成文本" - }, - { - "key": "dataAggregator", - "zh": "数据聚合" - }, - { - "key": "dataAggregatorDescription", - "zh": "聚合多个数据源" - }, - { - "key": "textSplitter", - "zh": "文本分割" - }, - { - "key": "textSplitterDescription", - "zh": "将文本分割成块" - }, - { - "key": "variableAssignment", - "zh": "变量赋值" - }, - { - "key": "variableAssignmentDescription", - "zh": "为工作流变量赋值" - }, - { - "key": "controlDescription", - "zh": "流程控制节点" - }, - { - "key": "conditionDescription", - "zh": "根据条件分流" - }, - { - "key": "switch", - "zh": "多路分支" - }, - { - "key": "switchDescription", - "zh": "多条件分支选择" - }, - { - "key": "loopDescription", - "zh": "重复执行" - }, - { - "key": "iteratorDescription", - "zh": "遍历数组元素" - }, - { - "key": "parallel", - "zh": "并行处理" - }, - { - "key": "parallelDescription", - "zh": "并行执行多个分支" - }, - { - "key": "waitDescription", - "zh": "等待指定时间" - }, - { - "key": "delayDescription", - "zh": "等待指定时间" - }, - { - "key": "mergeDescription", - "zh": "合并多个分支" - }, - { - "key": "variableAggregator", - "zh": "变量聚合器" - }, - { - "key": "variableAggregatorDescription", - "zh": "聚合多个分支的变量输出" - }, - { - "key": "actionDescription", - "zh": "执行动作的节点" - }, - { - "key": "sendMessageDescription", - "zh": "发送消息到平台" - }, - { - "key": "replyMessage", - "zh": "回复消息" - }, - { - "key": "replyMessageDescription", - "zh": "回复触发工作流的消息" - }, - { - "key": "storeDataDescription", - "zh": "存储数据到数据库" - }, - { - "key": "callPipelineDescription", - "zh": "调用现有的 Pipeline" - }, - { - "key": "setVariable", - "zh": "设置变量" - }, - { - "key": "setVariableDescription", - "zh": "设置上下文变量" - }, - { - "key": "openingStatement", - "zh": "对话开场白" - }, - { - "key": "openingStatementDescription", - "zh": "提供对话开场白和建议问题" - }, - { - "key": "endDescription", - "zh": "标记工作流执行结束" - }, - { - "key": "logDescription", - "zh": "记录日志信息" - }, - { - "key": "integrationDescription", - "zh": "第三方平台集成节点" - }, - { - "key": "difyWorkflowDescription", - "zh": "调用 Dify 平台工作流" - }, - { - "key": "difyKnowledgeQuery", - "zh": "Dify 知识库" - }, - { - "key": "difyKnowledgeQueryDescription", - "zh": "查询 Dify 知识库" - }, - { - "key": "n8nWorkflowDescription", - "zh": "调用 n8n 工作流" - }, - { - "key": "langflowFlowDescription", - "zh": "调用 Langflow 流程" - }, - { - "key": "cozeBotDescription", - "zh": "调用扣子 Bot" - }, - { - "key": "databaseQueryDescription", - "zh": "执行数据库查询" - }, - { - "key": "redisOperationDescription", - "zh": "执行 Redis 缓存操作" - }, - { - "key": "memoryStore", - "zh": "记忆存储" - }, - { - "key": "memoryStoreDescription", - "zh": "从工作流记忆中存储和检索数据" - }, - { - "key": "startTime", - "zh": "开始时间" - }, - { - "key": "running", - "zh": "执行中" - }, - { - "key": "nodeResults", - "zh": "节点执行结果" - }, - { - "key": "current", - "zh": "当前版本" - }, - { - "key": "rollback", - "zh": "回滚到此版本" - }, - { - "key": "rollbackConfirm", - "zh": "确定回滚到此版本?当前更改将丢失。" - }, - { - "key": "rollbackSuccess", - "zh": "回滚成功" - }, - { - "key": "rollbackError", - "zh": "回滚失败:" - }, - { - "key": "mode", - "zh": "调试模式" - }, - { - "key": "panel", - "zh": "调试面板" - }, - { - "key": "step", - "zh": "单步执行" - }, - { - "key": "messageContentPlaceholder", - "zh": "输入要模拟的消息内容" - }, - { - "key": "senderId", - "zh": "发送者 ID" - }, - { - "key": "senderIdPlaceholder", - "zh": "发送者唯一标识" - }, - { - "key": "senderName", - "zh": "发送者名称" - }, - { - "key": "senderNamePlaceholder", - "zh": "发送者显示名称" - }, - { - "key": "conversationIdPlaceholder", - "zh": "会话唯一标识" - }, - { - "key": "customVariables", - "zh": "自定义变量" - }, - { - "key": "customVariablesDesc", - "zh": "添加自定义变量用于调试" - }, - { - "key": "variableKey", - "zh": "变量名" - }, - { - "key": "watchedVariables", - "zh": "监控变量" - }, - { - "key": "noWatchedVariables", - "zh": "暂无监控变量" - }, - { - "key": "addWatchVariable", - "zh": "添加监控" - }, - { - "key": "nodeStates", - "zh": "节点状态" - }, - { - "key": "noNodeOutputs", - "zh": "暂无节点输出" - }, - { - "key": "toggleBreakpoint", - "zh": "切换断点" - }, - { - "key": "breakpointSet", - "zh": "断点已设置" - }, - { - "key": "noLogs", - "zh": "暂无日志" - }, - { - "key": "clearLogs", - "zh": "清空日志" - }, - { - "key": "logEntries", - "zh": "条日志" - }, - { - "key": "resetContext", - "zh": "重置上下文" - }, - { - "key": "starting", - "zh": "正在启动调试执行..." - }, - { - "key": "started", - "zh": "调试执行已启动 (ID: {{id}})" - }, - { - "key": "startError", - "zh": "启动调试失败" - }, - { - "key": "unknownError", - "zh": "未知错误" - }, - { - "key": "paused", - "zh": "已暂停" - }, - { - "key": "resumed", - "zh": "执行已恢复" - }, - { - "key": "resumeError", - "zh": "恢复失败" - }, - { - "key": "steppedTo", - "zh": "已执行到节点: {{node}}" - }, - { - "key": "stepError", - "zh": "单步执行失败" - }, - { - "key": "stopped", - "zh": "调试已停止" - }, - { - "key": "debugMode", - "zh": "调试模式" - }, - { - "key": "debugPanel", - "zh": "调试面板" - }, - { - "key": "stepDebug", - "zh": "单步执行" - }, - { - "key": "debugContext", - "zh": "调试上下文" - }, - { - "key": "simulatedMessage", - "zh": "模拟消息" - }, - { - "key": "simulatedMessagePlaceholder", - "zh": "输入要模拟的消息内容" - }, - { - "key": "variableName", - "zh": "变量名" - }, - { - "key": "debugLogs", - "zh": "调试日志" - }, - { - "key": "pending", - "zh": "等待中" - }, - { - "key": "skipped", - "zh": "已跳过" - }, - { - "key": "sessionType", - "zh": "会话类型" - }, - { - "key": "reset", - "zh": "重置对话" - }, - { - "key": "noMessages", - "zh": "暂无消息" - }, - { - "key": "resetSuccess", - "zh": "对话已重置" - }, - { - "key": "resetFailed", - "zh": "重置失败" - }, - { - "key": "connected", - "zh": "WebSocket已连接" - }, - { - "key": "disconnected", - "zh": "WebSocket未连接" - }, - { - "key": "connectionError", - "zh": "WebSocket连接错误" - }, - { - "key": "connectionFailed", - "zh": "WebSocket连接失败" - }, - { - "key": "notConnected", - "zh": "WebSocket未连接,请稍后重试" - }, - { - "key": "imageUploadFailed", - "zh": "图片上传失败" - }, - { - "key": "replyTo", - "zh": "回复给" - }, - { - "key": "filterByDate", - "zh": "按日期筛选" - }, - { - "key": "allTime", - "zh": "全部时间" - }, - { - "key": "lastMonth", - "zh": "最近一个月" - }, - { - "key": "rerun", - "zh": "重新运行" - }, - { - "key": "rerunExecution", - "zh": "重新执行" - }, - { - "key": "completedAt", - "zh": "完成时间" - }, - { - "key": "noNodeExecutions", - "zh": "暂无节点执行记录" - }, - { - "key": "conditions", - "zh": "触发条件" - }, - { - "key": "keyword_filter", - "zh": "关键词过滤" - }, - { - "key": "respond_rules", - "zh": "群响应规则" - }, - { - "key": "allowed_methods", - "zh": "允许的HTTP方法" - }, - { - "key": "validation", - "zh": "请求验证" - }, - { - "key": "event_types", - "zh": "事件类型" - }, - { - "key": "debounce_ms", - "zh": "防抖时间" - }, - { - "key": "prompt_template", - "zh": "提示词模板" - }, - { - "key": "system_prompt", - "zh": "系统提示词" - }, - { - "key": "max_tokens", - "zh": "最大Token数" - }, - { - "key": "stop_sequences", - "zh": "停止序列" - }, - { - "key": "stream", - "zh": "流式输出" - }, - { - "key": "use_conversation_history", - "zh": "使用对话历史" - }, - { - "key": "url", - "zh": "请求URL" - }, - { - "key": "auth_config", - "zh": "认证配置" - }, - { - "key": "transform_type", - "zh": "转换类型" - }, - { - "key": "categories", - "zh": "分类类别" - }, - { - "key": "knowledge_bases", - "zh": "知识库" - }, - { - "key": "score_threshold", - "zh": "相似度阈值" - }, - { - "key": "search_method", - "zh": "搜索方法" - }, - { - "key": "enable_citations", - "zh": "启用引用" - }, - { - "key": "condition_expression", - "zh": "条件表达式" - }, - { - "key": "left_value", - "zh": "左值" - }, - { - "key": "right_value", - "zh": "右值" - }, - { - "key": "cases", - "zh": "分支条件" - }, - { - "key": "max_iterations", - "zh": "最大迭代次数" - }, - { - "key": "break_condition", - "zh": "中断条件" - }, - { - "key": "max_concurrency", - "zh": "最大并发数" - }, - { - "key": "branches", - "zh": "分支配置" - }, - { - "key": "wait_all", - "zh": "等待所有" - }, - { - "key": "fail_fast", - "zh": "快速失败" - }, - { - "key": "duration_type", - "zh": "时间单位" - }, - { - "key": "merge_strategy", - "zh": "合并策略" - }, - { - "key": "variable_mappings", - "zh": "变量映射" - }, - { - "key": "target_type", - "zh": "目标类型" - }, - { - "key": "reply_mode", - "zh": "回复模式" - }, - { - "key": "message_template", - "zh": "消息模板" - }, - { - "key": "long_text_processing", - "zh": "长文本处理" - }, - { - "key": "force_delay", - "zh": "强制延迟" - }, - { - "key": "inherit_context", - "zh": "继承上下文" - }, - { - "key": "storage_type", - "zh": "存储类型" - }, - { - "key": "ttl", - "zh": "过期时间" - }, - { - "key": "key_prefix", - "zh": "键前缀" - }, - { - "key": "variable_scope", - "zh": "变量作用域" - }, - { - "key": "set_variable_operation", - "zh": "操作类型" - }, - { - "key": "output_format", - "zh": "输出格式" - }, - { - "key": "connection_type", - "zh": "数据库类型" - }, - { - "key": "connection_string", - "zh": "连接字符串" - }, - { - "key": "query_type", - "zh": "查询类型" - }, - { - "key": "operation", - "zh": "操作类型" - }, - { - "key": "dataset_id", - "zh": "知识库ID" - }, - { - "key": "json_transform_type", - "zh": "JSON转换类型" - }, - { - "key": "mapping", - "zh": "字段映射" - }, - { - "key": "code_content", - "zh": "代码内容" - }, - { - "key": "aggregation_type", - "zh": "聚合类型" - }, - { - "key": "field_path", - "zh": "字段路径" - }, - { - "key": "split_type", - "zh": "分割类型" - }, - { - "key": "regex_pattern", - "zh": "正则表达式" - }, - { - "key": "assign_variable_name", - "zh": "变量名" - }, - { - "key": "static_value", - "zh": "静态值" - } -] \ No newline at end of file diff --git a/web/translate_i18n_keys.py b/web/translate_i18n_keys.py deleted file mode 100644 index 0ecfcc20..00000000 --- a/web/translate_i18n_keys.py +++ /dev/null @@ -1,265 +0,0 @@ -#!/usr/bin/env python3 -""" -将英文翻译键翻译成对应的目标语言 -""" - -from pathlib import Path -import re - -# 翻译映射表 -TRANSLATIONS = { - 'ja-JP': { # 日文 - 'Sender': '送信者', - 'Output': '出力', - 'Result': '結果', - 'Data': 'データ', - 'Error Message': 'エラーメッセージ', - 'Success Status': '成功ステータス', - 'Event': 'イベント', - 'Trigger Time': 'トリガー時刻', - 'Logs': 'ログ', - 'Scores': 'スコア', - 'Missing Parameters': '不足パラメータ', - 'Parsed Result': '解析結果', - 'Text Chunks': 'テキストチャンク', - 'Text Content': 'テキスト内容', - 'Case 1 Output': 'ケース1出力', - 'Case 2 Output': 'ケース2出力', - 'Branch 1 Output': 'ブランチ1出力', - 'Branch 2 Output': 'ブランチ2出力', - 'Count': 'カウント', - 'Execution ID': '実行ID', - 'Notification ID': '通知ID', - 'Suggestions': '提案', - 'Embedding Vector': '埋め込みベクトル', - 'Vector Dimensions': 'ベクトル次元', - 'Intent': '意図', - 'Entities': 'エンティティ', - 'Payload': 'ペイロード', - 'Input Value': '入力値', - 'Conversation ID': '会話ID', - }, - 'zh-Hant': { # 繁体中文 - 'Sender': '發送者', - 'Output': '輸出', - 'Result': '結果', - 'Data': '數據', - 'Error Message': '錯誤訊息', - 'Success Status': '成功狀態', - 'Event': '事件', - 'Trigger Time': '觸發時間', - 'Logs': '日誌', - 'Scores': '分數', - 'Missing Parameters': '缺失參數', - 'Parsed Result': '解析結果', - 'Text Chunks': '文本塊', - 'Text Content': '文本內容', - 'Case 1 Output': '情況1輸出', - 'Case 2 Output': '情況2輸出', - 'Branch 1 Output': '分支1輸出', - 'Branch 2 Output': '分支2輸出', - 'Count': '計數', - 'Execution ID': '執行ID', - 'Notification ID': '通知ID', - 'Suggestions': '建議', - 'Embedding Vector': '嵌入向量', - 'Vector Dimensions': '向量維度', - 'Intent': '意圖', - 'Entities': '實體', - 'Payload': '負載', - 'Input Value': '輸入值', - 'Conversation ID': '對話ID', - }, - 'es-ES': { # 西班牙语 - 'Sender': 'Remitente', - 'Output': 'Salida', - 'Result': 'Resultado', - 'Data': 'Datos', - 'Error Message': 'Mensaje de Error', - 'Success Status': 'Estado de Éxito', - 'Event': 'Evento', - 'Trigger Time': 'Hora de Activación', - 'Logs': 'Registros', - 'Scores': 'Puntuaciones', - 'Missing Parameters': 'Parámetros Faltantes', - 'Parsed Result': 'Resultado Analizado', - 'Text Chunks': 'Fragmentos de Texto', - 'Text Content': 'Contenido de Texto', - 'Case 1 Output': 'Salida Caso 1', - 'Case 2 Output': 'Salida Caso 2', - 'Branch 1 Output': 'Salida Rama 1', - 'Branch 2 Output': 'Salida Rama 2', - 'Count': 'Conteo', - 'Execution ID': 'ID de Ejecución', - 'Notification ID': 'ID de Notificación', - 'Suggestions': 'Sugerencias', - 'Embedding Vector': 'Vector de Incrustación', - 'Vector Dimensions': 'Dimensiones del Vector', - 'Intent': 'Intención', - 'Entities': 'Entidades', - 'Payload': 'Carga Útil', - 'Input Value': 'Valor de Entrada', - 'Conversation ID': 'ID de Conversación', - }, - 'ru-RU': { # 俄语 - 'Sender': 'Отправитель', - 'Output': 'Вывод', - 'Result': 'Результат', - 'Data': 'Данные', - 'Error Message': 'Сообщение об Ошибке', - 'Success Status': 'Статус Успеха', - 'Event': 'Событие', - 'Trigger Time': 'Время Триггера', - 'Logs': 'Журналы', - 'Scores': 'Оценки', - 'Missing Parameters': 'Отсутствующие Параметры', - 'Parsed Result': 'Разобранный Результат', - 'Text Chunks': 'Фрагменты Текста', - 'Text Content': 'Текстовое Содержимое', - 'Case 1 Output': 'Вывод Случая 1', - 'Case 2 Output': 'Вывод Случая 2', - 'Branch 1 Output': 'Вывод Ветви 1', - 'Branch 2 Output': 'Вывод Ветви 2', - 'Count': 'Количество', - 'Execution ID': 'ID Выполнения', - 'Notification ID': 'ID Уведомления', - 'Suggestions': 'Предложения', - 'Embedding Vector': 'Вектор Встраивания', - 'Vector Dimensions': 'Размерности Вектора', - 'Intent': 'Намерение', - 'Entities': 'Сущности', - 'Payload': 'Полезная Нагрузка', - 'Input Value': 'Входное Значение', - 'Conversation ID': 'ID Разговора', - }, - 'th-TH': { # 泰语 - 'Sender': 'ผู้ส่ง', - 'Output': 'ผลลัพธ์', - 'Result': 'ผลลัพธ์', - 'Data': 'ข้อมูล', - 'Error Message': 'ข้อความข้อผิดพลาด', - 'Success Status': 'สถานะความสำเร็จ', - 'Event': 'เหตุการณ์', - 'Trigger Time': 'เวลาทริกเกอร์', - 'Logs': 'บันทึก', - 'Scores': 'คะแนน', - 'Missing Parameters': 'พารามิเตอร์ที่ขาดหายไป', - 'Parsed Result': 'ผลการแยกวิเคราะห์', - 'Text Chunks': 'ส่วนข้อความ', - 'Text Content': 'เนื้อหาข้อความ', - 'Case 1 Output': 'ผลลัพธ์กรณีที่ 1', - 'Case 2 Output': 'ผลลัพธ์กรณีที่ 2', - 'Branch 1 Output': 'ผลลัพธ์สาขา 1', - 'Branch 2 Output': 'ผลลัพธ์สาขา 2', - 'Count': 'จำนวน', - 'Execution ID': 'ID การดำเนินการ', - 'Notification ID': 'ID การแจ้งเตือน', - 'Suggestions': 'คำแนะนำ', - 'Embedding Vector': 'เวกเตอร์ฝังตัว', - 'Vector Dimensions': 'มิติเวกเตอร์', - 'Intent': 'เจตนา', - 'Entities': 'เอนทิตี', - 'Payload': 'เพย์โหลด', - 'Input Value': 'ค่าอินพุต', - 'Conversation ID': 'ID การสนทนา', - }, - 'vi-VN': { # 越南语 - 'Sender': 'Người gửi', - 'Output': 'Đầu ra', - 'Result': 'Kết quả', - 'Data': 'Dữ liệu', - 'Error Message': 'Thông báo Lỗi', - 'Success Status': 'Trạng thái Thành công', - 'Event': 'Sự kiện', - 'Trigger Time': 'Thời gian Kích hoạt', - 'Logs': 'Nhật ký', - 'Scores': 'Điểm số', - 'Missing Parameters': 'Tham số Thiếu', - 'Parsed Result': 'Kết quả Phân tích', - 'Text Chunks': 'Đoạn Văn bản', - 'Text Content': 'Nội dung Văn bản', - 'Case 1 Output': 'Đầu ra Trường hợp 1', - 'Case 2 Output': 'Đầu ra Trường hợp 2', - 'Branch 1 Output': 'Đầu ra Nhánh 1', - 'Branch 2 Output': 'Đầu ra Nhánh 2', - 'Count': 'Số lượng', - 'Execution ID': 'ID Thực thi', - 'Notification ID': 'ID Thông báo', - 'Suggestions': 'Gợi ý', - 'Embedding Vector': 'Vector Nhúng', - 'Vector Dimensions': 'Kích thước Vector', - 'Intent': 'Ý định', - 'Entities': 'Thực thể', - 'Payload': 'Tải trọng', - 'Input Value': 'Giá trị Đầu vào', - 'Conversation ID': 'ID Hội thoại', - }, -} - -def translate_file(file_path: Path, lang_code: str): - """翻译指定语言文件""" - print(f"\n处理文件: {file_path.name}") - - if lang_code not in TRANSLATIONS: - print(f" ⚠️ 没有 {lang_code} 的翻译映射") - return - - translations = TRANSLATIONS[lang_code] - - with open(file_path, 'r', encoding='utf-8') as f: - content = f.read() - - modified = False - translated_count = 0 - - # 替换翻译 - for english, translated in translations.items(): - # 匹配格式: key: 'English Text', - pattern = rf"(\s+\w+:\s+)'{re.escape(english)}'," - if re.search(pattern, content): - content = re.sub(pattern, rf"\1'{translated}',", content) - translated_count += 1 - modified = True - print(f" ✓ 翻译: '{english}' -> '{translated}'") - - if modified: - with open(file_path, 'w', encoding='utf-8') as f: - f.write(content) - print(f" ✅ 已更新 {file_path.name},共翻译 {translated_count} 个键") - else: - print(f" - {file_path.name} 无需翻译") - -def main(): - """主函数""" - locales_dir = Path(__file__).parent / 'src' / 'i18n' / 'locales' - - print("=" * 60) - print("开始翻译多语言 i18n 文件") - print("=" * 60) - - language_files = { - 'ja-JP.ts': 'ja-JP', - 'zh-Hant.ts': 'zh-Hant', - 'es-ES.ts': 'es-ES', - 'ru-RU.ts': 'ru-RU', - 'th-TH.ts': 'th-TH', - 'vi-VN.ts': 'vi-VN', - } - - total_translated = 0 - for filename, lang_code in language_files.items(): - file_path = locales_dir / filename - if file_path.exists(): - translate_file(file_path, lang_code) - total_translated += 1 - else: - print(f"\n警告: 文件不存在 - {filename}") - - print("\n" + "=" * 60) - print("翻译完成!") - print("=" * 60) - print(f"\n已处理 {total_translated} 个语言文件") - print(f"每个文件最多翻译 {len(TRANSLATIONS['ja-JP'])} 个键") - -if __name__ == '__main__': - main() diff --git a/web/translation_template.json b/web/translation_template.json deleted file mode 100644 index 2d97c9bc..00000000 --- a/web/translation_template.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "_comment": "翻译模板 - 请填写各语言的翻译", - "_instructions": "1. 从workflows_chinese_texts.json复制需要翻译的键; 2. 为每个键添加各语言翻译; 3. 运行apply_translations.py应用翻译", - "_languages": { - "ja-JP": "日语", - "zh-Hant": "繁体中文", - "es-ES": "西班牙语", - "ru-RU": "俄语", - "th-TH": "泰语", - "vi-VN": "越南语" - }, - "translations": { - "title": { - "zh-Hans": "工作流", - "ja-JP": "ワークフロー", - "zh-Hant": "工作流", - "es-ES": "Flujo de trabajo", - "ru-RU": "Рабочий процесс", - "th-TH": "เวิร์กโฟลว์", - "vi-VN": "Quy trình làm việc" - } - } -} diff --git a/web/workflows_chinese_texts.json b/web/workflows_chinese_texts.json deleted file mode 100644 index 18997e1d..00000000 --- a/web/workflows_chinese_texts.json +++ /dev/null @@ -1,629 +0,0 @@ -{ - "title": "工作流对话", - "description": "描述", - "createWorkflow": "创建工作流", - "selectFromSidebar": "从侧边栏选择一个工作流", - "editWorkflow": "编辑工作流", - "newWorkflow": "新工作流", - "getWorkflowListError": "获取工作流列表失败:", - "workflowName": "工作流名称", - "workflowDescription": "工作流描述", - "workflowNameRequired": "工作流名称不能为空", - "defaultDescription": "一个工作流", - "getWorkflowError": "获取工作流失败:", - "loadError": "加载工作流失败", - "saveSuccess": "保存成功", - "saveError": "保存失败:", - "createSuccess": "工作流创建成功", - "createError": "创建失败:", - "deleteSuccess": "删除成功", - "deleteError": "删除失败:", - "deleteConfirmation": "你确定要删除这个工作流吗?", - "copySuccess": "复制成功", - "copyError": "复制失败:", - "export": "导出", - "import": "导入", - "exportSuccess": "工作流已导出", - "importSuccess": "工作流已导入", - "importError": "导入失败:文件格式无效", - "publish": "发布", - "publishSuccess": "发布成功", - "publishError": "发布失败", - "configuration": "配置", - "executions": "执行记录", - "editor": "编辑器", - "debugChat": "对话调试", - "basicInfo": "基础信息", - "basicInfoDesc": "设置工作流名称、图标和描述", - "basicInfoDescription": "设置工作流名称和描述", - "dangerZone": "危险区域", - "dangerZoneDesc": "不可逆的操作", - "dangerZoneDescription": "不可逆的操作", - "deleteWorkflowAction": "删除此工作流", - "deleteWorkflowHint": "删除后,所有关联配置将被永久移除,且无法恢复。", - "deleteWorkflow": "删除工作流", - "deleteConfirm": "确认删除", - "deleteConfirmDesc": "您确定要删除工作流 \"{{name}}\" 吗?此操作无法撤销。", - "name": "名称", - "namePlaceholder": "输入工作流名称", - "descriptionPlaceholder": "输入工作流描述(可选)", - "enabled": "启用", - "enabledDesc": "启用后,工作流将可以被触发执行", - "loading": "加载中...", - "info": "工作流信息", - "uuid": "UUID", - "version": "版本", - "createdAt": "创建时间", - "updatedAt": "更新时间", - "totalExecutions": "共 {{count}} 条执行记录", - "statistics": "统计分析", - "successfulCount": "成功 {{count}} 次", - "successRate": "成功率", - "averageDuration": "平均耗时", - "perExecution": "每次执行", - "failedExecutions": "失败次数", - "lastExecution": "最后执行", - "filterByStatus": "按状态筛选", - "allStatuses": "全部状态", - "manualTrigger": "手动触发", - "executionId": "执行 ID", - "status": "状态", - "triggerType": "触发类型", - "startedAt": "开始时间", - "duration": "等待时间", - "noExecutions": "暂无执行记录", - "executionDetails": "执行详情", - "error": "错误", - "nodeExecutions": "节点执行记录", - "result": "结果", - "nodePalette": "节点面板", - "properties": "属性", - "zoomIn": "放大", - "zoomOut": "缩小", - "fitView": "适应视图", - "unsavedChanges": "有未保存的更改", - "paste": "粘贴", - "deleted": "已删除", - "nothingToCopy": "没有选中的节点可复制", - "nothingToPaste": "剪贴板为空", - "copied": "已复制 {{count}} 个节点", - "pasted": "已粘贴 {{count}} 个节点", - "nodesSelected": "已选中 {{count}} 个节点", - "edgesSelected": "已选中 {{count}} 条连线", - "searchNodes": "搜索节点...", - "loadingNodeTypes": "正在加载节点类型...", - "noNodesFound": "未找到匹配的节点", - "clearSearch": "清除搜索", - "dragToAdd": "拖拽节点到画布添加", - "selectNodeOrEdge": "选择一个节点或连线", - "selectNodeOrEdgeHint": "点击画布中的节点或连线来查看和编辑其属性", - "edgeProperties": "连线属性", - "nodeProperties": "节点属性", - "condition": "条件分支", - "hasCondition": "已设置", - "conditionPlaceholder": "输入条件表达式,如: output.success == true", - "conditionHelp": "条件为空时,该连线将始终被执行。支持使用 {{变量名}} 引用上下文变量。", - "deleteEdge": "删除连线", - "deleteEdgeConfirm": "确定删除此连线?", - "deleteEdgeConfirmDesc": "删除后,该连线将被永久移除。", - "nodeLabel": "节点名称", - "nodeLabelPlaceholder": "输入节点显示名称", - "nodeId": "节点 ID", - "inputOutputVariables": "输入/输出变量", - "inputs": "输入", - "outputs": "输出", - "availableVariables": "可用变量", - "globalVariables": "全局变量", - "messageContent": "模拟消息", - "messageSender": "发送者", - "platform": "平台", - "sessionId": "会话 ID", - "timestamp": "时间戳", - "nodeConfig": "节点配置", - "noConfigOptions": "该节点类型暂无配置选项", - "deleteNode": "删除节点", - "deleteNodeConfirm": "确定删除此节点?", - "deleteNodeConfirmDesc": "删除后,该节点及其所有连线将被永久移除。", - "input": "输入", - "message": "消息", - "text": "文本", - "query": "SQL查询", - "data": "数据", - "value": "值", - "content": "内容", - "context": "调试上下文", - "body": "请求体", - "variables": "监控变量", - "items": "项目列表", - "arguments": "参数", - "question": "用户问题", - "parameters": "参数定义", - "key": "键", - "payload": "载荷", - "input_value": "输入值", - "conversation_id": "会话 ID", - "case_1": "分支 1", - "case_2": "分支 2", - "branch_1": "分支1输出", - "branch_2": "分支2输出", - "notification_id": "通知ID", - "key_template": "键模板", - "hash_field": "哈希字段", - "server_name": "服务器名称", - "tool_name": "工具名称", - "arguments_template": "参数模板", - "scope": "作用域", - "output": "输出", - "response": "响应", - "sender": "发送者", - "sender_id": "发送者 ID", - "sender_name": "发送者名称", - "cron_timestamp": "Cron 时间戳", - "cron_schedule": "Cron 调度表达式", - "cron_context": "Cron 上下文", - "trigger_time": "触发时间", - "schedule": "触发计划", - "headers": "请求头", - "query_params": "查询参数", - "method": "请求方法", - "is_group": "是否群聊", - "event": "事件", - "event_type": "事件类型", - "event_data": "事件数据", - "event_timestamp": "事件时间戳", - "usage": "Token使用统计", - "parsed": "解析结果", - "category": "分类结果", - "confidence": "置信度", - "all_scores": "所有分数", - "missing": "缺失参数", - "success": "是否成功", - "scores": "分数", - "chunks": "文本块", - "count": "数量", - "logs": "日志", - "embedding": "向量", - "dimensions": "维度", - "intent": "意图", - "entities": "实体", - "prompt": "提示/问题", - "context_info": "上下文信息", - "console": "控制台输出", - "code_input": "代码输入", - "code_output": "代码输出", - "http_body": "HTTP 请求体", - "http_headers": "HTTP 请求头", - "http_response": "HTTP 响应", - "response_headers": "响应头", - "transform_input": "转换输入", - "transform_result": "转换结果", - "extraction_success": "提取成功", - "extract_text": "输入文本", - "documents": "检索的文档", - "citations": "引用信息", - "knowledge_context": "合并上下文", - "knowledge_query": "检索查询", - "true": "条件为真输出", - "false": "条件为假输出", - "matched_case": "匹配分支", - "default": "默认分支", - "item": "当前项", - "index": "当前索引", - "completed": "已完成", - "is_first": "是否第一个", - "is_last": "是否最后一个", - "results": "结果", - "condition_input": "条件输入", - "switch_input": "开关输入", - "loop_items": "迭代项目", - "iterator_array": "输入数组", - "iterator_item": "当前元素", - "iterator_index": "当前索引", - "errors": "错误列表", - "parallel_input": "并行输入", - "parallel_results": "所有分支结果", - "wait_input": "透传输入", - "wait_output": "透传输出", - "merged": "合并结果", - "merge_array": "数组结果", - "merge_input_1": "输入 1", - "merge_input_2": "输入 2", - "merge_input_3": "输入 3", - "merge_input_4": "输入 4", - "aggregated": "聚合变量", - "aggregator_variables": "变量输入", - "message_id": "消息ID", - "status_code": "状态码", - "execution_id": "执行ID", - "target": "目标 ID", - "reply_message": "回复内容", - "pipeline_response": "Pipeline 响应", - "pipeline_result": "完整结果", - "pipeline_query": "查询内容", - "context_data": "上下文数据", - "store_status": "存储状态", - "store_key": "存储键", - "store_value": "存储值", - "variable_value": "变量值", - "variable_result": "设置变量结果", - "statement": "开场白", - "suggested_questions": "建议问题", - "suggestions": "建议问题", - "workflow_output": "工作流输出", - "final_result": "最终结果", - "query_results": "查询结果", - "row_count": "行数", - "query_success": "查询成功", - "redis_result": "Redis结果", - "redis_success": "Redis成功", - "redis_key": "Redis 键", - "redis_value": "Redis 值", - "plugin_input": "插件输入", - "tool_result": "工具结果", - "tool_success": "工具成功", - "mcp_arguments": "工具参数", - "memory_result": "记忆结果", - "memory_success": "记忆成功", - "memory_value": "存储值", - "answer": "答案", - "dify_success": "Dify成功", - "dify_query": "用户输入/查询", - "dify_conversation_id": "会话 ID", - "search_results": "搜索结果", - "knowledge_base_query": "查询内容", - "n8n_result": "N8n结果", - "n8n_success": "N8n成功", - "n8n_payload": "工作流输入数据", - "flow_result": "流程结果", - "flow_success": "流程成功", - "langflow_input": "输入内容", - "bot_answer": "机器人回复", - "bot_success": "机器人成功", - "coze_query": "用户输入/查询", - "coze_conversation_id": "会话 ID", - "bot_conversation_id": "会话 ID", - "webhook_body": "Webhook 请求体", - "webhook_headers": "Webhook 请求头", - "webhook_query": "Webhook 查询参数", - "webhook_method": "Webhook 请求方法", - "save": "保存", - "undo": "撤销", - "redo": "重做", - "edgeCondition": "条件表达式", - "edgeConditionPlaceholder": "如: ${output.success} == true", - "noNodeSelected": "未选中节点", - "selectNodeToEdit": "点击节点查看和编辑属性", - "dragNodeHint": "拖拽节点到画布", - "trigger": "触发器", - "triggerDescription": "工作流的起始节点", - "messageTrigger": "消息触发", - "messageTriggerDescription": "当收到消息时触发", - "scheduleTrigger": "定时触发", - "scheduleTriggerDescription": "按计划定时触发", - "cronTrigger": "定时触发", - "cronTriggerDescription": "按定时计划触发工作流", - "webhookTrigger": "Webhook 触发", - "webhookTriggerDescription": "通过 HTTP 请求触发", - "eventTrigger": "事件触发", - "eventTriggerDescription": "当系统事件发生时触发", - "process": "AI/处理", - "processDescription": "数据处理节点", - "aiProcess": "AI 处理", - "aiProcessDescription": "使用 AI 模型处理消息", - "llmCall": "LLM 调用", - "llmCallDescription": "调用大语言模型进行对话或生成", - "codeProcess": "代码处理", - "codeProcessDescription": "执行自定义代码", - "codeExecutor": "代码执行", - "codeExecutorDescription": "执行 Python/JavaScript 代码", - "templateProcess": "模板处理", - "templateProcessDescription": "使用模板格式化输出", - "httpRequest": "HTTP 请求", - "httpRequestDescription": "发送 HTTP 请求", - "dataTransform": "数据转换", - "dataTransformDescription": "转换数据格式", - "questionClassifier": "问题分类器", - "questionClassifierDescription": "使用 LLM 将用户问题分类到预定义类别", - "parameterExtractor": "参数提取器", - "parameterExtractorDescription": "使用 LLM 从文本中提取结构化参数", - "knowledgeRetrieval": "知识库检索", - "knowledgeRetrievalDescription": "从知识库中检索相关内容", - "textTemplate": "文本模板", - "textTemplateDescription": "使用模板生成文本", - "jsonTransform": "JSON 转换", - "jsonTransformDescription": "转换 JSON 数据", - "dataAggregator": "数据聚合", - "dataAggregatorDescription": "聚合多个数据源", - "textSplitter": "文本分割", - "textSplitterDescription": "将文本分割成块", - "variableAssignment": "变量赋值", - "variableAssignmentDescription": "为工作流变量赋值", - "control": "控制流", - "controlDescription": "流程控制节点", - "conditionDescription": "根据条件分流", - "switch": "多路分支", - "switchDescription": "多条件分支选择", - "loop": "循环", - "loopDescription": "重复执行", - "iterator": "迭代器", - "iteratorDescription": "遍历数组元素", - "parallel": "并行处理", - "parallelDescription": "并行执行多个分支", - "wait": "等待", - "waitDescription": "等待指定时间", - "delay": "延迟", - "delayDescription": "等待指定时间", - "merge": "合并", - "mergeDescription": "合并多个分支", - "variableAggregator": "变量聚合器", - "variableAggregatorDescription": "聚合多个分支的变量输出", - "action": "动作", - "actionDescription": "执行动作的节点", - "sendMessage": "发送消息", - "sendMessageDescription": "发送消息到平台", - "replyMessage": "回复消息", - "replyMessageDescription": "回复触发工作流的消息", - "storeData": "存储数据", - "storeDataDescription": "存储数据到数据库", - "callPipeline": "调用 Pipeline", - "callPipelineDescription": "调用现有的 Pipeline", - "setVariable": "设置变量", - "setVariableDescription": "设置上下文变量", - "openingStatement": "对话开场白", - "openingStatementDescription": "提供对话开场白和建议问题", - "end": "结束", - "endDescription": "标记工作流执行结束", - "log": "日志", - "logDescription": "记录日志信息", - "integration": "集成", - "integrationDescription": "第三方平台集成节点", - "difyWorkflow": "Dify 工作流", - "difyWorkflowDescription": "调用 Dify 平台工作流", - "difyKnowledgeQuery": "Dify 知识库", - "difyKnowledgeQueryDescription": "查询 Dify 知识库", - "n8nWorkflow": "n8n 工作流", - "n8nWorkflowDescription": "调用 n8n 工作流", - "langflowFlow": "Langflow 流程", - "langflowFlowDescription": "调用 Langflow 流程", - "cozeBot": "Coze Bot", - "cozeBotDescription": "调用扣子 Bot", - "databaseQuery": "数据库查询", - "databaseQueryDescription": "执行数据库查询", - "redisOperation": "Redis 操作", - "redisOperationDescription": "执行 Redis 缓存操作", - "mcpTool": "MCP 工具", - "mcpToolDescription": "调用 MCP 工具", - "memoryStore": "记忆存储", - "memoryStoreDescription": "从工作流记忆中存储和检索数据", - "startTime": "开始时间", - "running": "执行中", - "failed": "失败", - "cancelled": "已取消", - "viewDetails": "查看详情", - "cancel": "取消执行", - "retry": "重试", - "nodeResults": "节点执行结果", - "current": "当前版本", - "rollback": "回滚到此版本", - "rollbackConfirm": "确定回滚到此版本?当前更改将丢失。", - "rollbackSuccess": "回滚成功", - "rollbackError": "回滚失败:", - "mode": "调试模式", - "panel": "调试面板", - "start": "开始调试", - "pause": "暂停", - "resume": "继续", - "step": "单步执行", - "stop": "停止", - "messageContentPlaceholder": "输入要模拟的消息内容", - "senderId": "发送者 ID", - "senderIdPlaceholder": "发送者唯一标识", - "senderName": "发送者名称", - "senderNamePlaceholder": "发送者显示名称", - "platformPlaceholder": "例如 qq、wechat、telegram", - "conversationId": "会话 ID", - "conversationIdPlaceholder": "会话唯一标识", - "isGroup": "群聊", - "customVariables": "自定义变量", - "customVariablesDesc": "添加自定义变量用于调试", - "variableKey": "变量名", - "variableValue": "变量值", - "addVariable": "添加变量", - "watchedVariables": "监控变量", - "noWatchedVariables": "暂无监控变量", - "addWatchVariable": "添加监控", - "nodeStates": "节点状态", - "nodeOutputs": "节点输出", - "noNodeOutputs": "暂无节点输出", - "toggleBreakpoint": "切换断点", - "clearBreakpoints": "清除所有断点", - "breakpointSet": "断点已设置", - "breakpointRemoved": "断点已移除", - "noLogs": "暂无日志", - "clearLogs": "清空日志", - "autoScroll": "自动滚动", - "logEntries": "条日志", - "resetContext": "重置上下文", - "starting": "正在启动调试执行...", - "started": "调试执行已启动 (ID: {{id}})", - "startError": "启动调试失败", - "unknownError": "未知错误", - "paused": "已暂停", - "pauseError": "暂停失败", - "resumed": "执行已恢复", - "resumeError": "恢复失败", - "steppedTo": "已执行到节点: {{node}}", - "stepError": "单步执行失败", - "stopped": "调试已停止", - "stopError": "停止失败", - "debugMode": "调试模式", - "debugPanel": "调试面板", - "startDebug": "开始调试", - "pauseDebug": "暂停", - "resumeDebug": "继续", - "stepDebug": "单步执行", - "stopDebug": "停止", - "debugContext": "调试上下文", - "simulatedMessage": "模拟消息", - "simulatedMessagePlaceholder": "输入要模拟的消息内容", - "variableName": "变量名", - "breakpoints": "断点", - "debugLogs": "调试日志", - "idle": "空闲", - "pending": "等待中", - "skipped": "已跳过", - "selectWorkflow": "选择工作流", - "sessionType": "会话类型", - "privateChat": "私聊", - "groupChat": "群聊", - "send": "发送", - "reset": "重置对话", - "inputPlaceholder": "发送 {{type}} 消息...", - "noMessages": "暂无消息", - "userMessage": "用户", - "botMessage": "机器人", - "sendFailed": "发送失败", - "resetSuccess": "对话已重置", - "resetFailed": "重置失败", - "loadMessagesFailed": "加载消息失败", - "loadWorkflowsFailed": "加载工作流失败", - "atTips": "提及机器人", - "streaming": "流式传输", - "streamOutput": "流式", - "connected": "WebSocket已连接", - "disconnected": "WebSocket未连接", - "connectionError": "WebSocket连接错误", - "connectionFailed": "WebSocket连接失败", - "notConnected": "WebSocket未连接,请稍后重试", - "imageUploadFailed": "图片上传失败", - "reply": "回复", - "replyTo": "回复给", - "showMarkdown": "渲染", - "showRaw": "原文", - "allMembers": "全体成员", - "file": "文件", - "voice": "语音", - "uploadImage": "上传图片", - "uploading": "上传中...", - "filterByDate": "按日期筛选", - "allTime": "全部时间", - "today": "今天", - "lastWeek": "最近一周", - "lastMonth": "最近一个月", - "showingExecutions": "显示 {{shown}} / {{total}} 条记录", - "rerun": "重新运行", - "rerunExecution": "重新执行", - "details": "详情", - "completedAt": "完成时间", - "noNodeExecutions": "暂无节点执行记录", - "conditions": "触发条件", - "keyword_filter": "关键词过滤", - "regex_filter": "正则过滤", - "min_length": "最小长度", - "max_length": "最大长度", - "require_mention": "需要@机器人", - "respond_rules": "群响应规则", - "access_control": "访问控制", - "cron": "Cron表达式", - "timezone": "时区", - "path": "Webhook路径", - "allowed_methods": "允许的HTTP方法", - "content_type": "Content-Type", - "auth_type": "认证方式", - "auth_key": "认证密钥", - "validation": "请求验证", - "timeout": "超时时间", - "event_types": "事件类型", - "filter": "事件过滤", - "debounce_ms": "防抖时间", - "model": "模型", - "prompt_template": "提示词模板", - "system_prompt": "系统提示词", - "temperature": "温度", - "top_p": "Top P", - "frequency_penalty": "频率惩罚", - "presence_penalty": "存在惩罚", - "max_tokens": "最大Token数", - "stop_sequences": "停止序列", - "seed": "随机种子", - "stream": "流式输出", - "use_conversation_history": "使用对话历史", - "language": "编程语言", - "code": "代码", - "url": "请求URL", - "auth_config": "认证配置", - "transform_type": "转换类型", - "template": "模板", - "expression": "表达式", - "output_type": "输出类型", - "categories": "分类类别", - "instruction": "指令", - "knowledge_bases": "知识库", - "top_k": "返回数量", - "score_threshold": "相似度阈值", - "search_method": "搜索方法", - "enable_citations": "启用引用", - "condition_type": "条件类型", - "condition_expression": "条件表达式", - "left_value": "左值", - "operator": "比较运算符", - "right_value": "右值", - "cases": "分支条件", - "max_iterations": "最大迭代次数", - "break_condition": "中断条件", - "max_concurrency": "最大并发数", - "branches": "分支配置", - "wait_all": "等待所有", - "fail_fast": "快速失败", - "duration_type": "时间单位", - "merge_strategy": "合并策略", - "variable_mappings": "变量映射", - "aggregation_mode": "聚合模式", - "target_type": "目标类型", - "target_id": "目标ID", - "message_type": "消息类型", - "reply_mode": "回复模式", - "message_template": "消息模板", - "long_text_processing": "长文本处理", - "force_delay": "强制延迟", - "pipeline_uuid": "流水线", - "inherit_context": "继承上下文", - "storage_type": "存储类型", - "ttl": "过期时间", - "key_prefix": "键前缀", - "variable_name": "变量名称", - "variable_scope": "变量作用域", - "set_variable_operation": "操作类型", - "show_suggestions": "显示建议", - "output_format": "输出格式", - "success_message": "成功消息", - "connection_type": "数据库类型", - "connection_string": "连接字符串", - "query_type": "查询类型", - "connection_url": "连接URL", - "operation": "操作类型", - "dataset_id": "知识库ID", - "escape_html": "转义HTML", - "trim_whitespace": "去除空白", - "json_transform_type": "JSON转换类型", - "json_expression": "JSON表达式", - "mapping": "字段映射", - "code_language": "编程语言", - "code_content": "代码内容", - "aggregation_type": "聚合类型", - "separator": "分隔符", - "field_path": "字段路径", - "split_type": "分割类型", - "chunk_size": "块大小", - "chunk_overlap": "块重叠", - "regex_pattern": "正则表达式", - "remove_empty": "移除空块", - "assign_variable_name": "变量名", - "value_type": "值类型", - "static_value": "静态值", - "n8n_webhook_url": "Webhook URL", - "n8n_auth_type": "认证方式", - "langflow_flow_id": "流程ID", - "coze_bot_id": "机器人ID", - "coze_api_base": "API基础URL" -} \ No newline at end of file diff --git a/web/workflows_section.txt b/web/workflows_section.txt deleted file mode 100644 index c0a2fc03..00000000 --- a/web/workflows_section.txt +++ /dev/null @@ -1,831 +0,0 @@ - workflows: { - title: '工作流', - description: '创建和管理可视化工作流,实现复杂的消息处理逻辑', - createWorkflow: '创建工作流', - selectFromSidebar: '从侧边栏选择一个工作流', - editWorkflow: '编辑工作流', - newWorkflow: '新工作流', - getWorkflowListError: '获取工作流列表失败:', - workflowName: '工作流名称', - workflowDescription: '工作流描述', - workflowNameRequired: '工作流名称不能为空', - defaultDescription: '一个工作流', - getWorkflowError: '获取工作流失败:', - loadError: '加载工作流失败', - saveSuccess: '保存成功', - saveError: '保存失败:', - createSuccess: '工作流创建成功', - createError: '创建失败:', - deleteSuccess: '删除成功', - deleteError: '删除失败:', - deleteConfirmation: '你确定要删除这个工作流吗?', - copySuccess: '复制成功', - copyError: '复制失败:', - export: '导出', - import: '导入', - exportSuccess: '工作流已导出', - importSuccess: '工作流已导入', - importError: '导入失败:文件格式无效', - publish: '发布', - publishSuccess: '发布成功', - publishError: '发布失败', - configuration: '配置', - executions: '执行记录', - editor: '编辑器', - debugChat: '对话调试', - basicInfo: '基础信息', - basicInfoDesc: '设置工作流名称、图标和描述', - basicInfoDescription: '设置工作流名称和描述', - dangerZone: '危险区域', - dangerZoneDesc: '不可逆的操作', - dangerZoneDescription: '不可逆的操作', - deleteWorkflowAction: '删除此工作流', - deleteWorkflowHint: '删除后,所有关联配置将被永久移除,且无法恢复。', - deleteWorkflow: '删除工作流', - deleteConfirm: '确认删除', - deleteConfirmDesc: '您确定要删除工作流 "{{name}}" 吗?此操作无法撤销。', - // Form component - name: '名称', - namePlaceholder: '输入工作流名称', - descriptionPlaceholder: '输入工作流描述(可选)', - enabled: '启用', - enabledDesc: '启用后,工作流将可以被触发执行', - loading: '加载中...', - info: '工作流信息', - uuid: 'UUID', - version: '版本', - createdAt: '创建时间', - updatedAt: '更新时间', - // Executions tab - totalExecutions: '共 {{count}} 条执行记录', - statistics: '统计分析', - successfulCount: '成功 {{count}} 次', - successRate: '成功率', - averageDuration: '平均耗时', - perExecution: '每次执行', - failedExecutions: '失败次数', - lastExecution: '最后执行', - filterByStatus: '按状态筛选', - allStatuses: '全部状态', - manualTrigger: '手动触发', - executionId: '执行 ID', - status: '状态', - triggerType: '触发类型', - startedAt: '开始时间', - duration: '耗时', - noExecutions: '暂无执行记录', - executionDetails: '执行详情', - error: '错误信息', - nodeExecutions: '节点执行记录', - result: '执行结果', - 'status.pending': '等待中', - 'status.waiting': '等待中', - 'status.running': '执行中', - 'status.completed': '已完成', - 'status.failed': '失败', - 'status.cancelled': '已取消', - // Editor component translations - nodePalette: '节点面板', - properties: '属性', - zoomIn: '放大', - zoomOut: '缩小', - fitView: '适应视图', - unsavedChanges: '有未保存的更改', - paste: '粘贴', - deleted: '已删除', - nothingToCopy: '没有选中的节点可复制', - nothingToPaste: '剪贴板为空', - copied: '已复制 {{count}} 个节点', - pasted: '已粘贴 {{count}} 个节点', - nodesSelected: '已选中 {{count}} 个节点', - edgesSelected: '已选中 {{count}} 条连线', - // Node palette - searchNodes: '搜索节点...', - loadingNodeTypes: '正在加载节点类型...', - noNodesFound: '未找到匹配的节点', - clearSearch: '清除搜索', - dragToAdd: '拖拽节点到画布添加', - // Property panel - selectNodeOrEdge: '选择一个节点或连线', - selectNodeOrEdgeHint: '点击画布中的节点或连线来查看和编辑其属性', - edgeProperties: '连线属性', - nodeProperties: '节点属性', - condition: '条件', - hasCondition: '已设置', - conditionPlaceholder: '输入条件表达式,如: output.success == true', - conditionHelp: - '条件为空时,该连线将始终被执行。支持使用 {{变量名}} 引用上下文变量。', - deleteEdge: '删除连线', - deleteEdgeConfirm: '确认删除连线', - deleteEdgeConfirmDesc: '删除后,该连线将被永久移除。', - nodeLabel: '节点名称', - nodeLabelPlaceholder: '输入节点显示名称', - nodeId: '节点 ID', - inputOutputVariables: '输入/输出变量', - inputs: '输入', - outputs: '输出', - availableVariables: '可用变量', - globalVariables: '全局变量', - messageContent: '消息内容', - messageSender: '发送者', - platform: '平台', - sessionId: '会话 ID', - timestamp: '时间戳', - nodeConfig: '节点配置', - noConfigOptions: '该节点类型暂无配置选项', - deleteNode: '删除节点', - deleteNodeConfirm: '确认删除节点', - deleteNodeConfirmDesc: '删除后,该节点及其所有连线将被永久移除。', - // Node inputs/outputs i18n (for port labels) - nodeInputs: { - // Common inputs - input: '输入', - message: '消息内容', - text: '文本', - query: '查询', - data: '数据', - condition: '条件', - value: '值', - // Trigger inputs - content: '内容', - context: '上下文', - body: '请求体', - variables: '变量', - items: '项目列表', - arguments: '参数', - // AI/Process inputs - question: '问题', - parameters: '参数定义', - key: '键', - payload: '载荷', - input_value: '输入值', - conversation_id: '会话 ID', - // Control inputs - case_1: '分支1输入', - case_2: '分支2输入', - branch_1: '分支1', - branch_2: '分支2', - // Action inputs - notification_id: '通知ID', - // Integration inputs - key_template: '键模板', - hash_field: '哈希字段', - server_name: '服务器名称', - tool_name: '工具名称', - arguments_template: '参数模板', - scope: '作用域', - }, - nodeOutputs: { - // Common outputs - output: '输出', - result: '结果', - response: '响应', - message: '消息', - data: '数据', - error: '错误', - // Trigger outputs - sender: '发送者', - sender_id: '发送者 ID', - sender_name: '发送者名称', - conversation_id: '会话 ID', - context: '上下文', - cron_timestamp: 'Cron 时间戳', - cron_schedule: 'Cron 调度表达式', - cron_context: 'Cron 上下文', - trigger_time: '触发时间', - schedule: '触发计划', - headers: '请求头', - query_params: '查询参数', - query: '查询参数', - method: '请求方法', - body: '请求体', - is_group: '是否群聊', - platform: '平台', - event: '事件', - event_type: '事件类型', - event_data: '事件数据', - event_timestamp: '事件时间戳', - // AI/Process outputs - usage: 'Token使用统计', - parsed: '解析结果', - category: '分类结果', - confidence: '置信度', - all_scores: '所有分数', - missing: '缺失参数', - success: '是否成功', - scores: '分数', - chunks: '文本块', - count: '数量', - logs: '日志', - embedding: '向量', - dimensions: '维度', - intent: '意图', - entities: '实体', - prompt: '提示/问题', - context_info: '上下文信息', - console: '控制台输出', - code_input: '代码输入', - code_output: '代码输出', - http_body: 'HTTP 请求体', - http_headers: 'HTTP 请求头', - http_response: 'HTTP 响应', - response_headers: '响应头', - transform_input: '转换输入', - transform_result: '转换结果', - question: '用户问题', - parameters: '提取的参数', - extraction_success: '提取成功', - extract_text: '输入文本', - documents: '检索的文档', - citations: '引用信息', - knowledge_context: '合并上下文', - knowledge_query: '检索查询', - text: '文本', - // Control outputs - true: '条件为真输出', - false: '条件为假输出', - matched_case: '匹配分支', - case_1: '分支 1', - case_2: '分支 2', - default: '默认分支', - item: '当前项', - index: '当前索引', - completed: '是否完成', - is_first: '是否第一个', - is_last: '是否最后一个', - results: '结果', - branch_1: '分支1输出', - branch_2: '分支2输出', - condition_input: '条件输入', - switch_input: '开关输入', - loop_items: '迭代项目', - iterator_array: '输入数组', - iterator_item: '当前元素', - iterator_index: '当前索引', - errors: '错误列表', - parallel_input: '并行输入', - parallel_results: '所有分支结果', - wait_input: '透传输入', - wait_output: '透传输出', - merged: '合并结果', - merge_array: '数组结果', - merge_input_1: '输入 1', - merge_input_2: '输入 2', - merge_input_3: '输入 3', - merge_input_4: '输入 4', - aggregated: '聚合变量', - aggregator_variables: '变量输入', - // Action outputs - message_id: '消息ID', - status_code: '状态码', - status: '状态', - execution_id: '执行ID', - notification_id: '通知ID', - target: '目标 ID', - reply_message: '回复内容', - pipeline_response: 'Pipeline 响应', - pipeline_result: '完整结果', - pipeline_query: '查询内容', - context_data: '上下文数据', - store_status: '存储状态', - store_key: '存储键', - store_value: '存储值', - variable_value: '变量值', - variable_result: '设置变量结果', - statement: '开场白', - suggested_questions: '建议问题', - suggestions: '建议问题', - workflow_output: '工作流输出', - final_result: '最终结果', - // Integration outputs - query_results: '查询结果', - row_count: '行数', - query_success: '查询成功', - redis_result: 'Redis结果', - redis_success: 'Redis成功', - redis_key: 'Redis 键', - redis_value: 'Redis 值', - plugin_input: '插件输入', - tool_result: '工具结果', - tool_success: '工具成功', - mcp_arguments: '工具参数', - memory_result: '记忆结果', - memory_success: '记忆成功', - memory_value: '存储值', - answer: '答案', - dify_success: 'Dify成功', - dify_query: '用户输入/查询', - dify_conversation_id: '会话 ID', - search_results: '搜索结果', - knowledge_base_query: '查询内容', - n8n_result: 'N8n结果', - n8n_success: 'N8n成功', - n8n_payload: '工作流输入数据', - flow_result: '流程结果', - flow_success: '流程成功', - langflow_input: '输入内容', - bot_answer: '机器人回复', - bot_success: '机器人成功', - coze_query: '用户输入/查询', - coze_conversation_id: '会话 ID', - bot_conversation_id: '会话 ID', - webhook_body: 'Webhook 请求体', - webhook_headers: 'Webhook 请求头', - webhook_query: 'Webhook 查询参数', - webhook_method: 'Webhook 请求方法', - timestamp: '时间戳', - }, - // Data type labels - 'type.string': '字符串', - 'type.object': '对象', - 'type.array': '数组', - 'type.boolean': '布尔值', - 'type.number': '数字', - 'type.any': '任意类型', - 'type.datetime': '日期时间', - // Legacy editor keys for compatibility - legacyEditor: { - title: '可视化编辑器', - save: '保存', - undo: '撤销', - redo: '重做', - zoomIn: '放大', - zoomOut: '缩小', - fitView: '适应视图', - unsavedChanges: '有未保存的更改', - nodePalette: '节点面板', - properties: '属性', - nodeLabel: '节点名称', - nodeConfig: '节点配置', - deleteNode: '删除节点', - deleteNodeConfirm: '确定删除此节点?', - deleteEdge: '删除连线', - deleteEdgeConfirm: '确定删除此连线?', - edgeCondition: '条件表达式', - edgeConditionPlaceholder: '如: ${output.success} == true', - noNodeSelected: '未选中节点', - selectNodeToEdit: '点击节点查看和编辑属性', - dragNodeHint: '拖拽节点到画布', - }, - nodes: { - trigger: '触发器', - triggerDescription: '工作流的起始节点', - messageTrigger: '消息触发', - messageTriggerDescription: '当收到消息时触发', - scheduleTrigger: '定时触发', - scheduleTriggerDescription: '按计划定时触发', - cronTrigger: '定时触发', - cronTriggerDescription: '按定时计划触发工作流', - webhookTrigger: 'Webhook 触发', - webhookTriggerDescription: '通过 HTTP 请求触发', - eventTrigger: '事件触发', - eventTriggerDescription: '当系统事件发生时触发', - process: 'AI/处理', - processDescription: '数据处理节点', - aiProcess: 'AI 处理', - aiProcessDescription: '使用 AI 模型处理消息', - llmCall: 'LLM 调用', - llmCallDescription: '调用大语言模型进行对话或生成', - codeProcess: '代码处理', - codeProcessDescription: '执行自定义代码', - codeExecutor: '代码执行', - codeExecutorDescription: '执行 Python/JavaScript 代码', - templateProcess: '模板处理', - templateProcessDescription: '使用模板格式化输出', - httpRequest: 'HTTP 请求', - httpRequestDescription: '发送 HTTP 请求', - dataTransform: '数据转换', - dataTransformDescription: '转换数据格式', - questionClassifier: '问题分类器', - questionClassifierDescription: '使用 LLM 将用户问题分类到预定义类别', - parameterExtractor: '参数提取器', - parameterExtractorDescription: '使用 LLM 从文本中提取结构化参数', - knowledgeRetrieval: '知识库检索', - knowledgeRetrievalDescription: '从知识库中检索相关内容', - textTemplate: '文本模板', - textTemplateDescription: '使用模板生成文本', - jsonTransform: 'JSON 转换', - jsonTransformDescription: '转换 JSON 数据', - dataAggregator: '数据聚合', - dataAggregatorDescription: '聚合多个数据源', - textSplitter: '文本分割', - textSplitterDescription: '将文本分割成块', - variableAssignment: '变量赋值', - variableAssignmentDescription: '为工作流变量赋值', - control: '控制流', - controlDescription: '流程控制节点', - condition: '条件分支', - conditionDescription: '根据条件分流', - switch: '多路分支', - switchDescription: '多条件分支选择', - loop: '循环', - loopDescription: '重复执行', - iterator: '迭代器', - iteratorDescription: '遍历数组元素', - parallel: '并行执行', - parallelDescription: '并行执行多个分支', - wait: '等待', - waitDescription: '等待指定时间', - delay: '延迟', - delayDescription: '等待指定时间', - merge: '合并', - mergeDescription: '合并多个分支', - variableAggregator: '变量聚合器', - variableAggregatorDescription: '聚合多个分支的变量输出', - action: '动作', - actionDescription: '执行动作的节点', - sendMessage: '发送消息', - sendMessageDescription: '发送消息到平台', - replyMessage: '回复消息', - replyMessageDescription: '回复触发工作流的消息', - storeData: '存储数据', - storeDataDescription: '存储数据到数据库', - callPipeline: '调用 Pipeline', - callPipelineDescription: '调用现有的 Pipeline', - setVariable: '设置变量', - setVariableDescription: '设置上下文变量', - openingStatement: '对话开场白', - openingStatementDescription: '提供对话开场白和建议问题', - end: '结束', - endDescription: '标记工作流执行结束', - log: '日志', - logDescription: '记录日志信息', - integration: '集成', - integrationDescription: '第三方平台集成节点', - difyWorkflow: 'Dify 工作流', - difyWorkflowDescription: '调用 Dify 平台工作流', - difyKnowledgeQuery: 'Dify 知识库', - difyKnowledgeQueryDescription: '查询 Dify 知识库', - n8nWorkflow: 'n8n 工作流', - n8nWorkflowDescription: '调用 n8n 工作流', - langflowFlow: 'Langflow 流程', - langflowFlowDescription: '调用 Langflow 流程', - cozeBot: 'Coze Bot', - cozeBotDescription: '调用扣子 Bot', - // Data & Tools integration nodes - databaseQuery: '数据库查询', - databaseQueryDescription: '执行数据库查询', - redisOperation: 'Redis 操作', - redisOperationDescription: '执行 Redis 缓存操作', - mcpTool: 'MCP 工具', - mcpToolDescription: '调用 MCP 工具', - memoryStore: '记忆存储', - memoryStoreDescription: '从工作流记忆中存储和检索数据', - }, - executionHistory: { - title: '执行记录', - noExecutions: '暂无执行记录', - status: '状态', - startTime: '开始时间', - duration: '耗时', - running: '运行中', - completed: '已完成', - failed: '失败', - cancelled: '已取消', - viewDetails: '查看详情', - cancel: '取消执行', - retry: '重试', - nodeResults: '节点执行结果', - }, - versions: { - title: '版本历史', - current: '当前版本', - rollback: '回滚到此版本', - rollbackConfirm: '确定回滚到此版本?当前更改将丢失。', - rollbackSuccess: '回滚成功', - rollbackError: '回滚失败:', - }, - // Debug and monitoring - debug: { - title: '调试', - mode: '调试模式', - panel: '调试面板', - start: '开始调试', - pause: '暂停', - resume: '继续', - step: '单步执行', - stop: '停止', - context: '调试上下文', - messageContent: '模拟消息', - messageContentPlaceholder: '输入要模拟的消息内容', - senderId: '发送者 ID', - senderIdPlaceholder: '发送者唯一标识', - senderName: '发送者名称', - senderNamePlaceholder: '发送者显示名称', - platform: '平台', - platformPlaceholder: '例如 qq、wechat、telegram', - conversationId: '会话 ID', - conversationIdPlaceholder: '会话唯一标识', - isGroup: '群聊', - customVariables: '自定义变量', - customVariablesDesc: '添加自定义变量用于调试', - variableKey: '变量名', - variableValue: '变量值', - addVariable: '添加变量', - variables: '监控变量', - watchedVariables: '监控变量', - noWatchedVariables: '暂无监控变量', - addWatchVariable: '添加监控', - nodeStates: '节点状态', - nodeOutputs: '节点输出', - noNodeOutputs: '暂无节点输出', - toggleBreakpoint: '切换断点', - clearBreakpoints: '清除所有断点', - breakpointSet: '断点已设置', - breakpointRemoved: '断点已移除', - logs: '调试日志', - noLogs: '暂无日志', - clearLogs: '清空日志', - autoScroll: '自动滚动', - logEntries: '条日志', - resetContext: '重置上下文', - // Debug execution messages - starting: '正在启动调试执行...', - started: '调试执行已启动 (ID: {{id}})', - startError: '启动调试失败', - completed: '调试执行已完成', - unknownError: '未知错误', - paused: '执行已暂停', - pauseError: '暂停失败', - resumed: '执行已恢复', - resumeError: '恢复失败', - steppedTo: '已执行到节点: {{node}}', - stepError: '单步执行失败', - stopped: '调试已停止', - stopError: '停止失败', - }, - debugMode: '调试模式', - debugPanel: '调试面板', - startDebug: '开始调试', - pauseDebug: '暂停', - resumeDebug: '继续', - stepDebug: '单步执行', - stopDebug: '停止', - debugContext: '调试上下文', - simulatedMessage: '模拟消息', - simulatedMessagePlaceholder: '输入要模拟的消息内容', - senderId: '发送者 ID', - senderIdPlaceholder: '发送者唯一标识', - senderName: '发送者名称', - senderNamePlaceholder: '发送者显示名称', - conversationId: '会话 ID', - conversationIdPlaceholder: '会话唯一标识', - isGroup: '群聊', - customVariables: '自定义变量', - addVariable: '添加变量', - variableName: '变量名', - variableValue: '变量值', - watchedVariables: '监控变量', - addWatchVariable: '添加监控', - nodeStates: '节点状态', - breakpoints: '断点', - toggleBreakpoint: '切换断点', - breakpointSet: '断点已设置', - breakpointRemoved: '断点已移除', - debugLogs: '调试日志', - noLogs: '暂无日志', - clearLogs: '清空日志', - autoScroll: '自动滚动', - debugState: { - idle: '空闲', - running: '运行中', - paused: '已暂停', - completed: '已完成', - error: '错误', - }, - nodeStatus: { - pending: '等待中', - running: '执行中', - completed: '已完成', - failed: '失败', - skipped: '已跳过', - }, - debugDialog: { - title: '工作流对话', - selectWorkflow: '选择工作流', - sessionType: '会话类型', - privateChat: '私聊', - groupChat: '群聊', - send: '发送', - reset: '重置对话', - inputPlaceholder: '发送 {{type}} 消息...', - noMessages: '暂无消息', - userMessage: '用户', - botMessage: '机器人', - sendFailed: '发送失败', - resetSuccess: '对话已重置', - resetFailed: '重置失败', - loadMessagesFailed: '加载消息失败', - loadWorkflowsFailed: '加载工作流失败', - atTips: '提及机器人', - streaming: '流式传输', - streamOutput: '流式', - connected: 'WebSocket已连接', - disconnected: 'WebSocket未连接', - connectionError: 'WebSocket连接错误', - connectionFailed: 'WebSocket连接失败', - notConnected: 'WebSocket未连接,请稍后重试', - imageUploadFailed: '图片上传失败', - reply: '回复', - replyTo: '回复给', - showMarkdown: '渲染', - showRaw: '原文', - allMembers: '全体成员', - file: '文件', - voice: '语音', - uploadImage: '上传图片', - uploading: '上传中...', - }, - // Execution history and monitoring - filterByDate: '按日期筛选', - allTime: '全部时间', - today: '今天', - lastWeek: '最近一周', - lastMonth: '最近一个月', - showingExecutions: '显示 {{shown}} / {{total}} 条记录', - rerun: '重新运行', - rerunExecution: '重新执行', - logs: '日志', - details: '详情', - completedAt: '完成时间', - noNodeExecutions: '暂无节点执行记录', - // Node config field labels (used by DynamicFormComponent) - nodeConfigFields: { - // trigger.py - MessageTriggerNode - conditions: '触发条件', - keyword_filter: '关键词过滤', - regex_filter: '正则过滤', - min_length: '最小长度', - max_length: '最大长度', - require_mention: '需要@机器人', - respond_rules: '群响应规则', - access_control: '访问控制', - // trigger.py - CronTriggerNode - cron: 'Cron表达式', - timezone: '时区', - description: '描述', - // trigger.py - WebhookTriggerNode - path: 'Webhook路径', - allowed_methods: '允许的HTTP方法', - content_type: 'Content-Type', - auth_type: '认证方式', - auth_key: '认证密钥', - validation: '请求验证', - timeout: '超时时间', - // trigger.py - EventTriggerNode - event_types: '事件类型', - filter: '事件过滤', - debounce_ms: '防抖时间', - // process.py - LLMCallNode - model: '模型', - prompt_template: '提示词模板', - system_prompt: '系统提示词', - temperature: '温度', - top_p: 'Top P', - frequency_penalty: '频率惩罚', - presence_penalty: '存在惩罚', - max_tokens: '最大Token数', - stop_sequences: '停止序列', - seed: '随机种子', - stream: '流式输出', - use_conversation_history: '使用对话历史', - // process.py - CodeExecutorNode - language: '编程语言', - code: '代码', - // process.py - HTTPRequestNode - url: '请求URL', - method: '请求方法', - auth_config: '认证配置', - // process.py - DataTransformNode - transform_type: '转换类型', - template: '模板', - expression: '表达式', - output_type: '输出类型', - // process.py - QuestionClassifierNode - categories: '分类类别', - instruction: '指令', - // process.py - ParameterExtractorNode - parameters: '参数定义', - // process.py - KnowledgeRetrievalNode - knowledge_bases: '知识库', - top_k: '返回数量', - score_threshold: '相似度阈值', - search_method: '搜索方法', - enable_citations: '启用引用', - // control.py - ConditionNode - condition_type: '条件类型', - condition_expression: '条件表达式', - left_value: '左值', - operator: '比较运算符', - right_value: '右值', - // control.py - SwitchNode - cases: '分支条件', - // control.py - LoopNode - max_iterations: '最大迭代次数', - break_condition: '中断条件', - // control.py - IteratorNode - parallel: '并行处理', - max_concurrency: '最大并发数', - // control.py - ParallelNode - branches: '分支配置', - wait_all: '等待所有', - fail_fast: '快速失败', - // control.py - WaitNode - duration: '等待时间', - duration_type: '时间单位', - // control.py - MergeNode - merge_strategy: '合并策略', - // control.py - VariableAggregatorNode - variable_mappings: '变量映射', - aggregation_mode: '聚合模式', - // action.py - SendMessageNode - target_type: '目标类型', - target_id: '目标ID', - platform: '平台', - message_type: '消息类型', - // action.py - ReplyMessageNode - reply_mode: '回复模式', - message_template: '消息模板', - long_text_processing: '长文本处理', - force_delay: '强制延迟', - // action.py - CallPipelineNode - pipeline_uuid: '流水线', - inherit_context: '继承上下文', - // action.py - StoreDataNode - storage_type: '存储类型', - ttl: '过期时间', - key_prefix: '键前缀', - // action.py - SetVariableNode - variable_name: '变量名称', - variable_scope: '变量作用域', - set_variable_operation: '操作类型', - // action.py - OpeningStatementNode - statement: '开场白', - suggested_questions: '建议问题', - show_suggestions: '显示建议', - // action.py - EndNode - output_format: '输出格式', - success_message: '成功消息', - // integration.py - DatabaseQueryNode - connection_type: '数据库类型', - connection_string: '连接字符串', - query: 'SQL查询', - query_type: '查询类型', - // integration.py - RedisOperationNode - connection_url: '连接URL', - operation: '操作类型', - key_template: '键模板', - hash_field: '哈希字段', - // integration.py - MCPToolNode - server_name: '服务器名称', - tool_name: '工具名称', - arguments_template: '参数模板', - // integration.py - MemoryStoreNode - scope: '作用域', - // integration.py - DifyWorkflowNode - 'base-url': '基础URL', - 'api-key': 'API密钥', - 'app-type': '应用类型', - // integration.py - DifyKnowledgeQueryNode - dataset_id: '知识库ID', - // integration.py - N8nWorkflowNode - 'webhook-url': 'Webhook URL', - // integration.py - LangflowFlowNode - 'flow-id': '流程ID', - // integration.py - CozeBotNode - 'bot-id': '机器人ID', - 'api-base': 'API基础URL', - // process-configs.ts - TextTemplateNode - escape_html: '转义HTML', - trim_whitespace: '去除空白', - // process-configs.ts - JsonTransformNode - json_transform_type: 'JSON转换类型', - json_expression: 'JSON表达式', - mapping: '字段映射', - // process-configs.ts - CodeExecutorNode - code_language: '编程语言', - code_content: '代码内容', - // process-configs.ts - DataAggregatorNode - aggregation_type: '聚合类型', - separator: '分隔符', - field_path: '字段路径', - // process-configs.ts - TextSplitterNode - split_type: '分割类型', - chunk_size: '块大小', - chunk_overlap: '块重叠', - regex_pattern: '正则表达式', - remove_empty: '移除空块', - // process-configs.ts - VariableAssignmentNode - assign_variable_name: '变量名', - value_type: '值类型', - static_value: '静态值', - // integration-configs.ts - N8nWorkflowNode - n8n_webhook_url: 'Webhook URL', - n8n_auth_type: '认证方式', - // integration-configs.ts - LangflowFlowNode - langflow_flow_id: '流程ID', - // integration-configs.ts - CozeBotNode - coze_bot_id: '机器人ID', - coze_api_base: 'API基础URL', - }, - }, diff --git a/web/workflows_translation_guide.md b/web/workflows_translation_guide.md deleted file mode 100644 index 93c2df72..00000000 --- a/web/workflows_translation_guide.md +++ /dev/null @@ -1,265 +0,0 @@ -# Workflows翻译工作流程指南 - -## 📋 概述 - -本指南说明如何使用提供的工具完成workflows部分的多语言翻译工作。 - -## 🎯 翻译目标 - -- **总键数**: 627个workflows相关的键 -- **目标语言**: 6种语言(日语、繁体中文、西班牙语、俄语、泰语、越南语) -- **总翻译项**: 3762个(627键 × 6语言) - -## 🛠️ 工具说明 - -### 1. `workflows_translations.json` - 翻译模板文件 - -这是核心翻译文件,包含所有需要翻译的键和值。 - -**文件结构**: -```json -{ - "_comment": "Workflows翻译模板", - "_instructions": [...], - "_progress": { - "total_keys": 627, - "translated_keys": 0, - "remaining_keys": 627, - "languages": ["ja-JP", "zh-Hant", "es-ES", "ru-RU", "th-TH", "vi-VN"] - }, - "translations": { - "title": { - "zh-Hans": "工作流对话", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - ... - } -} -``` - -### 2. `apply_workflows_translations.py` - 应用翻译脚本 - -将完成的翻译应用到实际的语言文件中。 - -**功能**: -- 读取 `workflows_translations.json` -- 识别已完成的翻译(非"TODO") -- 应用到对应的语言文件(ja-JP.ts, zh-Hant.ts等) -- 生成应用报告 -- 支持增量应用(可以分批翻译) - -**使用方法**: -```bash -cd LangBot_copy/web -python3 apply_workflows_translations.py -``` - -### 3. `check_translation_progress.py` - 进度检查脚本 - -查看当前翻译进度和统计信息。 - -**功能**: -- 显示每种语言的翻译进度 -- 显示进度条和百分比 -- 列出已完成和待完成的键 -- 建议下一批要翻译的键 -- 估算剩余工作量 - -**使用方法**: -```bash -cd LangBot_copy/web -python3 check_translation_progress.py -``` - -## 📝 翻译工作流程 - -### 步骤1: 检查当前进度 - -```bash -python3 check_translation_progress.py -``` - -这会显示: -- 每种语言的完成度 -- 剩余待翻译的键数量 -- 建议下一批翻译的键 - -### 步骤2: 编辑翻译文件 - -打开 `workflows_translations.json` 文件,找到要翻译的键,将 `"TODO"` 替换为实际翻译。 - -**示例**: - -翻译前: -```json -"title": { - "zh-Hans": "工作流对话", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" -} -``` - -翻译后: -```json -"title": { - "zh-Hans": "工作流对话", - "ja-JP": "ワークフロー会話", - "zh-Hant": "工作流對話", - "es-ES": "Conversación de Flujo de Trabajo", - "ru-RU": "Диалог Рабочего Процесса", - "th-TH": "การสนทนาเวิร์กโฟลว์", - "vi-VN": "Hội thoại Quy trình" -} -``` - -**翻译技巧**: -- 参考 `zh-Hans` 的中文原文理解含义 -- 保持专业术语的一致性 -- 注意特殊字符需要转义(如单引号 `'` 要写成 `\'`) -- 可以使用翻译工具辅助,但需要人工审核确保准确性 - -### 步骤3: 应用翻译 - -完成一批翻译后,运行应用脚本: - -```bash -python3 apply_workflows_translations.py -``` - -脚本会: -- 自动识别已完成的翻译 -- 应用到对应的语言文件 -- 显示应用结果和统计信息 -- 更新进度信息 - -### 步骤4: 重复步骤1-3 - -继续翻译下一批键,直到所有翻译完成。 - -## 💡 建议的翻译策略 - -### 方案A: 按主题分批(推荐) - -将相关的键分组翻译,例如: -1. **第1批**: 基础UI文本(title, description, placeholder等) -2. **第2批**: 节点相关(nodes, nodeTypes, nodeCategories等) -3. **第3批**: 调试相关(debug, debugDialog, executionHistory等) -4. **第4批**: 配置相关(nodeConfigFields, validation等) -5. **第5批**: 其他剩余键 - -**优点**: 上下文相关,翻译更一致 - -### 方案B: 按数量分批 - -每批翻译固定数量的键(如50或100个)。 - -**优点**: 进度可控,容易估算时间 - -### 方案C: 按语言分批 - -先完成一种语言的所有翻译,再翻译下一种语言。 - -**优点**: 可以利用语言专长,集中精力 - -## 📊 进度跟踪 - -使用 `check_translation_progress.py` 随时查看进度: - -```bash -python3 check_translation_progress.py -``` - -输出示例: -``` -================================================================================ -📊 Workflows翻译进度报告 -================================================================================ - -【日语 (ja-JP)】 - [████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░] 20.0% - ✅ 已完成: 125/627 - ⏳ 待翻译: 502 - 📝 最近完成: title, description, placeholder, ... - -【繁体中文 (zh-Hant)】 - [████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░] 20.0% - ✅ 已完成: 125/627 - ⏳ 待翻译: 502 - -... - --------------------------------------------------------------------------------- -📈 总体进度: 750/3762 (19.9%) -📊 平均每种语言: 125/627 - -💡 剩余工作量: 3012 个翻译项 - 建议分批策略: - - 每批50个键: 需要 61 批 - - 每批100个键: 需要 31 批 -================================================================================ -``` - -## ⚠️ 注意事项 - -1. **备份**: 在开始翻译前,建议备份原始文件 -2. **编码**: 确保使用UTF-8编码保存文件 -3. **格式**: 保持JSON格式正确,注意逗号和引号 -4. **特殊字符**: 单引号需要转义为 `\'` -5. **验证**: 每次应用翻译后,检查语言文件是否有语法错误 -6. **增量工作**: 可以分多次完成,每次翻译一部分然后应用 - -## 🔍 故障排除 - -### 问题1: 应用翻译时提示"没有发现任何已完成的翻译" - -**原因**: 所有值都还是 "TODO" - -**解决**: 编辑 `workflows_translations.json`,将至少一个键的 "TODO" 替换为实际翻译 - -### 问题2: 应用翻译后语言文件报错 - -**原因**: 翻译中包含未转义的特殊字符 - -**解决**: 检查翻译文本,将单引号 `'` 替换为 `\'` - -### 问题3: 某些键应用失败 - -**原因**: 键名在语言文件中不存在或格式不匹配 - -**解决**: 检查应用报告中的失败键列表,手动在语言文件中添加或修正 - -## 📈 预估工作量 - -- **总翻译项**: 3762个 -- **每小时翻译速度**: 约50-100项(取决于熟练度) -- **预估总时间**: 38-75小时 -- **建议分批**: 每天翻译100-200项,约需19-38天完成 - -## ✅ 完成标准 - -当 `check_translation_progress.py` 显示: -- 所有语言的进度都达到 100% -- 没有剩余待翻译的键 -- 所有语言文件都能正常编译 - -则翻译工作完成! - -## 🎉 完成后 - -1. 运行最后一次 `apply_workflows_translations.py` 确保所有翻译已应用 -2. 测试各语言界面,确认翻译正确显示 -3. 提交代码变更 -4. 生成最终翻译报告 - ---- - -**祝翻译工作顺利!** 🚀 diff --git a/web/workflows_translations.json b/web/workflows_translations.json deleted file mode 100644 index 57c94c92..00000000 --- a/web/workflows_translations.json +++ /dev/null @@ -1,5676 +0,0 @@ -{ - "_comment": "Workflows翻译模板 - 共717个键需要翻译", - "_instructions": [ - "1. 这个文件包含所有717个需要翻译的键", - "2. 每个键下有6种语言需要翻译:ja-JP, zh-Hant, es-ES, ru-RU, th-TH, vi-VN", - "3. 您可以分批填写翻译,填写完成后运行 apply_workflows_translations.py 应用翻译", - "4. 已填写的翻译会被标记,未填写的会保持为 TODO", - "5. 建议每次翻译50-100个键,然后应用并测试" - ], - "_progress": { - "total_keys": 627, - "translated_keys": 204, - "remaining_keys": 423, - "languages": [ - "ja-JP", - "zh-Hant", - "es-ES", - "ru-RU", - "th-TH", - "vi-VN" - ], - "by_language": { - "ja-JP": 0, - "zh-Hant": 0, - "es-ES": 307, - "ru-RU": 307, - "th-TH": 307, - "vi-VN": 307 - } - }, - "translations": { - "title": { - "zh-Hans": "工作流对话", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Conversación de Flujo de Trabajo", - "ru-RU": "Диалог Рабочего Процесса", - "th-TH": "การสนทนาเวิร์กโฟลว์", - "vi-VN": "Hội thoại Quy trình" - }, - "description": { - "zh-Hans": "描述", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Descripción", - "ru-RU": "Описание", - "th-TH": "คำอธิบาย", - "vi-VN": "Mô tả" - }, - "createWorkflow": { - "zh-Hans": "创建工作流", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Crear Flujo de Trabajo", - "ru-RU": "Создать Рабочий Процесс", - "th-TH": "สร้างเวิร์กโฟลว์", - "vi-VN": "Tạo Quy trình" - }, - "selectFromSidebar": { - "zh-Hans": "从侧边栏选择一个工作流", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Seleccione un flujo de trabajo de la barra lateral", - "ru-RU": "Выберите рабочий процесс из боковой панели", - "th-TH": "เลือกเวิร์กโฟลว์จากแถบด้านข้าง", - "vi-VN": "Chọn một quy trình từ thanh bên" - }, - "editWorkflow": { - "zh-Hans": "编辑工作流", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Editar Flujo de Trabajo", - "ru-RU": "Редактировать Рабочий Процесс", - "th-TH": "แก้ไขเวิร์กโฟลว์", - "vi-VN": "Chỉnh sửa Quy trình" - }, - "newWorkflow": { - "zh-Hans": "新工作流", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Nuevo Flujo de Trabajo", - "ru-RU": "Новый Рабочий Процесс", - "th-TH": "เวิร์กโฟลว์ใหม่", - "vi-VN": "Quy trình Mới" - }, - "getWorkflowListError": { - "zh-Hans": "获取工作流列表失败:", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Error al obtener la lista de flujos de trabajo:", - "ru-RU": "Ошибка получения списка рабочих процессов:", - "th-TH": "ไม่สามารถรับรายการเวิร์กโฟลว์:", - "vi-VN": "Lỗi khi lấy danh sách quy trình:" - }, - "workflowName": { - "zh-Hans": "工作流名称", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Nombre del Flujo de Trabajo", - "ru-RU": "Название Рабочего Процесса", - "th-TH": "ชื่อเวิร์กโฟลว์", - "vi-VN": "Tên Quy trình" - }, - "workflowDescription": { - "zh-Hans": "工作流描述", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Descripción del Flujo de Trabajo", - "ru-RU": "Описание Рабочего Процесса", - "th-TH": "คำอธิบายเวิร์กโฟลว์", - "vi-VN": "Mô tả Quy trình" - }, - "workflowNameRequired": { - "zh-Hans": "工作流名称不能为空", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "El nombre del flujo de trabajo no puede estar vacío", - "ru-RU": "Название рабочего процесса не может быть пустым", - "th-TH": "ชื่อเวิร์กโฟลว์ไม่สามารถว่างเปล่า", - "vi-VN": "Tên quy trình không được để trống" - }, - "defaultDescription": { - "zh-Hans": "一个工作流", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Un flujo de trabajo", - "ru-RU": "Рабочий процесс", - "th-TH": "เวิร์กโฟลว์", - "vi-VN": "Một quy trình" - }, - "getWorkflowError": { - "zh-Hans": "获取工作流失败:", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Error al obtener el flujo de trabajo:", - "ru-RU": "Ошибка получения рабочего процесса:", - "th-TH": "ไม่สามารถรับเวิร์กโฟลว์:", - "vi-VN": "Lỗi khi lấy quy trình:" - }, - "loadError": { - "zh-Hans": "加载工作流失败", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Error al cargar el flujo de trabajo", - "ru-RU": "Ошибка загрузки рабочего процесса", - "th-TH": "ไม่สามารถโหลดเวิร์กโฟลว์", - "vi-VN": "Lỗi khi tải quy trình" - }, - "saveSuccess": { - "zh-Hans": "保存成功", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Guardado exitosamente", - "ru-RU": "Успешно сохранено", - "th-TH": "บันทึกสำเร็จ", - "vi-VN": "Lưu thành công" - }, - "saveError": { - "zh-Hans": "保存失败:", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Error al guardar:", - "ru-RU": "Ошибка сохранения:", - "th-TH": "ไม่สามารถบันทึก:", - "vi-VN": "Lỗi khi lưu:" - }, - "createSuccess": { - "zh-Hans": "工作流创建成功", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Flujo de trabajo creado exitosamente", - "ru-RU": "Рабочий процесс успешно создан", - "th-TH": "สร้างเวิร์กโฟลว์สำเร็จ", - "vi-VN": "Tạo quy trình thành công" - }, - "createError": { - "zh-Hans": "创建失败:", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Error al crear:", - "ru-RU": "Ошибка создания:", - "th-TH": "ไม่สามารถสร้าง:", - "vi-VN": "Lỗi khi tạo:" - }, - "deleteSuccess": { - "zh-Hans": "删除成功", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Eliminado exitosamente", - "ru-RU": "Успешно удалено", - "th-TH": "ลบสำเร็จ", - "vi-VN": "Xóa thành công" - }, - "deleteError": { - "zh-Hans": "删除失败:", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Error al eliminar:", - "ru-RU": "Ошибка удаления:", - "th-TH": "ไม่สามารถลบ:", - "vi-VN": "Lỗi khi xóa:" - }, - "deleteConfirmation": { - "zh-Hans": "你确定要删除这个工作流吗?", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "¿Está seguro de que desea eliminar este flujo de trabajo?", - "ru-RU": "Вы уверены, что хотите удалить этот рабочий процесс?", - "th-TH": "คุณแน่ใจหรือไม่ว่าต้องการลบเวิร์กโฟลว์นี้?", - "vi-VN": "Bạn có chắc chắn muốn xóa quy trình này không?" - }, - "copySuccess": { - "zh-Hans": "复制成功", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Copiado exitosamente", - "ru-RU": "Успешно скопировано", - "th-TH": "คัดลอกสำเร็จ", - "vi-VN": "Sao chép thành công" - }, - "copyError": { - "zh-Hans": "复制失败:", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Error al copiar:", - "ru-RU": "Не удалось скопировать:", - "th-TH": "คัดลอกล้มเหลว:", - "vi-VN": "Sao chép thất bại:" - }, - "export": { - "zh-Hans": "导出", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Exportar", - "ru-RU": "Экспорт", - "th-TH": "ส่งออก", - "vi-VN": "Xuất" - }, - "import": { - "zh-Hans": "导入", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Importar", - "ru-RU": "Импорт", - "th-TH": "นำเข้า", - "vi-VN": "Nhập" - }, - "exportSuccess": { - "zh-Hans": "工作流已导出", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Flujo de trabajo exportado", - "ru-RU": "Рабочий процесс экспортирован", - "th-TH": "ส่งออกเวิร์กโฟลว์แล้ว", - "vi-VN": "Đã xuất quy trình làm việc" - }, - "importSuccess": { - "zh-Hans": "工作流已导入", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Flujo de trabajo importado", - "ru-RU": "Рабочий процесс импортирован", - "th-TH": "นำเข้าเวิร์กโฟลว์แล้ว", - "vi-VN": "Đã nhập quy trình làm việc" - }, - "importError": { - "zh-Hans": "导入失败:文件格式无效", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Error al importar: formato de archivo inválido", - "ru-RU": "Не удалось импортировать: недопустимый формат файла", - "th-TH": "นำเข้าล้มเหลว: รูปแบบไฟล์ไม่ถูกต้อง", - "vi-VN": "Nhập thất bại: định dạng tệp không hợp lệ" - }, - "publish": { - "zh-Hans": "发布", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Publicar", - "ru-RU": "Опубликовать", - "th-TH": "เผยแพร่", - "vi-VN": "Xuất bản" - }, - "publishSuccess": { - "zh-Hans": "发布成功", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Publicado exitosamente", - "ru-RU": "Успешно опубликовано", - "th-TH": "เผยแพร่สำเร็จ", - "vi-VN": "Xuất bản thành công" - }, - "publishError": { - "zh-Hans": "发布失败", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Error al publicar", - "ru-RU": "Не удалось опубликовать", - "th-TH": "เผยแพร่ล้มเหลว", - "vi-VN": "Xuất bản thất bại" - }, - "configuration": { - "zh-Hans": "配置", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Configuración", - "ru-RU": "Конфигурация", - "th-TH": "การกำหนดค่า", - "vi-VN": "Cấu hình" - }, - "executions": { - "zh-Hans": "执行记录", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Registros de ejecución", - "ru-RU": "Записи выполнения", - "th-TH": "บันทึกการดำเนินการ", - "vi-VN": "Bản ghi thực thi" - }, - "editor": { - "zh-Hans": "编辑器", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Editor", - "ru-RU": "Редактор", - "th-TH": "ตัวแก้ไข", - "vi-VN": "Trình chỉnh sửa" - }, - "debugChat": { - "zh-Hans": "对话调试", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "ConversaciónDepurar", - "ru-RU": "ДиалогОтладка", - "th-TH": "การสนทนาดีบัก", - "vi-VN": "Hội thoạiGỡ lỗi" - }, - "basicInfo": { - "zh-Hans": "基础信息", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Información básica", - "ru-RU": "Основная информация", - "th-TH": "ข้อมูลพื้นฐาน", - "vi-VN": "Thông tin cơ bản" - }, - "basicInfoDesc": { - "zh-Hans": "设置工作流名称、图标和描述", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Configurar nombre, icono y descripción del flujo de trabajo", - "ru-RU": "Настроить название, значок и описание рабочего процесса", - "th-TH": "ตั้งค่าชื่อ ไอคอน และคำอธิบายเวิร์กโฟลว์", - "vi-VN": "Cấu hình tên, biểu tượng và mô tả quy trình làm việc" - }, - "basicInfoDescription": { - "zh-Hans": "设置工作流名称和描述", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Configurar nombre y descripción del flujo de trabajo", - "ru-RU": "Настроить название и описание рабочего процесса", - "th-TH": "ตั้งค่าชื่อและคำอธิบายเวิร์กโฟลว์", - "vi-VN": "Cấu hình tên và mô tả quy trình làm việc" - }, - "dangerZone": { - "zh-Hans": "危险区域", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Zona peligrosa", - "ru-RU": "Опасная зона", - "th-TH": "พื้นที่อันตราย", - "vi-VN": "Vùng nguy hiểm" - }, - "dangerZoneDesc": { - "zh-Hans": "不可逆的操作", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Operaciones irreversibles", - "ru-RU": "Необратимые операции", - "th-TH": "การดำเนินการที่ไม่สามารถย้อนกลับได้", - "vi-VN": "Các thao tác không thể hoàn tác" - }, - "dangerZoneDescription": { - "zh-Hans": "不可逆的操作", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Operaciones irreversibles", - "ru-RU": "Необратимые операции", - "th-TH": "การดำเนินการที่ไม่สามารถย้อนกลับได้", - "vi-VN": "Các thao tác không thể hoàn tác" - }, - "deleteWorkflowAction": { - "zh-Hans": "删除此工作流", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Eliminar este flujo de trabajo", - "ru-RU": "Удалить этот рабочий процесс", - "th-TH": "ลบเวิร์กโฟลว์นี้", - "vi-VN": "Xóa quy trình làm việc này" - }, - "deleteWorkflowHint": { - "zh-Hans": "删除后,所有关联配置将被永久移除,且无法恢复。", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Después de eliminar, todas las configuraciones asociadas se eliminarán permanentemente y no se podrán recuperar.", - "ru-RU": "После удаления все связанные конфигурации будут удалены навсегда и не могут быть восстановлены.", - "th-TH": "หลังจากลบแล้ว การกำหนดค่าที่เกี่ยวข้องทั้งหมดจะถูกลบอย่างถาวรและไม่สามารถกู้คืนได้", - "vi-VN": "Sau khi xóa, tất cả các cấu hình liên quan sẽ bị xóa vĩnh viễn và không thể khôi phục." - }, - "deleteWorkflow": { - "zh-Hans": "删除工作流", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "EliminarFlujo de Trabajo", - "ru-RU": "УдалитьРабочий Процесс", - "th-TH": "ลบเวิร์กโฟลว์", - "vi-VN": "XóaQuy trình" - }, - "deleteConfirm": { - "zh-Hans": "确认删除", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "ConfirmarEliminar", - "ru-RU": "ПодтвердитьУдалить", - "th-TH": "ยืนยันลบ", - "vi-VN": "Xác nhậnXóa" - }, - "deleteConfirmDesc": { - "zh-Hans": "您确定要删除工作流 \"{{name}}\" 吗?此操作无法撤销。", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "¿Está seguro de que desea eliminar el flujo de trabajo \"{{name}}\"? Esta operación no se puede deshacer.", - "ru-RU": "Вы уверены, что хотите удалить рабочий процесс \"{{name}}\"? Эту операцию нельзя отменить.", - "th-TH": "คุณแน่ใจหรือไม่ว่าต้องการลบเวิร์กโฟลว์ \"{{name}}\"? การดำเนินการนี้ไม่สามารถยกเลิกได้", - "vi-VN": "Bạn có chắc chắn muốn xóa quy trình làm việc \"{{name}}\" không? Thao tác này không thể hoàn tác." - }, - "name": { - "zh-Hans": "名称", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Nombre", - "ru-RU": "Название", - "th-TH": "ชื่อ", - "vi-VN": "Tên" - }, - "namePlaceholder": { - "zh-Hans": "输入工作流名称", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "EntradaFlujo de TrabajoNombre", - "ru-RU": "ВходРабочий ПроцессНазвание", - "th-TH": "อินพุตเวิร์กโฟลว์ชื่อ", - "vi-VN": "Đầu vàoQuy trìnhTên" - }, - "descriptionPlaceholder": { - "zh-Hans": "输入工作流描述(可选)", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Ingrese la descripción del flujo de trabajo (opcional)", - "ru-RU": "Введите описание рабочего процесса (необязательно)", - "th-TH": "ป้อนคำอธิบายเวิร์กโฟลว์ (ไม่บังคับ)", - "vi-VN": "Nhập mô tả quy trình làm việc (tùy chọn)" - }, - "enabled": { - "zh-Hans": "启用", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Habilitar", - "ru-RU": "Включить", - "th-TH": "เปิดใช้งาน", - "vi-VN": "Bật" - }, - "enabledDesc": { - "zh-Hans": "启用后,工作流将可以被触发执行", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Una vez habilitado, el flujo de trabajo podrá ser activado para su ejecución", - "ru-RU": "После включения рабочий процесс может быть запущен для выполнения", - "th-TH": "เมื่อเปิดใช้งานแล้ว เวิร์กโฟลว์จะสามารถถูกทริกเกอร์เพื่อดำเนินการได้", - "vi-VN": "Sau khi bật, quy trình làm việc có thể được kích hoạt để thực thi" - }, - "loading": { - "zh-Hans": "加载中...", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Cargando...", - "ru-RU": "Загрузка...", - "th-TH": "กำลังโหลด...", - "vi-VN": "Đang tải..." - }, - "info": { - "zh-Hans": "工作流信息", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Flujo de TrabajoInformación", - "ru-RU": "Рабочий ПроцессИнформация", - "th-TH": "เวิร์กโฟลว์ข้อมูล", - "vi-VN": "Quy trìnhThông tin" - }, - "uuid": { - "zh-Hans": "UUID", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "UUID", - "ru-RU": "UUID", - "th-TH": "UUID", - "vi-VN": "UUID" - }, - "version": { - "zh-Hans": "版本", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Versión", - "ru-RU": "Версия", - "th-TH": "เวอร์ชัน", - "vi-VN": "Phiên bản" - }, - "createdAt": { - "zh-Hans": "创建时间", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Fecha de creación", - "ru-RU": "Дата создания", - "th-TH": "เวลาสร้าง", - "vi-VN": "Thời gian tạo" - }, - "updatedAt": { - "zh-Hans": "更新时间", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Fecha de actualización", - "ru-RU": "Дата обновления", - "th-TH": "เวลาอัปเดต", - "vi-VN": "Thời gian cập nhật" - }, - "totalExecutions": { - "zh-Hans": "共 {{count}} 条执行记录", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Total de {{count}} registros de ejecución", - "ru-RU": "Всего {{count}} записей выполнения", - "th-TH": "รวม {{count}} บันทึกการดำเนินการ", - "vi-VN": "Tổng cộng {{count}} bản ghi thực thi" - }, - "statistics": { - "zh-Hans": "统计分析", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Análisis estadístico", - "ru-RU": "Статистический анализ", - "th-TH": "การวิเคราะห์สถิติ", - "vi-VN": "Phân tích thống kê" - }, - "successfulCount": { - "zh-Hans": "成功 {{count}} 次", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "{{count}} éxitos", - "ru-RU": "{{count}} успешных", - "th-TH": "สำเร็จ {{count}} ครั้ง", - "vi-VN": "Thành công {{count}} lần" - }, - "successRate": { - "zh-Hans": "成功率", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "averageDuration": { - "zh-Hans": "平均耗时", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Duración promedio", - "ru-RU": "Средняя длительность", - "th-TH": "ระยะเวลาเฉลี่ย", - "vi-VN": "Thời lượng trung bình" - }, - "perExecution": { - "zh-Hans": "每次执行", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Por ejecución", - "ru-RU": "За выполнение", - "th-TH": "ต่อการดำเนินการ", - "vi-VN": "Mỗi lần thực thi" - }, - "failedExecutions": { - "zh-Hans": "失败次数", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "lastExecution": { - "zh-Hans": "最后执行", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Última ejecución", - "ru-RU": "Последнее выполнение", - "th-TH": "การดำเนินการล่าสุด", - "vi-VN": "Lần thực thi cuối" - }, - "filterByStatus": { - "zh-Hans": "按状态筛选", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Filtrar por estado", - "ru-RU": "Фильтр по статусу", - "th-TH": "กรองตามสถานะ", - "vi-VN": "Lọc theo trạng thái" - }, - "allStatuses": { - "zh-Hans": "全部状态", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "manualTrigger": { - "zh-Hans": "手动触发", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Activación manual", - "ru-RU": "Ручной запуск", - "th-TH": "ทริกเกอร์ด้วยตนเอง", - "vi-VN": "Kích hoạt thủ công" - }, - "executionId": { - "zh-Hans": "执行 ID", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Ejecutar ID", - "ru-RU": "Выполнить ID", - "th-TH": "ดำเนินการ ID", - "vi-VN": "Thực thi ID" - }, - "status": { - "zh-Hans": "状态", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Estado", - "ru-RU": "Статус", - "th-TH": "สถานะ", - "vi-VN": "Trạng thái" - }, - "triggerType": { - "zh-Hans": "触发类型", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Tipo de activación", - "ru-RU": "Тип триггера", - "th-TH": "ประเภททริกเกอร์", - "vi-VN": "Loại kích hoạt" - }, - "startedAt": { - "zh-Hans": "开始时间", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Hora de inicio", - "ru-RU": "Время начала", - "th-TH": "เวลาเริ่มต้น", - "vi-VN": "Thời gian bắt đầu" - }, - "duration": { - "zh-Hans": "等待时间", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "noExecutions": { - "zh-Hans": "暂无执行记录", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "No hay registros de ejecución", - "ru-RU": "Нет записей выполнения", - "th-TH": "ไม่มีบันทึกการดำเนินการ", - "vi-VN": "Không có bản ghi thực thi" - }, - "executionDetails": { - "zh-Hans": "执行详情", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Detalles de ejecución", - "ru-RU": "Детали выполнения", - "th-TH": "รายละเอียดการดำเนินการ", - "vi-VN": "Chi tiết thực thi" - }, - "error": { - "zh-Hans": "错误", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Error", - "ru-RU": "Ошибка", - "th-TH": "ข้อผิดพลาด", - "vi-VN": "Lỗi" - }, - "nodeExecutions": { - "zh-Hans": "节点执行记录", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "result": { - "zh-Hans": "结果", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Resultado", - "ru-RU": "Результат", - "th-TH": "ผลลัพธ์", - "vi-VN": "Kết quả" - }, - "nodePalette": { - "zh-Hans": "节点面板", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Panel de nodos", - "ru-RU": "Панель узлов", - "th-TH": "แผงโหนด", - "vi-VN": "Bảng điều khiển nút" - }, - "properties": { - "zh-Hans": "属性", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Propiedades", - "ru-RU": "Свойства", - "th-TH": "คุณสมบัติ", - "vi-VN": "Thuộc tính" - }, - "zoomIn": { - "zh-Hans": "放大", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Acercar", - "ru-RU": "Увеличить", - "th-TH": "ขยาย", - "vi-VN": "Phóng to" - }, - "zoomOut": { - "zh-Hans": "缩小", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Alejar", - "ru-RU": "Уменьшить", - "th-TH": "ย่อ", - "vi-VN": "Thu nhỏ" - }, - "fitView": { - "zh-Hans": "适应视图", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Ajustar vista", - "ru-RU": "Подогнать вид", - "th-TH": "ปรับมุมมอง", - "vi-VN": "Điều chỉnh khung nhìn" - }, - "unsavedChanges": { - "zh-Hans": "有未保存的更改", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "paste": { - "zh-Hans": "粘贴", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Pegar", - "ru-RU": "Вставить", - "th-TH": "วาง", - "vi-VN": "Dán" - }, - "deleted": { - "zh-Hans": "已删除", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Eliminado", - "ru-RU": "Удалено", - "th-TH": "ลบแล้ว", - "vi-VN": "Đã xóa" - }, - "nothingToCopy": { - "zh-Hans": "没有选中的节点可复制", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "nothingToPaste": { - "zh-Hans": "剪贴板为空", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "copied": { - "zh-Hans": "已复制 {{count}} 个节点", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "pasted": { - "zh-Hans": "已粘贴 {{count}} 个节点", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "nodesSelected": { - "zh-Hans": "已选中 {{count}} 个节点", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "{{count}} nodos seleccionados", - "ru-RU": "Выбрано {{count}} узлов", - "th-TH": "เลือก {{count}} โหนดแล้ว", - "vi-VN": "Đã chọn {{count}} nút" - }, - "edgesSelected": { - "zh-Hans": "已选中 {{count}} 条连线", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Seleccionado {{count}} conexiones", - "ru-RU": "Выбрано {{count}} соединений", - "th-TH": "เลือกแล้ว {{count}} การเชื่อมต่อ", - "vi-VN": "Đã chọn {{count}} kết nối" - }, - "searchNodes": { - "zh-Hans": "搜索节点...", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "loadingNodeTypes": { - "zh-Hans": "正在加载节点类型...", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "noNodesFound": { - "zh-Hans": "未找到匹配的节点", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "clearSearch": { - "zh-Hans": "清除搜索", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Limpiar búsqueda", - "ru-RU": "Очистить поиск", - "th-TH": "ล้างการค้นหา", - "vi-VN": "Xóa tìm kiếm" - }, - "dragToAdd": { - "zh-Hans": "拖拽节点到画布添加", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "selectNodeOrEdge": { - "zh-Hans": "选择一个节点或连线", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "selectNodeOrEdgeHint": { - "zh-Hans": "点击画布中的节点或连线来查看和编辑其属性", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "edgeProperties": { - "zh-Hans": "连线属性", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Propiedades de conexión", - "ru-RU": "Свойства соединения", - "th-TH": "คุณสมบัติการเชื่อมต่อ", - "vi-VN": "Thuộc tính kết nối" - }, - "nodeProperties": { - "zh-Hans": "节点属性", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Propiedades del nodo", - "ru-RU": "Свойства узла", - "th-TH": "คุณสมบัติโหนด", - "vi-VN": "Thuộc tính nút" - }, - "condition": { - "zh-Hans": "条件分支", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "hasCondition": { - "zh-Hans": "已设置", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "conditionPlaceholder": { - "zh-Hans": "输入条件表达式,如: output.success == true", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "conditionHelp": { - "zh-Hans": "条件为空时,该连线将始终被执行。支持使用 {{变量名}} 引用上下文变量。", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "deleteEdge": { - "zh-Hans": "删除连线", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Eliminar conexión", - "ru-RU": "Удалить соединение", - "th-TH": "ลบขอบ", - "vi-VN": "Xóa cạnh" - }, - "deleteEdgeConfirm": { - "zh-Hans": "确定删除此连线?", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "deleteEdgeConfirmDesc": { - "zh-Hans": "删除后,该连线将被永久移除。", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "nodeLabel": { - "zh-Hans": "节点名称", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "NodoNombre", - "ru-RU": "УзелНазвание", - "th-TH": "โหนดชื่อ", - "vi-VN": "NútTên" - }, - "nodeLabelPlaceholder": { - "zh-Hans": "输入节点显示名称", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "nodeId": { - "zh-Hans": "节点 ID", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Nodo ID", - "ru-RU": "Узел ID", - "th-TH": "โหนด ID", - "vi-VN": "Nút ID" - }, - "inputOutputVariables": { - "zh-Hans": "输入/输出变量", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Entrada/SalidaVariable", - "ru-RU": "Вход/ВыходПеременная", - "th-TH": "อินพุต/เอาต์พุตตัวแปร", - "vi-VN": "Đầu vào/Đầu raBiến" - }, - "inputs": { - "zh-Hans": "输入", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Entrada", - "ru-RU": "Вход", - "th-TH": "อินพุต", - "vi-VN": "Đầu vào" - }, - "outputs": { - "zh-Hans": "输出", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Salida", - "ru-RU": "Выход", - "th-TH": "เอาต์พุต", - "vi-VN": "Đầu ra" - }, - "availableVariables": { - "zh-Hans": "可用变量", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Variables disponibles", - "ru-RU": "Доступные переменные", - "th-TH": "ตัวแปรที่ใช้ได้", - "vi-VN": "Biến khả dụng" - }, - "globalVariables": { - "zh-Hans": "全局变量", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Variables globales", - "ru-RU": "Глобальные переменные", - "th-TH": "ตัวแปรส่วนกลาง", - "vi-VN": "Biến toàn cục" - }, - "messageContent": { - "zh-Hans": "模拟消息", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "messageSender": { - "zh-Hans": "发送者", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Remitente", - "ru-RU": "Отправитель", - "th-TH": "ผู้ส่ง", - "vi-VN": "Người gửi" - }, - "platform": { - "zh-Hans": "平台", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Plataforma", - "ru-RU": "Платформа", - "th-TH": "แพลตฟอร์ม", - "vi-VN": "Nền tảng" - }, - "sessionId": { - "zh-Hans": "会话 ID", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Sesión ID", - "ru-RU": "Сессия ID", - "th-TH": "เซสชัน ID", - "vi-VN": "Phiên ID" - }, - "timestamp": { - "zh-Hans": "时间戳", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Marca de tiempo", - "ru-RU": "Временная метка", - "th-TH": "ประทับเวลา", - "vi-VN": "Dấu thời gian" - }, - "nodeConfig": { - "zh-Hans": "节点配置", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "NodoConfiguración", - "ru-RU": "УзелКонфигурация", - "th-TH": "โหนดการกำหนดค่า", - "vi-VN": "NútCấu hình" - }, - "noConfigOptions": { - "zh-Hans": "该节点类型暂无配置选项", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "deleteNode": { - "zh-Hans": "删除节点", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "EliminarNodo", - "ru-RU": "УдалитьУзел", - "th-TH": "ลบโหนด", - "vi-VN": "XóaNút" - }, - "deleteNodeConfirm": { - "zh-Hans": "确定删除此节点?", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "deleteNodeConfirmDesc": { - "zh-Hans": "删除后,该节点及其所有连线将被永久移除。", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "input": { - "zh-Hans": "输入", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Entrada", - "ru-RU": "Вход", - "th-TH": "อินพุต", - "vi-VN": "Đầu vào" - }, - "message": { - "zh-Hans": "消息", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Mensaje", - "ru-RU": "Сообщение", - "th-TH": "ข้อความ", - "vi-VN": "Tin nhắn" - }, - "text": { - "zh-Hans": "文本", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Texto", - "ru-RU": "Текст", - "th-TH": "ข้อความ", - "vi-VN": "Văn bản" - }, - "query": { - "zh-Hans": "SQL查询", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "SQLConsulta", - "ru-RU": "SQLЗапрос", - "th-TH": "SQLสอบถาม", - "vi-VN": "SQLTruy vấn" - }, - "data": { - "zh-Hans": "数据", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Datos", - "ru-RU": "Данные", - "th-TH": "ข้อมูล", - "vi-VN": "Dữ liệu" - }, - "value": { - "zh-Hans": "值", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Valor", - "ru-RU": "Значение", - "th-TH": "ค่า", - "vi-VN": "Giá trị" - }, - "content": { - "zh-Hans": "内容", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Contenido", - "ru-RU": "Содержимое", - "th-TH": "เนื้อหา", - "vi-VN": "Nội dung" - }, - "context": { - "zh-Hans": "调试上下文", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "body": { - "zh-Hans": "请求体", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "variables": { - "zh-Hans": "监控变量", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "items": { - "zh-Hans": "项目列表", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "arguments": { - "zh-Hans": "参数", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Parámetro", - "ru-RU": "Параметр", - "th-TH": "พารามิเตอร์", - "vi-VN": "Tham số" - }, - "question": { - "zh-Hans": "用户问题", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "UsuarioPregunta", - "ru-RU": "ПользовательВопрос", - "th-TH": "ผู้ใช้คำถาม", - "vi-VN": "Người dùngCâu hỏi" - }, - "parameters": { - "zh-Hans": "参数定义", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "key": { - "zh-Hans": "键", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Clave", - "ru-RU": "Ключ", - "th-TH": "คีย์", - "vi-VN": "Khóa" - }, - "payload": { - "zh-Hans": "载荷", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Carga útil", - "ru-RU": "Полезная нагрузка", - "th-TH": "เพย์โหลด", - "vi-VN": "Tải trọng" - }, - "input_value": { - "zh-Hans": "输入值", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "EntradaValor", - "ru-RU": "ВходЗначение", - "th-TH": "อินพุตค่า", - "vi-VN": "Đầu vàoGiá trị" - }, - "conversation_id": { - "zh-Hans": "会话 ID", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Sesión ID", - "ru-RU": "Сессия ID", - "th-TH": "เซสชัน ID", - "vi-VN": "Phiên ID" - }, - "case_1": { - "zh-Hans": "分支 1", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Rama 1", - "ru-RU": "Ветвь 1", - "th-TH": "สาขา 1", - "vi-VN": "Nhánh 1" - }, - "case_2": { - "zh-Hans": "分支 2", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Rama 2", - "ru-RU": "Ветвь 2", - "th-TH": "สาขา 2", - "vi-VN": "Nhánh 2" - }, - "branch_1": { - "zh-Hans": "分支1输出", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "branch_2": { - "zh-Hans": "分支2输出", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "notification_id": { - "zh-Hans": "通知ID", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "NotificaciónID", - "ru-RU": "УведомлениеID", - "th-TH": "การแจ้งเตือนID", - "vi-VN": "Thông báoID" - }, - "key_template": { - "zh-Hans": "键模板", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Plantilla de clave", - "ru-RU": "Шаблон ключа", - "th-TH": "เทมเพลตคีย์", - "vi-VN": "Mẫu khóa" - }, - "hash_field": { - "zh-Hans": "哈希字段", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Campo hash", - "ru-RU": "Поле хеша", - "th-TH": "ฟิลด์แฮช", - "vi-VN": "Trường băm" - }, - "server_name": { - "zh-Hans": "服务器名称", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Nombre del servidor", - "ru-RU": "Имя сервера", - "th-TH": "ชื่อเซิร์ฟเวอร์", - "vi-VN": "Tên máy chủ" - }, - "tool_name": { - "zh-Hans": "工具名称", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Nombre de herramienta", - "ru-RU": "Имя инструмента", - "th-TH": "ชื่อเครื่องมือ", - "vi-VN": "Tên công cụ" - }, - "arguments_template": { - "zh-Hans": "参数模板", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Plantilla de parámetros", - "ru-RU": "Шаблон параметров", - "th-TH": "เทมเพลตพารามิเตอร์", - "vi-VN": "Mẫu tham số" - }, - "scope": { - "zh-Hans": "作用域", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Ámbito", - "ru-RU": "Область", - "th-TH": "ขอบเขต", - "vi-VN": "Phạm vi" - }, - "output": { - "zh-Hans": "输出", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Salida", - "ru-RU": "Выход", - "th-TH": "เอาต์พุต", - "vi-VN": "Đầu ra" - }, - "response": { - "zh-Hans": "响应", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Respuesta", - "ru-RU": "Ответ", - "th-TH": "การตอบสนอง", - "vi-VN": "Phản hồi" - }, - "sender": { - "zh-Hans": "发送者", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Remitente", - "ru-RU": "Отправитель", - "th-TH": "ผู้ส่ง", - "vi-VN": "Người gửi" - }, - "sender_id": { - "zh-Hans": "发送者 ID", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "sender_name": { - "zh-Hans": "发送者名称", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Nombre del remitente", - "ru-RU": "Имя отправителя", - "th-TH": "ชื่อผู้ส่ง", - "vi-VN": "Tên người gửi" - }, - "cron_timestamp": { - "zh-Hans": "Cron 时间戳", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "cron_schedule": { - "zh-Hans": "Cron 调度表达式", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Cron Expresión de programación", - "ru-RU": "Cron Выражение расписания", - "th-TH": "Cron นิพจน์ตารางเวลา", - "vi-VN": "Cron Biểu thức lịch trình" - }, - "cron_context": { - "zh-Hans": "Cron 上下文", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Cron Contexto", - "ru-RU": "Cron Контекст", - "th-TH": "Cron บริบท", - "vi-VN": "Cron Ngữ cảnh" - }, - "trigger_time": { - "zh-Hans": "触发时间", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Tiempo de activación", - "ru-RU": "Время триггера", - "th-TH": "เวลาทริกเกอร์", - "vi-VN": "Thời gian kích hoạt" - }, - "schedule": { - "zh-Hans": "触发计划", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Programación", - "ru-RU": "Расписание", - "th-TH": "ตารางเวลา", - "vi-VN": "Lịch trình" - }, - "headers": { - "zh-Hans": "请求头", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Encabezados", - "ru-RU": "Заголовки", - "th-TH": "ส่วนหัว", - "vi-VN": "Tiêu đề" - }, - "query_params": { - "zh-Hans": "查询参数", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Parámetros de consulta", - "ru-RU": "Параметры запроса", - "th-TH": "พารามิเตอร์คิวรี", - "vi-VN": "Tham số truy vấn" - }, - "method": { - "zh-Hans": "请求方法", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "is_group": { - "zh-Hans": "是否群聊", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Es chat grupal", - "ru-RU": "Групповой чат", - "th-TH": "เป็นแชทกลุ่ม", - "vi-VN": "Là chat nhóm" - }, - "event": { - "zh-Hans": "事件", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Evento", - "ru-RU": "Событие", - "th-TH": "เหตุการณ์", - "vi-VN": "Sự kiện" - }, - "event_type": { - "zh-Hans": "事件类型", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Tipo de evento", - "ru-RU": "Тип события", - "th-TH": "ประเภทเหตุการณ์", - "vi-VN": "Loại sự kiện" - }, - "event_data": { - "zh-Hans": "事件数据", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "EventoDatos", - "ru-RU": "СобытиеДанные", - "th-TH": "เหตุการณ์ข้อมูล", - "vi-VN": "Sự kiệnDữ liệu" - }, - "event_timestamp": { - "zh-Hans": "事件时间戳", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Marca de tiempo del evento", - "ru-RU": "Временная метка события", - "th-TH": "ประทับเวลาเหตุการณ์", - "vi-VN": "Dấu thời gian sự kiện" - }, - "usage": { - "zh-Hans": "Token使用统计", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "parsed": { - "zh-Hans": "解析结果", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Resultado analizado", - "ru-RU": "Результат разбора", - "th-TH": "ผลการแยกวิเคราะห์", - "vi-VN": "Kết quả phân tích" - }, - "category": { - "zh-Hans": "分类结果", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "confidence": { - "zh-Hans": "置信度", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Confianza", - "ru-RU": "Достоверность", - "th-TH": "ความเชื่อมั่น", - "vi-VN": "Độ tin cậy" - }, - "all_scores": { - "zh-Hans": "所有分数", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Todas las puntuaciones", - "ru-RU": "Все оценки", - "th-TH": "คะแนนทั้งหมด", - "vi-VN": "Tất cả điểm số" - }, - "missing": { - "zh-Hans": "缺失参数", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "success": { - "zh-Hans": "是否成功", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "scores": { - "zh-Hans": "分数", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Puntuaciones", - "ru-RU": "Оценки", - "th-TH": "คะแนน", - "vi-VN": "Điểm số" - }, - "chunks": { - "zh-Hans": "文本块", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "count": { - "zh-Hans": "数量", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Cantidad", - "ru-RU": "Количество", - "th-TH": "จำนวน", - "vi-VN": "Số lượng" - }, - "logs": { - "zh-Hans": "日志", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Registro", - "ru-RU": "Журнал", - "th-TH": "บันทึก", - "vi-VN": "Nhật ký" - }, - "embedding": { - "zh-Hans": "向量", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Vector", - "ru-RU": "Вектор", - "th-TH": "เวกเตอร์", - "vi-VN": "Vector" - }, - "dimensions": { - "zh-Hans": "维度", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Dimensiones", - "ru-RU": "Размерности", - "th-TH": "มิติ", - "vi-VN": "Chiều" - }, - "intent": { - "zh-Hans": "意图", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Intención", - "ru-RU": "Намерение", - "th-TH": "เจตนา", - "vi-VN": "Ý định" - }, - "entities": { - "zh-Hans": "实体", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Entidades", - "ru-RU": "Сущности", - "th-TH": "เอนทิตี", - "vi-VN": "Thực thể" - }, - "prompt": { - "zh-Hans": "提示/问题", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "context_info": { - "zh-Hans": "上下文信息", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Información de contexto", - "ru-RU": "Контекстная информация", - "th-TH": "ข้อมูลบริบท", - "vi-VN": "Thông tin ngữ cảnh" - }, - "console": { - "zh-Hans": "控制台输出", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "code_input": { - "zh-Hans": "代码输入", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Entrada de código", - "ru-RU": "Ввод кода", - "th-TH": "อินพุตโค้ด", - "vi-VN": "Đầu vào mã" - }, - "code_output": { - "zh-Hans": "代码输出", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Salida de código", - "ru-RU": "Вывод кода", - "th-TH": "เอาต์พุตโค้ด", - "vi-VN": "Đầu ra mã" - }, - "http_body": { - "zh-Hans": "HTTP 请求体", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "http_headers": { - "zh-Hans": "HTTP 请求头", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "http_response": { - "zh-Hans": "HTTP 响应", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "HTTP Respuesta", - "ru-RU": "HTTP Ответ", - "th-TH": "HTTP การตอบสนอง", - "vi-VN": "HTTP Phản hồi" - }, - "response_headers": { - "zh-Hans": "响应头", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Encabezados de respuesta", - "ru-RU": "Заголовки ответа", - "th-TH": "ส่วนหัวการตอบสนอง", - "vi-VN": "Tiêu đề phản hồi" - }, - "transform_input": { - "zh-Hans": "转换输入", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Entrada de transformación", - "ru-RU": "Ввод преобразования", - "th-TH": "อินพุตการแปลง", - "vi-VN": "Đầu vào chuyển đổi" - }, - "transform_result": { - "zh-Hans": "转换结果", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Resultado de transformación", - "ru-RU": "Результат преобразования", - "th-TH": "ผลลัพธ์การแปลง", - "vi-VN": "Kết quả chuyển đổi" - }, - "extraction_success": { - "zh-Hans": "提取成功", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Extracción exitosa", - "ru-RU": "Извлечение успешно", - "th-TH": "แยกสำเร็จ", - "vi-VN": "Trích xuất thành công" - }, - "extract_text": { - "zh-Hans": "输入文本", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "documents": { - "zh-Hans": "检索的文档", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "citations": { - "zh-Hans": "引用信息", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "knowledge_context": { - "zh-Hans": "合并上下文", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "knowledge_query": { - "zh-Hans": "检索查询", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "RecuperaciónConsulta", - "ru-RU": "ПоискЗапрос", - "th-TH": "ค้นหาสอบถาม", - "vi-VN": "Truy xuấtTruy vấn" - }, - "true": { - "zh-Hans": "条件为真输出", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "false": { - "zh-Hans": "条件为假输出", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "matched_case": { - "zh-Hans": "匹配分支", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "default": { - "zh-Hans": "默认分支", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "PredeterminadoRama", - "ru-RU": "По умолчаниюВетвь", - "th-TH": "ค่าเริ่มต้นสาขา", - "vi-VN": "Mặc địnhNhánh" - }, - "item": { - "zh-Hans": "当前项", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Elemento actual", - "ru-RU": "Текущий элемент", - "th-TH": "รายการปัจจุบัน", - "vi-VN": "Mục hiện tại" - }, - "index": { - "zh-Hans": "当前索引", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Índice actual", - "ru-RU": "Текущий индекс", - "th-TH": "ดัชนีปัจจุบัน", - "vi-VN": "Chỉ số hiện tại" - }, - "completed": { - "zh-Hans": "已完成", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Completado", - "ru-RU": "Завершено", - "th-TH": "เสร็จสมบูรณ์", - "vi-VN": "Đã hoàn thành" - }, - "is_first": { - "zh-Hans": "是否第一个", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "¿Es el primero?", - "ru-RU": "Это первый?", - "th-TH": "เป็นตัวแรกหรือไม่?", - "vi-VN": "Có phải đầu tiên không?" - }, - "is_last": { - "zh-Hans": "是否最后一个", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "¿Es el último?", - "ru-RU": "Это последний?", - "th-TH": "เป็นตัวสุดท้ายหรือไม่?", - "vi-VN": "Có phải cuối cùng không?" - }, - "results": { - "zh-Hans": "结果", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Resultado", - "ru-RU": "Результат", - "th-TH": "ผลลัพธ์", - "vi-VN": "Kết quả" - }, - "condition_input": { - "zh-Hans": "条件输入", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "CondiciónEntrada", - "ru-RU": "УсловиеВход", - "th-TH": "เงื่อนไขอินพุต", - "vi-VN": "Điều kiệnĐầu vào" - }, - "switch_input": { - "zh-Hans": "开关输入", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "loop_items": { - "zh-Hans": "迭代项目", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Elementos de iteración", - "ru-RU": "Элементы итерации", - "th-TH": "รายการวนซ้ำ", - "vi-VN": "Các mục lặp" - }, - "iterator_array": { - "zh-Hans": "输入数组", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "iterator_item": { - "zh-Hans": "当前元素", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Elemento actual", - "ru-RU": "Текущий элемент", - "th-TH": "องค์ประกอบปัจจุบัน", - "vi-VN": "Phần tử hiện tại" - }, - "iterator_index": { - "zh-Hans": "当前索引", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Índice actual", - "ru-RU": "Текущий индекс", - "th-TH": "ดัชนีปัจจุบัน", - "vi-VN": "Chỉ số hiện tại" - }, - "errors": { - "zh-Hans": "错误列表", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "ErrorLista", - "ru-RU": "ОшибкаСписок", - "th-TH": "ข้อผิดพลาดรายการ", - "vi-VN": "LỗiDanh sách" - }, - "parallel_input": { - "zh-Hans": "并行输入", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Entrada paralela", - "ru-RU": "Параллельный ввод", - "th-TH": "อินพุตขนาน", - "vi-VN": "Đầu vào song song" - }, - "parallel_results": { - "zh-Hans": "所有分支结果", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "wait_input": { - "zh-Hans": "透传输入", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "wait_output": { - "zh-Hans": "透传输出", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "merged": { - "zh-Hans": "合并结果", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "merge_array": { - "zh-Hans": "数组结果", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "merge_input_1": { - "zh-Hans": "输入 1", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Entrada 1", - "ru-RU": "Вход 1", - "th-TH": "อินพุต 1", - "vi-VN": "Đầu vào 1" - }, - "merge_input_2": { - "zh-Hans": "输入 2", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Entrada 2", - "ru-RU": "Вход 2", - "th-TH": "อินพุต 2", - "vi-VN": "Đầu vào 2" - }, - "merge_input_3": { - "zh-Hans": "输入 3", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Entrada 3", - "ru-RU": "Вход 3", - "th-TH": "อินพุต 3", - "vi-VN": "Đầu vào 3" - }, - "merge_input_4": { - "zh-Hans": "输入 4", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Entrada 4", - "ru-RU": "Вход 4", - "th-TH": "อินพุต 4", - "vi-VN": "Đầu vào 4" - }, - "aggregated": { - "zh-Hans": "聚合变量", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Variables agregadas", - "ru-RU": "Агрегированные переменные", - "th-TH": "ตัวแปรที่รวม", - "vi-VN": "Biến tổng hợp" - }, - "aggregator_variables": { - "zh-Hans": "变量输入", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "VariableEntrada", - "ru-RU": "ПеременнаяВход", - "th-TH": "ตัวแปรอินพุต", - "vi-VN": "BiếnĐầu vào" - }, - "message_id": { - "zh-Hans": "消息ID", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "MensajeID", - "ru-RU": "СообщениеID", - "th-TH": "ข้อความID", - "vi-VN": "Tin nhắnID" - }, - "status_code": { - "zh-Hans": "状态码", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Código de estado", - "ru-RU": "Код состояния", - "th-TH": "รหัสสถานะ", - "vi-VN": "Mã trạng thái" - }, - "execution_id": { - "zh-Hans": "执行ID", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "EjecutarID", - "ru-RU": "ВыполнитьID", - "th-TH": "ดำเนินการID", - "vi-VN": "Thực thiID" - }, - "target": { - "zh-Hans": "目标 ID", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "ID de destino", - "ru-RU": "ID цели", - "th-TH": "ID เป้าหมาย", - "vi-VN": "ID đích" - }, - "reply_message": { - "zh-Hans": "回复内容", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "pipeline_response": { - "zh-Hans": "Pipeline 响应", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Pipeline Respuesta", - "ru-RU": "Pipeline Ответ", - "th-TH": "Pipeline การตอบสนอง", - "vi-VN": "Pipeline Phản hồi" - }, - "pipeline_result": { - "zh-Hans": "完整结果", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "pipeline_query": { - "zh-Hans": "查询内容", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "context_data": { - "zh-Hans": "上下文数据", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "store_status": { - "zh-Hans": "存储状态", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "AlmacenarEstado", - "ru-RU": "ХранитьСтатус", - "th-TH": "จัดเก็บสถานะ", - "vi-VN": "Lưu trữTrạng thái" - }, - "store_key": { - "zh-Hans": "存储键", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "store_value": { - "zh-Hans": "存储值", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "variable_value": { - "zh-Hans": "变量值", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "VariableValor", - "ru-RU": "ПеременнаяЗначение", - "th-TH": "ตัวแปรค่า", - "vi-VN": "BiếnGiá trị" - }, - "variable_result": { - "zh-Hans": "设置变量结果", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "statement": { - "zh-Hans": "开场白", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Declaración de Apertura", - "ru-RU": "Вступительное Заявление", - "th-TH": "คำกล่าวเปิด", - "vi-VN": "Tuyên bố Mở đầu" - }, - "suggested_questions": { - "zh-Hans": "建议问题", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "suggestions": { - "zh-Hans": "建议问题", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "workflow_output": { - "zh-Hans": "工作流输出", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Flujo de TrabajoSalida", - "ru-RU": "Рабочий ПроцессВыход", - "th-TH": "เวิร์กโฟลว์เอาต์พุต", - "vi-VN": "Quy trìnhĐầu ra" - }, - "final_result": { - "zh-Hans": "最终结果", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "query_results": { - "zh-Hans": "查询结果", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "row_count": { - "zh-Hans": "行数", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Número de filas", - "ru-RU": "Количество строк", - "th-TH": "จำนวนแถว", - "vi-VN": "Số hàng" - }, - "query_success": { - "zh-Hans": "查询成功", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "redis_result": { - "zh-Hans": "Redis结果", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "RedisResultado", - "ru-RU": "RedisРезультат", - "th-TH": "Redisผลลัพธ์", - "vi-VN": "RedisKết quả" - }, - "redis_success": { - "zh-Hans": "Redis成功", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "RedisÉxito", - "ru-RU": "RedisУспех", - "th-TH": "Redisสำเร็จ", - "vi-VN": "RedisThành công" - }, - "redis_key": { - "zh-Hans": "Redis 键", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Redis Clave", - "ru-RU": "Redis Ключ", - "th-TH": "Redis คีย์", - "vi-VN": "Redis Khóa" - }, - "redis_value": { - "zh-Hans": "Redis 值", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Redis Valor", - "ru-RU": "Redis Значение", - "th-TH": "Redis ค่า", - "vi-VN": "Redis Giá trị" - }, - "plugin_input": { - "zh-Hans": "插件输入", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "tool_result": { - "zh-Hans": "工具结果", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "tool_success": { - "zh-Hans": "工具成功", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "mcp_arguments": { - "zh-Hans": "工具参数", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "memory_result": { - "zh-Hans": "记忆结果", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "memory_success": { - "zh-Hans": "记忆成功", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "memory_value": { - "zh-Hans": "存储值", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "answer": { - "zh-Hans": "答案", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Respuesta", - "ru-RU": "Ответ", - "th-TH": "คำตอบ", - "vi-VN": "Câu trả lời" - }, - "dify_success": { - "zh-Hans": "Dify成功", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "DifyÉxito", - "ru-RU": "DifyУспех", - "th-TH": "Difyสำเร็จ", - "vi-VN": "DifyThành công" - }, - "dify_query": { - "zh-Hans": "用户输入/查询", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "dify_conversation_id": { - "zh-Hans": "会话 ID", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Sesión ID", - "ru-RU": "Сессия ID", - "th-TH": "เซสชัน ID", - "vi-VN": "Phiên ID" - }, - "search_results": { - "zh-Hans": "搜索结果", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "knowledge_base_query": { - "zh-Hans": "查询内容", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "n8n_result": { - "zh-Hans": "N8n结果", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "N8nResultado", - "ru-RU": "N8nРезультат", - "th-TH": "N8nผลลัพธ์", - "vi-VN": "N8nKết quả" - }, - "n8n_success": { - "zh-Hans": "N8n成功", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "N8nÉxito", - "ru-RU": "N8nУспех", - "th-TH": "N8nสำเร็จ", - "vi-VN": "N8nThành công" - }, - "n8n_payload": { - "zh-Hans": "工作流输入数据", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "flow_result": { - "zh-Hans": "流程结果", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "flow_success": { - "zh-Hans": "流程成功", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "langflow_input": { - "zh-Hans": "输入内容", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "bot_answer": { - "zh-Hans": "机器人回复", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "bot_success": { - "zh-Hans": "机器人成功", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "coze_query": { - "zh-Hans": "用户输入/查询", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "coze_conversation_id": { - "zh-Hans": "会话 ID", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Sesión ID", - "ru-RU": "Сессия ID", - "th-TH": "เซสชัน ID", - "vi-VN": "Phiên ID" - }, - "bot_conversation_id": { - "zh-Hans": "会话 ID", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Sesión ID", - "ru-RU": "Сессия ID", - "th-TH": "เซสชัน ID", - "vi-VN": "Phiên ID" - }, - "webhook_body": { - "zh-Hans": "Webhook 请求体", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "webhook_headers": { - "zh-Hans": "Webhook 请求头", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "webhook_query": { - "zh-Hans": "Webhook 查询参数", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "webhook_method": { - "zh-Hans": "Webhook 请求方法", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "save": { - "zh-Hans": "保存", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Guardar", - "ru-RU": "Сохранить", - "th-TH": "บันทึก", - "vi-VN": "Lưu" - }, - "undo": { - "zh-Hans": "撤销", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Deshacer", - "ru-RU": "Отменить", - "th-TH": "เลิกทำ", - "vi-VN": "Hoàn tác" - }, - "redo": { - "zh-Hans": "重做", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Rehacer", - "ru-RU": "Повторить", - "th-TH": "ทำซ้ำ", - "vi-VN": "Làm lại" - }, - "edgeCondition": { - "zh-Hans": "条件表达式", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "edgeConditionPlaceholder": { - "zh-Hans": "如: ${output.success} == true", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Ej: ${output.success} == true", - "ru-RU": "Напр: ${output.success} == true", - "th-TH": "เช่น: ${output.success} == true", - "vi-VN": "VD: ${output.success} == true" - }, - "noNodeSelected": { - "zh-Hans": "未选中节点", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "selectNodeToEdit": { - "zh-Hans": "点击节点查看和编辑属性", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "dragNodeHint": { - "zh-Hans": "拖拽节点到画布", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "trigger": { - "zh-Hans": "触发器", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Disparador", - "ru-RU": "Триггер", - "th-TH": "ทริกเกอร์", - "vi-VN": "Trình kích hoạt" - }, - "triggerDescription": { - "zh-Hans": "工作流的起始节点", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "messageTrigger": { - "zh-Hans": "消息触发", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "messageTriggerDescription": { - "zh-Hans": "当收到消息时触发", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "scheduleTrigger": { - "zh-Hans": "定时触发", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "scheduleTriggerDescription": { - "zh-Hans": "按计划定时触发", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "cronTrigger": { - "zh-Hans": "定时触发", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "cronTriggerDescription": { - "zh-Hans": "按定时计划触发工作流", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "webhookTrigger": { - "zh-Hans": "Webhook 触发", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Activador Webhook", - "ru-RU": "Триггер Webhook", - "th-TH": "ทริกเกอร์ Webhook", - "vi-VN": "Kích hoạt Webhook" - }, - "webhookTriggerDescription": { - "zh-Hans": "通过 HTTP 请求触发", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "eventTrigger": { - "zh-Hans": "事件触发", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "eventTriggerDescription": { - "zh-Hans": "当系统事件发生时触发", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "process": { - "zh-Hans": "AI/处理", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "IA/Procesamiento", - "ru-RU": "ИИ/Обработка", - "th-TH": "AI/การประมวลผล", - "vi-VN": "AI/Xử lý" - }, - "processDescription": { - "zh-Hans": "数据处理节点", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "aiProcess": { - "zh-Hans": "AI 处理", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Procesamiento IA", - "ru-RU": "Обработка ИИ", - "th-TH": "การประมวลผล AI", - "vi-VN": "Xử lý AI" - }, - "aiProcessDescription": { - "zh-Hans": "使用 AI 模型处理消息", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "llmCall": { - "zh-Hans": "LLM 调用", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "LLM Llamar", - "ru-RU": "LLM Вызвать", - "th-TH": "LLM เรียกใช้", - "vi-VN": "LLM Gọi" - }, - "llmCallDescription": { - "zh-Hans": "调用大语言模型进行对话或生成", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "codeProcess": { - "zh-Hans": "代码处理", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "codeProcessDescription": { - "zh-Hans": "执行自定义代码", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "codeExecutor": { - "zh-Hans": "代码执行", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "codeExecutorDescription": { - "zh-Hans": "执行 Python/JavaScript 代码", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "templateProcess": { - "zh-Hans": "模板处理", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Procesamiento de plantilla", - "ru-RU": "Обработка шаблона", - "th-TH": "การประมวลผลเทมเพลต", - "vi-VN": "Xử lý mẫu" - }, - "templateProcessDescription": { - "zh-Hans": "使用模板格式化输出", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "httpRequest": { - "zh-Hans": "HTTP 请求", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "httpRequestDescription": { - "zh-Hans": "发送 HTTP 请求", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "dataTransform": { - "zh-Hans": "数据转换", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "DatosTransformar", - "ru-RU": "ДанныеПреобразовать", - "th-TH": "ข้อมูลแปลง", - "vi-VN": "Dữ liệuChuyển đổi" - }, - "dataTransformDescription": { - "zh-Hans": "转换数据格式", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TransformarDatosFormato", - "ru-RU": "ПреобразоватьДанныеФормат", - "th-TH": "แปลงข้อมูลรูปแบบ", - "vi-VN": "Chuyển đổiDữ liệuĐịnh dạng" - }, - "questionClassifier": { - "zh-Hans": "问题分类器", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "PreguntaClasificador", - "ru-RU": "ВопросКлассификатор", - "th-TH": "คำถามตัวจำแนก", - "vi-VN": "Câu hỏiBộ phân loại" - }, - "questionClassifierDescription": { - "zh-Hans": "使用 LLM 将用户问题分类到预定义类别", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "parameterExtractor": { - "zh-Hans": "参数提取器", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "parameterExtractorDescription": { - "zh-Hans": "使用 LLM 从文本中提取结构化参数", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "knowledgeRetrieval": { - "zh-Hans": "知识库检索", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "knowledgeRetrievalDescription": { - "zh-Hans": "从知识库中检索相关内容", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "textTemplate": { - "zh-Hans": "文本模板", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "textTemplateDescription": { - "zh-Hans": "使用模板生成文本", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "jsonTransform": { - "zh-Hans": "JSON 转换", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "JSON Transformar", - "ru-RU": "JSON Преобразовать", - "th-TH": "JSON แปลง", - "vi-VN": "JSON Chuyển đổi" - }, - "jsonTransformDescription": { - "zh-Hans": "转换 JSON 数据", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Transformar JSON Datos", - "ru-RU": "Преобразовать JSON Данные", - "th-TH": "แปลง JSON ข้อมูล", - "vi-VN": "Chuyển đổi JSON Dữ liệu" - }, - "dataAggregator": { - "zh-Hans": "数据聚合", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "dataAggregatorDescription": { - "zh-Hans": "聚合多个数据源", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "textSplitter": { - "zh-Hans": "文本分割", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "textSplitterDescription": { - "zh-Hans": "将文本分割成块", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "variableAssignment": { - "zh-Hans": "变量赋值", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "variableAssignmentDescription": { - "zh-Hans": "为工作流变量赋值", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "control": { - "zh-Hans": "控制流", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Flujo de control", - "ru-RU": "Поток управления", - "th-TH": "การควบคุมโฟลว์", - "vi-VN": "Luồng điều khiển" - }, - "controlDescription": { - "zh-Hans": "流程控制节点", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "conditionDescription": { - "zh-Hans": "根据条件分流", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "switch": { - "zh-Hans": "多路分支", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "switchDescription": { - "zh-Hans": "多条件分支选择", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "loop": { - "zh-Hans": "循环", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Bucle", - "ru-RU": "Цикл", - "th-TH": "วนซ้ำ", - "vi-VN": "Vòng lặp" - }, - "loopDescription": { - "zh-Hans": "重复执行", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "iterator": { - "zh-Hans": "迭代器", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Iterador", - "ru-RU": "Итератор", - "th-TH": "ตัววนซ้ำ", - "vi-VN": "Bộ lặp" - }, - "iteratorDescription": { - "zh-Hans": "遍历数组元素", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "parallel": { - "zh-Hans": "并行处理", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "parallelDescription": { - "zh-Hans": "并行执行多个分支", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "wait": { - "zh-Hans": "等待", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Esperar", - "ru-RU": "Ожидание", - "th-TH": "รอ", - "vi-VN": "Chờ" - }, - "waitDescription": { - "zh-Hans": "等待指定时间", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "delay": { - "zh-Hans": "延迟", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Retraso", - "ru-RU": "Задержка", - "th-TH": "ความล่าช้า", - "vi-VN": "Trì hoãn" - }, - "delayDescription": { - "zh-Hans": "等待指定时间", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "merge": { - "zh-Hans": "合并", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Fusionar", - "ru-RU": "Объединить", - "th-TH": "รวม", - "vi-VN": "Hợp nhất" - }, - "mergeDescription": { - "zh-Hans": "合并多个分支", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "variableAggregator": { - "zh-Hans": "变量聚合器", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "variableAggregatorDescription": { - "zh-Hans": "聚合多个分支的变量输出", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "action": { - "zh-Hans": "动作", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Acción", - "ru-RU": "Действие", - "th-TH": "การดำเนินการ", - "vi-VN": "Hành động" - }, - "actionDescription": { - "zh-Hans": "执行动作的节点", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "sendMessage": { - "zh-Hans": "发送消息", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "EnviarMensaje", - "ru-RU": "ОтправитьСообщение", - "th-TH": "ส่งข้อความ", - "vi-VN": "GửiTin nhắn" - }, - "sendMessageDescription": { - "zh-Hans": "发送消息到平台", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "replyMessage": { - "zh-Hans": "回复消息", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "replyMessageDescription": { - "zh-Hans": "回复触发工作流的消息", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "storeData": { - "zh-Hans": "存储数据", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "AlmacenarDatos", - "ru-RU": "ХранитьДанные", - "th-TH": "จัดเก็บข้อมูล", - "vi-VN": "Lưu trữDữ liệu" - }, - "storeDataDescription": { - "zh-Hans": "存储数据到数据库", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "callPipeline": { - "zh-Hans": "调用 Pipeline", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Llamar Pipeline", - "ru-RU": "Вызвать Pipeline", - "th-TH": "เรียกใช้ Pipeline", - "vi-VN": "Gọi Pipeline" - }, - "callPipelineDescription": { - "zh-Hans": "调用现有的 Pipeline", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "setVariable": { - "zh-Hans": "设置变量", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "setVariableDescription": { - "zh-Hans": "设置上下文变量", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "openingStatement": { - "zh-Hans": "对话开场白", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "openingStatementDescription": { - "zh-Hans": "提供对话开场白和建议问题", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "end": { - "zh-Hans": "结束", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Fin", - "ru-RU": "Конец", - "th-TH": "สิ้นสุด", - "vi-VN": "Kết thúc" - }, - "endDescription": { - "zh-Hans": "标记工作流执行结束", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "log": { - "zh-Hans": "日志", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Registro", - "ru-RU": "Журнал", - "th-TH": "บันทึก", - "vi-VN": "Nhật ký" - }, - "logDescription": { - "zh-Hans": "记录日志信息", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "integration": { - "zh-Hans": "集成", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Integración", - "ru-RU": "Интеграция", - "th-TH": "การผสานรวม", - "vi-VN": "Tích hợp" - }, - "integrationDescription": { - "zh-Hans": "第三方平台集成节点", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "difyWorkflow": { - "zh-Hans": "Dify 工作流", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Dify Flujo de Trabajo", - "ru-RU": "Dify Рабочий Процесс", - "th-TH": "Dify เวิร์กโฟลว์", - "vi-VN": "Dify Quy trình" - }, - "difyWorkflowDescription": { - "zh-Hans": "调用 Dify 平台工作流", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "difyKnowledgeQuery": { - "zh-Hans": "Dify 知识库", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "difyKnowledgeQueryDescription": { - "zh-Hans": "查询 Dify 知识库", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "n8nWorkflow": { - "zh-Hans": "n8n 工作流", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "n8n Flujo de Trabajo", - "ru-RU": "n8n Рабочий Процесс", - "th-TH": "n8n เวิร์กโฟลว์", - "vi-VN": "n8n Quy trình" - }, - "n8nWorkflowDescription": { - "zh-Hans": "调用 n8n 工作流", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "langflowFlow": { - "zh-Hans": "Langflow 流程", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Flujo Langflow", - "ru-RU": "Поток Langflow", - "th-TH": "โฟลว์ Langflow", - "vi-VN": "Luồng Langflow" - }, - "langflowFlowDescription": { - "zh-Hans": "调用 Langflow 流程", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "cozeBot": { - "zh-Hans": "Coze Bot", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Bot Coze", - "ru-RU": "Бот Coze", - "th-TH": "บอท Coze", - "vi-VN": "Bot Coze" - }, - "cozeBotDescription": { - "zh-Hans": "调用扣子 Bot", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "databaseQuery": { - "zh-Hans": "数据库查询", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Base de DatosConsulta", - "ru-RU": "База ДанныхЗапрос", - "th-TH": "ฐานข้อมูลสอบถาม", - "vi-VN": "Cơ sở dữ liệuTruy vấn" - }, - "databaseQueryDescription": { - "zh-Hans": "执行数据库查询", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "redisOperation": { - "zh-Hans": "Redis 操作", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Redis Operación", - "ru-RU": "Redis Операция", - "th-TH": "Redis การดำเนินการ", - "vi-VN": "Redis Thao tác" - }, - "redisOperationDescription": { - "zh-Hans": "执行 Redis 缓存操作", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "mcpTool": { - "zh-Hans": "MCP 工具", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "MCP Herramienta", - "ru-RU": "MCP Инструмент", - "th-TH": "MCP เครื่องมือ", - "vi-VN": "MCP Công cụ" - }, - "mcpToolDescription": { - "zh-Hans": "调用 MCP 工具", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Llamar MCP Herramienta", - "ru-RU": "Вызвать MCP Инструмент", - "th-TH": "เรียกใช้ MCP เครื่องมือ", - "vi-VN": "Gọi MCP Công cụ" - }, - "memoryStore": { - "zh-Hans": "记忆存储", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "memoryStoreDescription": { - "zh-Hans": "从工作流记忆中存储和检索数据", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "startTime": { - "zh-Hans": "开始时间", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Hora de inicio", - "ru-RU": "Время начала", - "th-TH": "เวลาเริ่มต้น", - "vi-VN": "Thời gian bắt đầu" - }, - "running": { - "zh-Hans": "执行中", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "failed": { - "zh-Hans": "失败", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "falló", - "ru-RU": "не удалось", - "th-TH": "ล้มเหลว", - "vi-VN": "thất bại" - }, - "cancelled": { - "zh-Hans": "已取消", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Cancelado", - "ru-RU": "Отменено", - "th-TH": "ยกเลิกแล้ว", - "vi-VN": "Đã hủy" - }, - "viewDetails": { - "zh-Hans": "查看详情", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Ver detalles", - "ru-RU": "Просмотр деталей", - "th-TH": "ดูรายละเอียด", - "vi-VN": "Xem chi tiết" - }, - "cancel": { - "zh-Hans": "取消执行", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "CancelarEjecutar", - "ru-RU": "ОтменаВыполнить", - "th-TH": "ยกเลิกดำเนินการ", - "vi-VN": "HủyThực thi" - }, - "retry": { - "zh-Hans": "重试", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Reintentar", - "ru-RU": "Повторить", - "th-TH": "ลองใหม่", - "vi-VN": "Thử lại" - }, - "nodeResults": { - "zh-Hans": "节点执行结果", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "current": { - "zh-Hans": "当前版本", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "rollback": { - "zh-Hans": "回滚到此版本", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "rollbackConfirm": { - "zh-Hans": "确定回滚到此版本?当前更改将丢失。", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "rollbackSuccess": { - "zh-Hans": "回滚成功", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "rollbackError": { - "zh-Hans": "回滚失败:", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "mode": { - "zh-Hans": "调试模式", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "panel": { - "zh-Hans": "调试面板", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "start": { - "zh-Hans": "开始调试", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "InicioDepurar", - "ru-RU": "НачалоОтладка", - "th-TH": "เริ่มต้นดีบัก", - "vi-VN": "Bắt đầuGỡ lỗi" - }, - "pause": { - "zh-Hans": "暂停", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Pausar", - "ru-RU": "Приостановить", - "th-TH": "หยุดชั่วคราว", - "vi-VN": "Tạm dừng" - }, - "resume": { - "zh-Hans": "继续", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Continuar", - "ru-RU": "Продолжить", - "th-TH": "ดำเนินการต่อ", - "vi-VN": "Tiếp tục" - }, - "step": { - "zh-Hans": "单步执行", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "stop": { - "zh-Hans": "停止", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Detener", - "ru-RU": "Остановить", - "th-TH": "หยุด", - "vi-VN": "Dừng" - }, - "messageContentPlaceholder": { - "zh-Hans": "输入要模拟的消息内容", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "senderId": { - "zh-Hans": "发送者 ID", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "senderIdPlaceholder": { - "zh-Hans": "发送者唯一标识", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "senderName": { - "zh-Hans": "发送者名称", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Nombre del remitente", - "ru-RU": "Имя отправителя", - "th-TH": "ชื่อผู้ส่ง", - "vi-VN": "Tên người gửi" - }, - "senderNamePlaceholder": { - "zh-Hans": "发送者显示名称", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "platformPlaceholder": { - "zh-Hans": "例如 qq、wechat、telegram", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Ej: qq, wechat, telegram", - "ru-RU": "Напр: qq, wechat, telegram", - "th-TH": "เช่น qq, wechat, telegram", - "vi-VN": "VD: qq, wechat, telegram" - }, - "conversationId": { - "zh-Hans": "会话 ID", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Sesión ID", - "ru-RU": "Сессия ID", - "th-TH": "เซสชัน ID", - "vi-VN": "Phiên ID" - }, - "conversationIdPlaceholder": { - "zh-Hans": "会话唯一标识", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "isGroup": { - "zh-Hans": "群聊", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Chat grupal", - "ru-RU": "Групповой чат", - "th-TH": "แชทกลุ่ม", - "vi-VN": "Chat nhóm" - }, - "customVariables": { - "zh-Hans": "自定义变量", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "customVariablesDesc": { - "zh-Hans": "添加自定义变量用于调试", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "variableKey": { - "zh-Hans": "变量名", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "variableValue": { - "zh-Hans": "变量值", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "VariableValor", - "ru-RU": "ПеременнаяЗначение", - "th-TH": "ตัวแปรค่า", - "vi-VN": "BiếnGiá trị" - }, - "addVariable": { - "zh-Hans": "添加变量", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "AgregarVariable", - "ru-RU": "ДобавитьПеременная", - "th-TH": "เพิ่มตัวแปร", - "vi-VN": "ThêmBiến" - }, - "watchedVariables": { - "zh-Hans": "监控变量", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "noWatchedVariables": { - "zh-Hans": "暂无监控变量", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "addWatchVariable": { - "zh-Hans": "添加监控", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "nodeStates": { - "zh-Hans": "节点状态", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "nodeOutputs": { - "zh-Hans": "节点输出", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "NodoSalida", - "ru-RU": "УзелВыход", - "th-TH": "โหนดเอาต์พุต", - "vi-VN": "NútĐầu ra" - }, - "noNodeOutputs": { - "zh-Hans": "暂无节点输出", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "toggleBreakpoint": { - "zh-Hans": "切换断点", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "clearBreakpoints": { - "zh-Hans": "清除所有断点", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Limpiar todos los puntos de interrupción", - "ru-RU": "Очистить все точки останова", - "th-TH": "ล้างเบรกพอยต์ทั้งหมด", - "vi-VN": "Xóa tất cả điểm dừng" - }, - "breakpointSet": { - "zh-Hans": "断点已设置", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "breakpointRemoved": { - "zh-Hans": "断点已移除", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Punto de interrupción eliminado", - "ru-RU": "Точка останова удалена", - "th-TH": "ลบเบรกพอยต์แล้ว", - "vi-VN": "Đã xóa điểm dừng" - }, - "noLogs": { - "zh-Hans": "暂无日志", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "clearLogs": { - "zh-Hans": "清空日志", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "autoScroll": { - "zh-Hans": "自动滚动", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Desplazamiento automático", - "ru-RU": "Автопрокрутка", - "th-TH": "เลื่อนอัตโนมัติ", - "vi-VN": "Tự động cuộn" - }, - "logEntries": { - "zh-Hans": "条日志", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "resetContext": { - "zh-Hans": "重置上下文", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "starting": { - "zh-Hans": "正在启动调试执行...", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "started": { - "zh-Hans": "调试执行已启动 (ID: {{id}})", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "startError": { - "zh-Hans": "启动调试失败", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "unknownError": { - "zh-Hans": "未知错误", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "paused": { - "zh-Hans": "已暂停", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "pauseError": { - "zh-Hans": "暂停失败", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Pausarfalló", - "ru-RU": "Приостановитьне удалось", - "th-TH": "หยุดชั่วคราวล้มเหลว", - "vi-VN": "Tạm dừngthất bại" - }, - "resumed": { - "zh-Hans": "执行已恢复", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "resumeError": { - "zh-Hans": "恢复失败", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "steppedTo": { - "zh-Hans": "已执行到节点: {{node}}", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "stepError": { - "zh-Hans": "单步执行失败", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "stopped": { - "zh-Hans": "调试已停止", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "stopError": { - "zh-Hans": "停止失败", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Detenerfalló", - "ru-RU": "Остановитьне удалось", - "th-TH": "หยุดล้มเหลว", - "vi-VN": "Dừngthất bại" - }, - "debugMode": { - "zh-Hans": "调试模式", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "debugPanel": { - "zh-Hans": "调试面板", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "startDebug": { - "zh-Hans": "开始调试", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "InicioDepurar", - "ru-RU": "НачалоОтладка", - "th-TH": "เริ่มต้นดีบัก", - "vi-VN": "Bắt đầuGỡ lỗi" - }, - "pauseDebug": { - "zh-Hans": "暂停", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Pausar", - "ru-RU": "Приостановить", - "th-TH": "หยุดชั่วคราว", - "vi-VN": "Tạm dừng" - }, - "resumeDebug": { - "zh-Hans": "继续", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Continuar", - "ru-RU": "Продолжить", - "th-TH": "ดำเนินการต่อ", - "vi-VN": "Tiếp tục" - }, - "stepDebug": { - "zh-Hans": "单步执行", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "stopDebug": { - "zh-Hans": "停止", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Detener", - "ru-RU": "Остановить", - "th-TH": "หยุด", - "vi-VN": "Dừng" - }, - "debugContext": { - "zh-Hans": "调试上下文", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "simulatedMessage": { - "zh-Hans": "模拟消息", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "simulatedMessagePlaceholder": { - "zh-Hans": "输入要模拟的消息内容", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "variableName": { - "zh-Hans": "变量名", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "breakpoints": { - "zh-Hans": "断点", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Puntos de interrupción", - "ru-RU": "Точки останова", - "th-TH": "เบรกพอยต์", - "vi-VN": "Điểm dừng" - }, - "debugLogs": { - "zh-Hans": "调试日志", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "idle": { - "zh-Hans": "空闲", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Inactivo", - "ru-RU": "Простой", - "th-TH": "ว่าง", - "vi-VN": "Nhàn rỗi" - }, - "pending": { - "zh-Hans": "等待中", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "skipped": { - "zh-Hans": "已跳过", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "selectWorkflow": { - "zh-Hans": "选择工作流", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "SeleccionarFlujo de Trabajo", - "ru-RU": "ВыбратьРабочий Процесс", - "th-TH": "เลือกเวิร์กโฟลว์", - "vi-VN": "ChọnQuy trình" - }, - "sessionType": { - "zh-Hans": "会话类型", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "privateChat": { - "zh-Hans": "私聊", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Chat privado", - "ru-RU": "Личный чат", - "th-TH": "แชทส่วนตัว", - "vi-VN": "Chat riêng" - }, - "groupChat": { - "zh-Hans": "群聊", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Chat grupal", - "ru-RU": "Групповой чат", - "th-TH": "แชทกลุ่ม", - "vi-VN": "Chat nhóm" - }, - "send": { - "zh-Hans": "发送", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Enviar", - "ru-RU": "Отправить", - "th-TH": "ส่ง", - "vi-VN": "Gửi" - }, - "reset": { - "zh-Hans": "重置对话", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "inputPlaceholder": { - "zh-Hans": "发送 {{type}} 消息...", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Enviar {{type}} Mensaje...", - "ru-RU": "Отправить {{type}} Сообщение...", - "th-TH": "ส่ง {{type}} ข้อความ...", - "vi-VN": "Gửi {{type}} Tin nhắn..." - }, - "noMessages": { - "zh-Hans": "暂无消息", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "userMessage": { - "zh-Hans": "用户", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Usuario", - "ru-RU": "Пользователь", - "th-TH": "ผู้ใช้", - "vi-VN": "Người dùng" - }, - "botMessage": { - "zh-Hans": "机器人", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Bot", - "ru-RU": "Бот", - "th-TH": "บอท", - "vi-VN": "Bot" - }, - "sendFailed": { - "zh-Hans": "发送失败", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Enviarfalló", - "ru-RU": "Отправитьне удалось", - "th-TH": "ส่งล้มเหลว", - "vi-VN": "Gửithất bại" - }, - "resetSuccess": { - "zh-Hans": "对话已重置", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "resetFailed": { - "zh-Hans": "重置失败", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "loadMessagesFailed": { - "zh-Hans": "加载消息失败", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "CargarMensajefalló", - "ru-RU": "ЗагрузитьСообщениене удалось", - "th-TH": "โหลดข้อความล้มเหลว", - "vi-VN": "TảiTin nhắnthất bại" - }, - "loadWorkflowsFailed": { - "zh-Hans": "加载工作流失败", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "CargarFlujo de Trabajofalló", - "ru-RU": "ЗагрузитьРабочий Процессне удалось", - "th-TH": "โหลดเวิร์กโฟลว์ล้มเหลว", - "vi-VN": "TảiQuy trìnhthất bại" - }, - "atTips": { - "zh-Hans": "提及机器人", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Mencionar bot", - "ru-RU": "Упомянуть бота", - "th-TH": "กล่าวถึงบอท", - "vi-VN": "Nhắc đến bot" - }, - "streaming": { - "zh-Hans": "流式传输", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Transmisión", - "ru-RU": "Потоковая передача", - "th-TH": "การสตรีม", - "vi-VN": "Truyền phát" - }, - "streamOutput": { - "zh-Hans": "流式", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Streaming", - "ru-RU": "Потоковый", - "th-TH": "สตรีม", - "vi-VN": "Streaming" - }, - "connected": { - "zh-Hans": "WebSocket已连接", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "disconnected": { - "zh-Hans": "WebSocket未连接", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "connectionError": { - "zh-Hans": "WebSocket连接错误", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "connectionFailed": { - "zh-Hans": "WebSocket连接失败", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "notConnected": { - "zh-Hans": "WebSocket未连接,请稍后重试", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "imageUploadFailed": { - "zh-Hans": "图片上传失败", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "reply": { - "zh-Hans": "回复", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Responder", - "ru-RU": "Ответить", - "th-TH": "ตอบกลับ", - "vi-VN": "Trả lời" - }, - "replyTo": { - "zh-Hans": "回复给", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "showMarkdown": { - "zh-Hans": "渲染", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Renderizar", - "ru-RU": "Рендеринг", - "th-TH": "เรนเดอร์", - "vi-VN": "Hiển thị" - }, - "showRaw": { - "zh-Hans": "原文", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Texto sin formato", - "ru-RU": "Исходный текст", - "th-TH": "ข้อความดิบ", - "vi-VN": "Văn bản gốc" - }, - "allMembers": { - "zh-Hans": "全体成员", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Todos los miembros", - "ru-RU": "Все участники", - "th-TH": "สมาชิกทั้งหมด", - "vi-VN": "Tất cả thành viên" - }, - "file": { - "zh-Hans": "文件", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Archivo", - "ru-RU": "Файл", - "th-TH": "ไฟล์", - "vi-VN": "Tệp" - }, - "voice": { - "zh-Hans": "语音", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Voz", - "ru-RU": "Голос", - "th-TH": "เสียง", - "vi-VN": "Giọng nói" - }, - "uploadImage": { - "zh-Hans": "上传图片", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Subir imagen", - "ru-RU": "Загрузить изображение", - "th-TH": "อัปโหลดรูปภาพ", - "vi-VN": "Tải lên hình ảnh" - }, - "uploading": { - "zh-Hans": "上传中...", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Subiendo...", - "ru-RU": "Загрузка...", - "th-TH": "กำลังอัปโหลด...", - "vi-VN": "Đang tải lên..." - }, - "filterByDate": { - "zh-Hans": "按日期筛选", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "allTime": { - "zh-Hans": "全部时间", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "today": { - "zh-Hans": "今天", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Hoy", - "ru-RU": "Сегодня", - "th-TH": "วันนี้", - "vi-VN": "Hôm nay" - }, - "lastWeek": { - "zh-Hans": "最近一周", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Última semana", - "ru-RU": "Последняя неделя", - "th-TH": "สัปดาห์ที่แล้ว", - "vi-VN": "Tuần trước" - }, - "lastMonth": { - "zh-Hans": "最近一个月", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "showingExecutions": { - "zh-Hans": "显示 {{shown}} / {{total}} 条记录", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Mostrando {{shown}} / {{total}} registros", - "ru-RU": "Показано {{shown}} / {{total}} записей", - "th-TH": "แสดง {{shown}} / {{total}} รายการ", - "vi-VN": "Hiển thị {{shown}} / {{total}} bản ghi" - }, - "rerun": { - "zh-Hans": "重新运行", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "rerunExecution": { - "zh-Hans": "重新执行", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "details": { - "zh-Hans": "详情", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Detalles", - "ru-RU": "Детали", - "th-TH": "รายละเอียด", - "vi-VN": "Chi tiết" - }, - "completedAt": { - "zh-Hans": "完成时间", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "noNodeExecutions": { - "zh-Hans": "暂无节点执行记录", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "conditions": { - "zh-Hans": "触发条件", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "keyword_filter": { - "zh-Hans": "关键词过滤", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "regex_filter": { - "zh-Hans": "正则过滤", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Expresión RegularFiltrar", - "ru-RU": "Регулярное ВыражениеФильтр", - "th-TH": "นิพจน์ทั่วไปกรอง", - "vi-VN": "Biểu thức Chính quyLọc" - }, - "min_length": { - "zh-Hans": "最小长度", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "MínimoLongitud", - "ru-RU": "МинимумДлина", - "th-TH": "ต่ำสุดความยาว", - "vi-VN": "Tối thiểuĐộ dài" - }, - "max_length": { - "zh-Hans": "最大长度", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "MáximoLongitud", - "ru-RU": "МаксимумДлина", - "th-TH": "สูงสุดความยาว", - "vi-VN": "Tối đaĐộ dài" - }, - "require_mention": { - "zh-Hans": "需要@机器人", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Requiere mencionar bot", - "ru-RU": "Требуется упоминание бота", - "th-TH": "ต้องกล่าวถึงบอท", - "vi-VN": "Yêu cầu nhắc bot" - }, - "respond_rules": { - "zh-Hans": "群响应规则", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "access_control": { - "zh-Hans": "访问控制", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Control de acceso", - "ru-RU": "Контроль доступа", - "th-TH": "การควบคุมการเข้าถึง", - "vi-VN": "Kiểm soát truy cập" - }, - "cron": { - "zh-Hans": "Cron表达式", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Expresión Cron", - "ru-RU": "Выражение Cron", - "th-TH": "นิพจน์ Cron", - "vi-VN": "Biểu thức Cron" - }, - "timezone": { - "zh-Hans": "时区", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Zona horaria", - "ru-RU": "Часовой пояс", - "th-TH": "เขตเวลา", - "vi-VN": "Múi giờ" - }, - "path": { - "zh-Hans": "Webhook路径", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Ruta Webhook", - "ru-RU": "Путь Webhook", - "th-TH": "เส้นทาง Webhook", - "vi-VN": "Đường dẫn Webhook" - }, - "allowed_methods": { - "zh-Hans": "允许的HTTP方法", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "content_type": { - "zh-Hans": "Content-Type", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Content-Type", - "ru-RU": "Content-Type", - "th-TH": "Content-Type", - "vi-VN": "Content-Type" - }, - "auth_type": { - "zh-Hans": "认证方式", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Tipo de autenticación", - "ru-RU": "Тип аутентификации", - "th-TH": "ประเภทการยืนยันตัวตน", - "vi-VN": "Loại xác thực" - }, - "auth_key": { - "zh-Hans": "认证密钥", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Clave de autenticación", - "ru-RU": "Ключ аутентификации", - "th-TH": "คีย์การยืนยันตัวตน", - "vi-VN": "Khóa xác thực" - }, - "validation": { - "zh-Hans": "请求验证", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "timeout": { - "zh-Hans": "超时时间", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Tiempo de esperaTiempo", - "ru-RU": "Тайм-аутВремя", - "th-TH": "หมดเวลาเวลา", - "vi-VN": "Hết thời gianThời gian" - }, - "event_types": { - "zh-Hans": "事件类型", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Tipo de evento", - "ru-RU": "Тип события", - "th-TH": "ประเภทเหตุการณ์", - "vi-VN": "Loại sự kiện" - }, - "filter": { - "zh-Hans": "事件过滤", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "EventoFiltrar", - "ru-RU": "СобытиеФильтр", - "th-TH": "เหตุการณ์กรอง", - "vi-VN": "Sự kiệnLọc" - }, - "debounce_ms": { - "zh-Hans": "防抖时间", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "model": { - "zh-Hans": "模型", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Modelo", - "ru-RU": "Модель", - "th-TH": "โมเดล", - "vi-VN": "Mô hình" - }, - "prompt_template": { - "zh-Hans": "提示词模板", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "system_prompt": { - "zh-Hans": "系统提示词", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "temperature": { - "zh-Hans": "温度", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Temperatura", - "ru-RU": "Температура", - "th-TH": "อุณหภูมิ", - "vi-VN": "Nhiệt độ" - }, - "top_p": { - "zh-Hans": "Top P", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Top P", - "ru-RU": "Top P", - "th-TH": "Top P", - "vi-VN": "Top P" - }, - "frequency_penalty": { - "zh-Hans": "频率惩罚", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Penalización de frecuencia", - "ru-RU": "Штраф за частоту", - "th-TH": "การลงโทษความถี่", - "vi-VN": "Phạt tần suất" - }, - "presence_penalty": { - "zh-Hans": "存在惩罚", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Penalización de presencia", - "ru-RU": "Штраф за присутствие", - "th-TH": "การลงโทษการมีอยู่", - "vi-VN": "Phạt hiện diện" - }, - "max_tokens": { - "zh-Hans": "最大Token数", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "stop_sequences": { - "zh-Hans": "停止序列", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "seed": { - "zh-Hans": "随机种子", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Semilla aleatoria", - "ru-RU": "Случайное зерно", - "th-TH": "ค่า Seed", - "vi-VN": "Seed ngẫu nhiên" - }, - "stream": { - "zh-Hans": "流式输出", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "use_conversation_history": { - "zh-Hans": "使用对话历史", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "language": { - "zh-Hans": "编程语言", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Lenguaje de programación", - "ru-RU": "Язык программирования", - "th-TH": "ภาษาโปรแกรม", - "vi-VN": "Ngôn ngữ lập trình" - }, - "code": { - "zh-Hans": "代码", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Código", - "ru-RU": "Код", - "th-TH": "โค้ด", - "vi-VN": "Mã" - }, - "url": { - "zh-Hans": "请求URL", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "auth_config": { - "zh-Hans": "认证配置", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "transform_type": { - "zh-Hans": "转换类型", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "template": { - "zh-Hans": "模板", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Plantilla", - "ru-RU": "Шаблон", - "th-TH": "เทมเพลต", - "vi-VN": "Mẫu" - }, - "expression": { - "zh-Hans": "表达式", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Expresión", - "ru-RU": "Выражение", - "th-TH": "นิพจน์", - "vi-VN": "Biểu thức" - }, - "output_type": { - "zh-Hans": "输出类型", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "SalidaTipo", - "ru-RU": "ВыходТип", - "th-TH": "เอาต์พุตประเภท", - "vi-VN": "Đầu raLoại" - }, - "categories": { - "zh-Hans": "分类类别", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "instruction": { - "zh-Hans": "指令", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Instrucción", - "ru-RU": "Инструкция", - "th-TH": "คำสั่ง", - "vi-VN": "Chỉ thị" - }, - "knowledge_bases": { - "zh-Hans": "知识库", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "top_k": { - "zh-Hans": "返回数量", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Cantidad a devolver", - "ru-RU": "Количество возвращаемых", - "th-TH": "จำนวนที่ส่งคืน", - "vi-VN": "Số lượng trả về" - }, - "score_threshold": { - "zh-Hans": "相似度阈值", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "search_method": { - "zh-Hans": "搜索方法", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "enable_citations": { - "zh-Hans": "启用引用", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "condition_type": { - "zh-Hans": "条件类型", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "CondiciónTipo", - "ru-RU": "УсловиеТип", - "th-TH": "เงื่อนไขประเภท", - "vi-VN": "Điều kiệnLoại" - }, - "condition_expression": { - "zh-Hans": "条件表达式", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "left_value": { - "zh-Hans": "左值", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "operator": { - "zh-Hans": "比较运算符", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Operador de comparación", - "ru-RU": "Оператор сравнения", - "th-TH": "ตัวดำเนินการเปรียบเทียบ", - "vi-VN": "Toán tử so sánh" - }, - "right_value": { - "zh-Hans": "右值", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "cases": { - "zh-Hans": "分支条件", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "max_iterations": { - "zh-Hans": "最大迭代次数", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "break_condition": { - "zh-Hans": "中断条件", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "max_concurrency": { - "zh-Hans": "最大并发数", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "branches": { - "zh-Hans": "分支配置", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "wait_all": { - "zh-Hans": "等待所有", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "fail_fast": { - "zh-Hans": "快速失败", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "duration_type": { - "zh-Hans": "时间单位", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "merge_strategy": { - "zh-Hans": "合并策略", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "variable_mappings": { - "zh-Hans": "变量映射", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "aggregation_mode": { - "zh-Hans": "聚合模式", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Modo de agregación", - "ru-RU": "Режим агрегации", - "th-TH": "โหมดการรวม", - "vi-VN": "Chế độ tổng hợp" - }, - "target_type": { - "zh-Hans": "目标类型", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "target_id": { - "zh-Hans": "目标ID", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "ID de destino", - "ru-RU": "ID цели", - "th-TH": "ID เป้าหมาย", - "vi-VN": "ID đích" - }, - "message_type": { - "zh-Hans": "消息类型", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "MensajeTipo", - "ru-RU": "СообщениеТип", - "th-TH": "ข้อความประเภท", - "vi-VN": "Tin nhắnLoại" - }, - "reply_mode": { - "zh-Hans": "回复模式", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "message_template": { - "zh-Hans": "消息模板", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "long_text_processing": { - "zh-Hans": "长文本处理", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "force_delay": { - "zh-Hans": "强制延迟", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "pipeline_uuid": { - "zh-Hans": "流水线", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Pipeline", - "ru-RU": "Конвейер", - "th-TH": "ไปป์ไลน์", - "vi-VN": "Pipeline" - }, - "inherit_context": { - "zh-Hans": "继承上下文", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "storage_type": { - "zh-Hans": "存储类型", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "ttl": { - "zh-Hans": "过期时间", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "key_prefix": { - "zh-Hans": "键前缀", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "variable_name": { - "zh-Hans": "变量名称", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "VariableNombre", - "ru-RU": "ПеременнаяНазвание", - "th-TH": "ตัวแปรชื่อ", - "vi-VN": "BiếnTên" - }, - "variable_scope": { - "zh-Hans": "变量作用域", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "set_variable_operation": { - "zh-Hans": "操作类型", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "show_suggestions": { - "zh-Hans": "显示建议", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Mostrar sugerencias", - "ru-RU": "Показать предложения", - "th-TH": "แสดงคำแนะนำ", - "vi-VN": "Hiển thị gợi ý" - }, - "output_format": { - "zh-Hans": "输出格式", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "success_message": { - "zh-Hans": "成功消息", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "ÉxitoMensaje", - "ru-RU": "УспехСообщение", - "th-TH": "สำเร็จข้อความ", - "vi-VN": "Thành côngTin nhắn" - }, - "connection_type": { - "zh-Hans": "数据库类型", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "connection_string": { - "zh-Hans": "连接字符串", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "query_type": { - "zh-Hans": "查询类型", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "connection_url": { - "zh-Hans": "连接URL", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "ConectarURL", - "ru-RU": "ПодключитьURL", - "th-TH": "เชื่อมต่อURL", - "vi-VN": "Kết nốiURL" - }, - "operation": { - "zh-Hans": "操作类型", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "dataset_id": { - "zh-Hans": "知识库ID", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "escape_html": { - "zh-Hans": "转义HTML", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Escapar HTML", - "ru-RU": "Экранировать HTML", - "th-TH": "Escape HTML", - "vi-VN": "Escape HTML" - }, - "trim_whitespace": { - "zh-Hans": "去除空白", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Eliminar espacios en blanco", - "ru-RU": "Удалить пробелы", - "th-TH": "ลบช่องว่าง", - "vi-VN": "Loại bỏ khoảng trắng" - }, - "json_transform_type": { - "zh-Hans": "JSON转换类型", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "json_expression": { - "zh-Hans": "JSON表达式", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Expresión JSON", - "ru-RU": "Выражение JSON", - "th-TH": "นิพจน์ JSON", - "vi-VN": "Biểu thức JSON" - }, - "mapping": { - "zh-Hans": "字段映射", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "code_language": { - "zh-Hans": "编程语言", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Lenguaje de programación", - "ru-RU": "Язык программирования", - "th-TH": "ภาษาโปรแกรม", - "vi-VN": "Ngôn ngữ lập trình" - }, - "code_content": { - "zh-Hans": "代码内容", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "aggregation_type": { - "zh-Hans": "聚合类型", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "separator": { - "zh-Hans": "分隔符", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Separador", - "ru-RU": "Разделитель", - "th-TH": "ตัวคั่น", - "vi-VN": "Dấu phân cách" - }, - "field_path": { - "zh-Hans": "字段路径", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "split_type": { - "zh-Hans": "分割类型", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "chunk_size": { - "zh-Hans": "块大小", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Tamaño de bloque", - "ru-RU": "Размер блока", - "th-TH": "ขนาดบล็อก", - "vi-VN": "Kích thước khối" - }, - "chunk_overlap": { - "zh-Hans": "块重叠", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Superposición de bloques", - "ru-RU": "Перекрытие блоков", - "th-TH": "การทับซ้อนบล็อก", - "vi-VN": "Chồng lấp khối" - }, - "regex_pattern": { - "zh-Hans": "正则表达式", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "remove_empty": { - "zh-Hans": "移除空块", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Eliminar bloques vacíos", - "ru-RU": "Удалить пустые блоки", - "th-TH": "ลบบล็อกว่าง", - "vi-VN": "Xóa khối trống" - }, - "assign_variable_name": { - "zh-Hans": "变量名", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "value_type": { - "zh-Hans": "值类型", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "ValorTipo", - "ru-RU": "ЗначениеТип", - "th-TH": "ค่าประเภท", - "vi-VN": "Giá trịLoại" - }, - "static_value": { - "zh-Hans": "静态值", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "TODO", - "ru-RU": "TODO", - "th-TH": "TODO", - "vi-VN": "TODO" - }, - "n8n_webhook_url": { - "zh-Hans": "Webhook URL", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "URL de Webhook", - "ru-RU": "URL Webhook", - "th-TH": "URL Webhook", - "vi-VN": "URL Webhook" - }, - "n8n_auth_type": { - "zh-Hans": "认证方式", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "Tipo de autenticación", - "ru-RU": "Тип аутентификации", - "th-TH": "ประเภทการยืนยันตัวตน", - "vi-VN": "Loại xác thực" - }, - "langflow_flow_id": { - "zh-Hans": "流程ID", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "ID de flujo", - "ru-RU": "ID потока", - "th-TH": "ID โฟลว์", - "vi-VN": "ID luồng" - }, - "coze_bot_id": { - "zh-Hans": "机器人ID", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "ID de bot", - "ru-RU": "ID бота", - "th-TH": "ID บอท", - "vi-VN": "ID bot" - }, - "coze_api_base": { - "zh-Hans": "API基础URL", - "ja-JP": "TODO", - "zh-Hant": "TODO", - "es-ES": "URL base de API", - "ru-RU": "Базовый URL API", - "th-TH": "URL ฐาน API", - "vi-VN": "URL cơ sở API" - } - } -} \ No newline at end of file