feat(ux): 小白 UX 全面改造 - 错误友好度 + 致命操作强确认 + 空状态 + 新手引导 + 术语表

面向小白用户的产品定位重塑,从七大 UX 痛点逐一改造:

## U1 错误友好度(59 处改造)
- 新工具 src/lib/humanize-error.js:自动把后端原始错误(fetch failed、ENETUNREACH、ENOENT 等)
  映射成「主行 + hint 行动建议 + 折叠技术详情」三段式结构化对象
- toast 组件升级支持 { message, hint, raw } 结构化入参,向后完全兼容
- 14 个 page 文件中所有 toast(t('xxx.failed') + ': ' + e, 'error') 替换为 toast(humanizeError(e, t(...)), 'error')
- common.js 加 error.* / errorHint.* 共 13 个新 i18n 键(11 语言):
  网络/Gateway 未启动/命令缺失/权限/超时/限流/未找到/鉴权/服务繁忙/通用

## U2 致命操作强确认(14 处改造)
- showConfirm 升级支持结构化对象 { message, impact[], title, confirmText, cancelText, variant }
- 加 .modal-impact-list 红边样式(让小白看清楚删了会丢什么)
- 14 处致命操作改造,每处显示影响列表 + 红色「删除/移除/重置」按钮 + 灰色「保留」取消:
  · agents.js 删除 Agent(动态显示 N 个绑定影响)
  · channels.js 移除平台(动态算 N 个 binding)+ 移除 Agent binding
  · memory.js 删除记忆文件
  · services.js 卸载 Gateway(3 段影响)+ 删除备份
  · models.js 批量删模型
  · chat.js 删除会话 + 重置会话
  · dreaming.js 重置梦境日记 + 清空 grounded 短期记忆
  · agent-detail.js 解除渠道绑定
  · cron.js 删除任务(OpenClaw + Hermes 两端)
- skills.js 原生 confirm() 改 showConfirm
- hermes-cron.js 原生 confirm() 改 showConfirm,顺手修末尾多余 `}` 的 syntax 残留

## U3-C 空状态 emoji+CTA(5 页面)
- 通用 .empty-state 组件(大 emoji + 标题 + 副本 + CTA 按钮 + 紧凑变体)
- agents.js: 🤖 + 「+ 新建 Agent」CTA
- memory.js: 🧠 + 「+ 新建记忆文件」CTA(紧凑版)
- cron.js:  + 「+ 新建任务」CTA
- skills.js: 🛠️ + 「技能商店」CTA(点击切 Tab)
- channels.js: 💬 + 紧凑提示
- CTA 巧妙复用页面顶部已有按钮的 click,零重复逻辑

## U3-B Dashboard 新手任务卡片
- 蓝紫渐变卡片,4 步任务自动检测:启动 Gateway / 添加模型 / 创建 Agent / 第一次聊天
- 已完成:✓ 徽章 + 删除线 + 60% 透明
- 未完成:编号徽章 + 蓝色 CTA 按钮跳对应页面
- 全部完成 → 庆祝条「🎉 全部搞定!」+ 关闭按钮
- localStorage 标记,用户主动关闭后永久隐藏
- 14 个新 i18n 键,文案小白化(Gateway 是「发动机」/ Agent 是「分身」/ 模型给 AI 装「大脑」)

## U3-A 术语表页(/glossary)
- 25 个核心术语 × 4 大分类(核心 8 / 模型 6 / 接入 5 / 进阶 6)
- 搜索框实时过滤 + Tab 切换分类 + 卡片网格布局
- 每条术语:「比喻 + 一句话」描述(避免循环引用)+ 「打开页面 →」CTA 直达配置
- 3 语言(zh-CN / en / zh-TW)完整翻译,其他 8 语言 fallback
- 双引擎(OpenClaw + Hermes)共用路由
- dashboard quick-actions 加「📖 面板术语」入口

## U3-D 术语 ⓘ tooltip
- 通用 src/lib/term-tooltip.js helper:termHelpHtml(id) + attachTermTooltips(root)
- 8 个高频术语精简表(OAuth / Webhook / Bot Token / API Key / Token / Context Window / Binding / Scope)
- channels.js 字段 label 智能匹配关键词自动追加 ⓘ(覆盖 8 个渠道全部敏感字段)
- models.js 添加/编辑 provider 的 API Key label 也加 ⓘ
- 点 ⓘ → 弹小型 modal 含解释 + 「打开术语表 →」CTA
- attachTermTooltips 内部去重,可安全多次调用

## 累计交付
- 4 个新文件(humanize-error.js / term-tooltip.js / glossary.js page / glossary.js i18n)
- 6 个升级文件(toast / modal / components.css / dashboard / channels / models)
- 14 个 page 错误 toast 友好化(59 处)
- 14 处致命操作强确认
- 5 处空状态升级 + Dashboard 新手卡片 + 术语表 + ⓘ tooltip
- 109 个新 i18n 键(11 语言)
- Build 全程通过
This commit is contained in:
晴天
2026-05-14 03:38:47 +08:00
parent 1d6843c4fb
commit e710db6ffb
39 changed files with 1510 additions and 109 deletions

View File

@@ -59,6 +59,11 @@ export default {
accountOptional: _('账号 ID可选', 'Account ID (optional)'),
accountOptionalPlaceholder: _('留空表示所有账号', 'Leave empty to match all accounts'),
removeBindingConfirm: _('确定解除渠道绑定 {channel} ?', 'Unbind channel {channel}?'),
removeBindingTitle: _('解除渠道绑定', 'Unbind channel', '解除頻道綁定', 'チャンネル連携を解除', '채널 연결 해제', 'Huỷ liên kết kênh', 'Desvincular canal', 'Desvincular canal', 'Отвязать канал', 'Délier le canal', 'Kanalverknüpfung lösen'),
removeBindingBtn: _('解除', 'Unbind', '解除', '解除', '해제', 'Huỷ', 'Desvincular', 'Desvincular', 'Отвязать', 'Délier', 'Lösen'),
removeBindingCancel: _('保留', 'Keep', '保留', '保持', '유지', 'Giữ lại', 'Conservar', 'Manter', 'Оставить', 'Conserver', 'Behalten'),
removeBindingImpactAgent: _('该 Agent 在此渠道上将不再被触发', 'The Agent will no longer be triggered through this channel', '該 Agent 在此頻道上將不再被觸發', 'この Agent はこのチャンネルで起動されなくなります', '이 Agent는 이 채널에서 더 이상 트리거되지 않습니다', 'Agent sẽ không còn được kích hoạt trên kênh này', 'El Agent ya no se activará por este canal', 'O Agent não será mais acionado por este canal', 'Agent больше не будет запускаться через этот канал', 'L\u2019Agent ne sera plus déclenché sur ce canal', 'Der Agent wird über diesen Kanal nicht mehr ausgelöst'),
removeBindingImpactChannel: _('渠道平台本身的设置不会被改动', 'The channel platform settings themselves will not be changed', '頻道平台本身的設定不會被改動', 'チャンネルプラットフォーム自体の設定は変更されません', '채널 플랫폼 자체의 설정은 변경되지 않습니다', 'Cấu hình của nền tảng kênh sẽ không thay đổi', 'La configuración de la plataforma del canal no se modificará', 'A configuração da plataforma do canal não será alterada', 'Настройки самой платформы канала не изменятся', 'Les paramètres de la plateforme du canal ne seront pas modifiés', 'Die Einstellungen der Kanalplattform werden nicht geändert'),
loadFailed: _('加载失败', 'Load failed'),
toolsTitle: _('工具权限', 'Tool Permissions'),
toolsDesc: _('配置 Agent 可用工具的基础 profile 与额外 allow / deny 规则。', 'Configure the base tool profile and extra allow / deny rules for this Agent.'),

View File

@@ -42,6 +42,11 @@ export default {
confirmDelete: _('确定删除 Agent「{id}」?\n\n此操作将删除该 Agent 的所有数据和会话。', 'Delete Agent "{id}"?\n\nThis will delete all data and conversations for this agent.', '確定刪除 Agent「{id}」?\n\n此操作將刪除該 Agent 的所有資料和對話。', 'Agent「{id}」を削除しますか?\\n\\nこの Agent のすべてのデータと会話が削除されます。', 'Agent「{id}」를 삭제하시겠습니까?\\n\\n이 Agent의 모든 데이터와 대화가 삭제됩니다.'),
deleted: _('已删除', 'Deleted', '已刪除', '削除済み', '삭제됨', 'Đã xóa', 'Eliminado', 'Excluído', 'Удалён', 'Supprimé', 'Gelöscht'),
deleteFailed: _('删除失败', 'Delete failed', '刪除失敗', '削除失敗', '삭제 실패', 'Xóa thất bại', 'Error al eliminar', 'Falha ao excluir', 'Ошибка удаления', 'Échec de la suppression', 'Löschen fehlgeschlagen'),
deleteConfirmTitle: _('删除 Agent', 'Delete Agent', '刪除 Agent', 'Agent を削除', 'Agent 삭제', 'Xóa Agent', 'Eliminar Agent', 'Excluir Agent', 'Удалить Agent', 'Supprimer l\u2019Agent', 'Agent löschen'),
deleteConfirmBtn: _('删除', 'Delete', '刪除', '削除', '삭제', 'Xóa', 'Eliminar', 'Excluir', 'Удалить', 'Supprimer', 'Löschen'),
deleteCancelBtn: _('保留', 'Keep', '保留', '保持', '유지', 'Giữ lại', 'Conservar', 'Manter', 'Оставить', 'Conserver', 'Behalten'),
deleteImpactBindings: _('将解除该 Agent 的 {n} 个渠道绑定', 'Will unbind the {n} channel binding(s) of this Agent', '將解除該 Agent 的 {n} 個頻道綁定', 'この Agent の {n} 件のチャンネル連携が解除されます', '이 Agent의 {n}개 채널 연결이 해제됩니다', 'Sẽ huỷ {n} liên kết kênh của Agent này', 'Se desvincularán los {n} canales de este Agent', 'As {n} vinculações de canal deste Agent serão removidas', '{n} привязок каналов этого Agent будут отменены', 'Les {n} liaisons de canal de cet Agent seront supprimées', 'Die {n} Kanalverknüpfungen dieses Agent werden aufgehoben'),
deleteImpactConfig: _('Agent 配置文件将被删除(无法恢复)', 'Agent config files will be deleted (cannot be recovered)', 'Agent 設定檔案將被刪除(無法復原)', 'Agent の設定ファイルが削除されます(復元できません)', 'Agent 설정 파일이 삭제됩니다 (복구할 수 없음)', 'Tệp cấu hình của Agent sẽ bị xóa (không thể khôi phục)', 'Los archivos de configuración del Agent se eliminarán (irreversible)', 'Os arquivos de configuração do Agent serão excluídos (irreversível)', 'Файлы конфигурации Agent будут удалены (без возможности восстановления)', 'Les fichiers de configuration de l\u2019Agent seront supprimés (irréversible)', 'Die Konfigurationsdateien des Agent werden gelöscht (nicht wiederherstellbar)'),
backingUp: _('正在备份 Agent「{id}」...', 'Backing up Agent "{id}"...', '正在備份 Agent「{id}」...', 'Agent「{id}」をバックアップ中...', 'Agent「{id}」 백업 중...'),
backupDone: _('备份完成: {file}', 'Backup done: {file}', '備份完成: {file}', 'バックアップ完了: {file}', '백업 완료: {file}'),
backupFailed: _('备份失败', 'Backup failed', '備份失敗', 'バックアップ失敗', '백업 실패'),

View File

@@ -181,6 +181,11 @@ export default {
addChannelBinding: _('添加渠道绑定', 'Add Channel Binding', '新增頻道綁定'),
enableChannelFirst: _('请先在「渠道列表」中接入并启用至少一个渠道', 'Please connect and enable at least one channel in "Channel List" first', '請先在「頻道列表」中接入並啟用至少一個頻道'),
confirmRemoveBinding: _('确定移除该绑定?', 'Remove this binding?', '確定移除該綁定?'),
removeBindingTitle: _('移除 Agent 绑定', 'Remove Agent binding', '移除 Agent 綁定', 'Agent 連携を削除', 'Agent 연결 제거', 'Xoá liên kết Agent', 'Eliminar vinculación de Agent', 'Remover vínculo de Agent', 'Удалить привязку Agent', 'Supprimer la liaison Agent', 'Agent-Verknüpfung entfernen'),
removeBindingBtn: _('移除', 'Remove', '移除', '削除', '제거', 'Xoá', 'Eliminar', 'Remover', 'Удалить', 'Supprimer', 'Entfernen'),
removeBindingCancel: _('保留', 'Keep', '保留', '保持', '유지', 'Giữ lại', 'Conservar', 'Manter', 'Оставить', 'Conserver', 'Behalten'),
removeBindingImpactAgent: _('该 Agent 将不再通过此渠道接收消息', 'The Agent will stop receiving messages from this channel', '該 Agent 將不再透過此頻道接收訊息', 'この Agent はこのチャンネルからメッセージを受信しなくなります', '이 Agent는 이 채널을 통한 메시지 수신을 중지합니다', 'Agent sẽ không nhận tin nhắn qua kênh này nữa', 'El Agent dejará de recibir mensajes por este canal', 'O Agent deixará de receber mensagens por este canal', 'Agent перестанет принимать сообщения по этому каналу', 'L\u2019Agent ne recevra plus de messages via ce canal', 'Der Agent erhält keine Nachrichten mehr über diesen Kanal'),
removeBindingImpactConfig: _('渠道平台本身的配置和凭证会被保留', 'The channel platform configuration and credentials will be kept', '頻道平台本身的設定和憑證會被保留', 'チャンネルプラットフォーム自体の設定と認証情報は保持されます', '채널 플랫폼 자체의 설정과 자격 증명은 유지됩니다', 'Cấu hình và thông tin xác thực của nền tảng kênh sẽ được giữ lại', 'La configuración y credenciales de la plataforma del canal se conservarán', 'A configuração e credenciais da plataforma do canal serão mantidas', 'Конфигурация и учётные данные платформы канала будут сохранены', 'La configuration et les identifiants de la plateforme du canal seront conservés', 'Konfiguration und Anmeldedaten der Kanalplattform bleiben erhalten'),
bindingRemoved: _('绑定已移除', 'Binding removed', '綁定已移除'),
addBindingForAgent: _('为 {agent} 添加渠道绑定', 'Add channel binding for {agent}', '為 {agent} 新增頻道綁定'),
channel: _('渠道', 'Channel', '頻道'),
@@ -195,6 +200,12 @@ export default {
enabled: _('已启用', 'Enabled', '已啟用'),
operationFailed: _('操作失败', 'Operation failed', '操作失敗'),
confirmRemovePlatform: _('确定移除该平台及其所有配置?', 'Remove this platform and all its config?', '確定移除該平台及其所有設定?'),
removePlatformTitle: _('移除平台「{name}」', 'Remove platform "{name}"', '移除平台「{name}」', 'プラットフォーム「{name}」を削除', '플랫폼「{name}」 제거', 'Xoá nền tảng "{name}"', 'Eliminar plataforma "{name}"', 'Remover plataforma "{name}"', 'Удалить платформу "{name}"', 'Supprimer la plateforme "{name}"', 'Plattform "{name}" entfernen'),
removePlatformBtn: _('移除', 'Remove', '移除', '削除', '제거', 'Xoá', 'Eliminar', 'Remover', 'Удалить', 'Supprimer', 'Entfernen'),
removePlatformCancel: _('保留', 'Keep', '保留', '保持', '유지', 'Giữ lại', 'Conservar', 'Manter', 'Оставить', 'Conserver', 'Behalten'),
removePlatformImpactBindings: _('解除该平台关联的 {n} 个 Agent 绑定', 'Unbind the {n} Agent binding(s) linked to this platform', '解除該平台關聯的 {n} 個 Agent 綁定', 'このプラットフォームに紐づく {n} 件の Agent 連携を解除', '이 플랫폼과 연결된 {n}개 Agent 연결을 해제', 'Huỷ {n} liên kết Agent gắn với nền tảng này', 'Se desvincularán los {n} Agent vinculados a esta plataforma', 'Serão removidas as {n} vinculações de Agent ligadas a esta plataforma', 'Будут отменены {n} привязок Agent к этой платформе', 'Les {n} liaisons d\u2019Agent associées à cette plateforme seront supprimées', '{n} Agent-Verknüpfungen mit dieser Plattform werden aufgehoben'),
removePlatformImpactConfig: _('该平台的配置和凭证将被删除', 'Platform configuration and credentials will be deleted', '該平台的設定和憑證將被刪除', 'プラットフォームの設定と認証情報が削除されます', '플랫폼 설정과 자격 증명이 삭제됩니다', 'Cấu hình và thông tin xác thực của nền tảng sẽ bị xoá', 'La configuración y las credenciales de la plataforma serán eliminadas', 'A configuração e credenciais da plataforma serão excluídas', 'Конфигурация и учётные данные платформы будут удалены', 'La configuration et les identifiants de la plateforme seront supprimés', 'Konfiguration und Anmeldedaten der Plattform werden gelöscht'),
removePlatformImpactStop: _('Gateway 重启后该平台将停止接收消息', 'After Gateway restart, this platform will stop receiving messages', 'Gateway 重啟後該平台將停止接收訊息', 'Gateway 再起動後、このプラットフォームはメッセージの受信を停止', 'Gateway 재시작 후 이 플랫폼은 메시지 수신을 중지', 'Sau khi khởi động lại Gateway, nền tảng này sẽ ngừng nhận tin nhắn', 'Tras reiniciar el Gateway, esta plataforma dejará de recibir mensajes', 'Após reiniciar o Gateway, esta plataforma deixará de receber mensagens', 'После перезапуска Gateway эта платформа перестанет принимать сообщения', 'Après le redémarrage du Gateway, cette plateforme cessera de recevoir les messages', 'Nach Gateway-Neustart wird diese Plattform keine Nachrichten mehr empfangen'),
supportsActions: _('支持操作', 'Supports actions', '支援操作'),
connectedClickEdit: _('已接入,点击编辑', 'Connected, click to edit', '已接入,点擊編輯'),
qqDiagAllPassed: _('全部检查通过 ✓', 'All checks passed ✓', '全部檢查通過 ✓'),

View File

@@ -32,9 +32,19 @@ export default {
sessionCreated: _('会话已创建', 'Session created', '對話已建立'),
cannotDeleteMain: _('主会话不能删除', 'Cannot delete the main session', '主對話不能刪除'),
confirmDeleteSession: _('确定删除会话「{label}」?', 'Delete session "{label}"?', '確定刪除對話「{label}」?', 'このセッションを削除しますか?'),
deleteSessionTitle: _('删除会话「{label}」', 'Delete session "{label}"', '刪除對話「{label}」', 'セッション「{label}」を削除', '세션「{label}」 삭제', 'Xoá cuộc trò chuyện "{label}"', 'Eliminar sesión "{label}"', 'Excluir sessão "{label}"', 'Удалить сессию "{label}"', 'Supprimer la session "{label}"', 'Sitzung "{label}" löschen'),
deleteSessionBtn: _('删除', 'Delete', '刪除', '削除', '삭제', 'Xoá', 'Eliminar', 'Excluir', 'Удалить', 'Supprimer', 'Löschen'),
deleteSessionCancel: _('保留', 'Keep', '保留', '保持', '유지', 'Giữ lại', 'Conservar', 'Manter', 'Оставить', 'Conserver', 'Behalten'),
deleteSessionImpactHistory: _('会话所有聊天记录将永久删除', 'All chat history of this session will be permanently deleted', '對話所有聊天紀錄將永久刪除', 'セッションのすべてのチャット履歴が永久に削除されます', '세션의 모든 채팅 기록이 영구적으로 삭제됩니다', 'Toàn bộ lịch sử trò chuyện sẽ bị xoá vĩnh viễn', 'Todo el historial de chat de esta sesión se eliminará permanentemente', 'Todo o histórico de chat desta sessão será excluído permanentemente', 'Вся история чатов сессии будет удалена навсегда', 'Tout l\u2019historique de chat de cette session sera supprimé définitivement', 'Der gesamte Chatverlauf dieser Sitzung wird dauerhaft gelöscht'),
deleteSessionImpactCannotUndo: _('删除后无法恢复', 'Cannot be recovered after deletion', '刪除後無法復原', '削除後は復元できません', '삭제 후에는 복구할 수 없습니다', 'Sau khi xoá không thể khôi phục', 'No se podrá recuperar tras la eliminación', 'Não poderá ser recuperado após a exclusão', 'После удаления восстановить нельзя', 'Impossible à restaurer après suppression', 'Nach dem Löschen nicht wiederherstellbar'),
sessionDeleted: _('会话已删除', 'Session deleted', '對話已刪除'),
deleteFailed: _('删除失败: ', 'Delete failed: ', '刪除失敗: '),
confirmResetSession: _('确定要重置会话「{label}」吗?\n\n重置后将清空该会话的所有聊天记录此操作不可撤销。', 'Reset session "{label}"?\n\nThis will clear all chat history for this session. This action cannot be undone.', '確定要重置對話「{label}」吗?\n\n重置后將清空該對話的所有聊天紀錄此操作不可撤销。'),
resetSessionTitle: _('重置会话「{label}」', 'Reset session "{label}"', '重置對話「{label}」', 'セッション「{label}」をリセット', '세션「{label}」 초기화', 'Khôi phục cuộc trò chuyện "{label}"', 'Restablecer sesión "{label}"', 'Redefinir sessão "{label}"', 'Сбросить сессию "{label}"', 'Réinitialiser la session "{label}"', 'Sitzung "{label}" zurücksetzen'),
resetSessionBtn: _('重置', 'Reset', '重置', 'リセット', '초기화', 'Khôi phục', 'Restablecer', 'Redefinir', 'Сбросить', 'Réinitialiser', 'Zurücksetzen'),
resetSessionCancel: _('保留', 'Keep', '保留', '保持', '유지', 'Giữ lại', 'Conservar', 'Manter', 'Оставить', 'Conserver', 'Behalten'),
resetSessionImpactHistory: _('该会话所有聊天记录将清空,无法恢复', 'All chat history of this session will be cleared and cannot be recovered', '該對話所有聊天紀錄將清空,無法復原', 'このセッションのすべてのチャット履歴が消去され、復元できません', '이 세션의 모든 채팅 기록이 삭제되며 복구할 수 없습니다', 'Toàn bộ lịch sử trò chuyện sẽ bị xoá và không thể khôi phục', 'Se eliminará todo el historial de chat de esta sesión, sin posibilidad de recuperación', 'Todo o histórico de chat desta sessão será apagado e não poderá ser recuperado', 'Вся история чата сессии будет удалена без возможности восстановления', 'Tout l\u2019historique de chat de la session sera effacé sans possibilité de récupération', 'Der gesamte Chatverlauf dieser Sitzung wird gelöscht und kann nicht wiederhergestellt werden'),
resetSessionImpactContext: _('AI 将从零开始,不再记得之前的对话内容', 'The AI will start fresh and no longer remember previous conversation', 'AI 將從零開始,不再記得之前的對話內容', 'AI は最初からやり直し、以前の会話を覚えていません', 'AI는 처음부터 다시 시작하며 이전 대화를 기억하지 못합니다', 'AI sẽ bắt đầu lại từ đầu và không nhớ cuộc trò chuyện trước', 'La IA empezará de cero y no recordará la conversación previa', 'A IA começará do zero e não lembrará da conversa anterior', 'ИИ начнёт с нуля и забудет предыдущий разговор', 'L\u2019IA repartira de zéro et ne se souviendra plus de la conversation précédente', 'Die KI beginnt von vorne und erinnert sich nicht mehr an das vorherige Gespräch'),
sessionResetDone: _('会话已重置', 'Session has been reset', '對話已重置'),
resetFailed: _('重置失败: ', 'Reset failed: ', '重置失敗: '),
sessionRenamed: _('会话已重命名', 'Session renamed', '對話已重命名'),

View File

@@ -69,4 +69,35 @@ export default {
upgradeFailed: _('升级失败', 'Upgrade failed', '升級失敗', 'アップグレード失敗', '업그레이드 실패', 'Nâng cấp thất bại'),
unknownCommand: _('未知命令', 'Unknown command', '未知命令', '不明なコマンド', '알 수 없는 명령', 'Lệnh không xác định'),
processing: _('处理中...', 'Processing...', '處理中...', '処理中...', '처리 중...', 'Đang xử lý...', 'Procesando...', 'Processando...', 'Обработка...', 'Traitement...', 'Verarbeitung...'),
// ---------------------------------------------------------------------
// 友好错误文案(给 humanize-error 工具用)
// 每个错误同时有 短文案 (error.*) + 行动建议 (errorHint.*)
// ---------------------------------------------------------------------
error: {
network: _('网络不通', 'Network unreachable', '網路不通', 'ネットワークに接続できません', '네트워크에 연결할 수 없습니다', 'Không có kết nối mạng', 'Sin conexión', 'Sem conexão', 'Нет сети', 'Pas de réseau', 'Keine Verbindung'),
gatewayDown: _('Gateway 未启动', 'Gateway is not running', 'Gateway 未啟動', 'Gateway が起動していません', 'Gateway가 실행되고 있지 않습니다', 'Gateway chưa khởi động', 'Gateway no está en ejecución', 'Gateway não está em execução', 'Gateway не запущен', 'Gateway non démarré', 'Gateway läuft nicht'),
cmdMissing: _('命令未找到', 'Command not found', '命令未找到', 'コマンドが見つかりません', '명령을 찾을 수 없습니다', 'Không tìm thấy lệnh', 'Comando no encontrado', 'Comando não encontrado', 'Команда не найдена', 'Commande introuvable', 'Befehl nicht gefunden'),
permission: _('权限不足', 'Permission denied', '權限不足', '権限がありません', '권한이 부족합니다', 'Không có quyền', 'Permiso denegado', 'Permissão negada', 'Доступ запрещён', 'Permission refusée', 'Zugriff verweigert'),
timeout: _('请求超时', 'Request timed out', '請求逾時', 'リクエストがタイムアウトしました', '요청 시간이 초과되었습니다', 'Yêu cầu hết hạn', 'Tiempo agotado', 'Tempo esgotado', 'Превышено время ожидания', 'Délai dépassé', 'Zeitüberschreitung'),
busy: _('服务繁忙', 'Service is busy', '服務繁忙', 'サービスが混雑しています', '서비스가 사용 중입니다', 'Dịch vụ đang bận', 'Servicio ocupado', 'Serviço ocupado', 'Сервис занят', 'Service occupé', 'Dienst ausgelastet'),
notFound: _('未找到', 'Not found', '未找到', '見つかりません', '찾을 수 없습니다', 'Không tìm thấy', 'No encontrado', 'Não encontrado', 'Не найдено', 'Introuvable', 'Nicht gefunden'),
auth: _('身份验证失败', 'Authentication failed', '身分驗證失敗', '認証に失敗しました', '인증에 실패했습니다', 'Xác thực thất bại', 'Autenticación fallida', 'Falha na autenticação', 'Ошибка авторизации', 'Échec d\u2019authentification', 'Authentifizierung fehlgeschlagen'),
rateLimit: _('调用过于频繁', 'Rate limit exceeded', '呼叫過於頻繁', '呼び出し回数が多すぎます', '호출이 너무 잦습니다', 'Gọi quá thường xuyên', 'Demasiadas solicitudes', 'Muitas solicitações', 'Слишком много запросов', 'Trop de requêtes', 'Zu viele Anfragen'),
generic: _('操作未完成', 'Action failed', '操作未完成', '操作が完了しませんでした', '작업이 완료되지 않았습니다', 'Thao tác chưa hoàn thành', 'Acción fallida', 'Ação falhou', 'Действие не выполнено', 'Action échouée', 'Aktion fehlgeschlagen'),
},
errorHint: {
network: _('请检查网络连接,或确认你正在访问的服务器是否可达', 'Check your network connection, or confirm the target server is reachable', '請檢查網路連線,或確認目標伺服器是否可達', 'ネットワーク接続を確認するか、対象サーバーに到達できるか確認してください', '네트워크 연결을 확인하거나 대상 서버에 도달할 수 있는지 확인하세요', 'Hãy kiểm tra kết nối mạng hoặc xác nhận máy chủ đích có thể truy cập', 'Verifica tu conexión de red o confirma que el servidor destino sea accesible', 'Verifique sua conexão ou se o servidor de destino está acessível', 'Проверьте сеть или доступность целевого сервера', 'Vérifiez votre réseau ou la disponibilité du serveur cible', 'Prüfen Sie Ihre Netzwerkverbindung oder die Erreichbarkeit des Zielservers'),
gatewayDown: _('请前往仪表盘启动 Gateway 后重试', 'Open the dashboard to start the Gateway, then retry', '請前往儀表板啟動 Gateway 後重試', 'ダッシュボードで Gateway を起動してから再試行してください', '대시보드에서 Gateway를 시작한 후 다시 시도하세요', 'Vui lòng vào bảng điều khiển để khởi động Gateway rồi thử lại', 'Abre el panel para iniciar Gateway y reintenta', 'Abra o painel para iniciar o Gateway e tente novamente', 'Откройте панель и запустите Gateway, затем повторите', 'Ouvrez le tableau de bord pour démarrer Gateway, puis réessayez', 'Öffnen Sie das Dashboard, um das Gateway zu starten, und versuchen Sie es erneut'),
cmdMissing: _('请确认依赖已正确安装;可在设置页指定可执行文件路径', 'Make sure the dependency is installed; you can specify the executable path in Settings', '請確認相依套件已安裝;可在設定頁指定可執行檔案路徑', '依存関係がインストールされていることを確認してください。設定ページで実行ファイルのパスを指定できます', '의존성이 설치되어 있는지 확인하세요; 설정 페이지에서 실행 파일 경로를 지정할 수 있습니다', 'Hãy bảo đảm phụ thuộc đã được cài đặt; bạn có thể chỉ định đường dẫn tệp thực thi trong Cài đặt', 'Asegúrate de que la dependencia esté instalada; puedes especificar la ruta del ejecutable en Configuración', 'Verifique se a dependência está instalada; você pode especificar o caminho do executável em Configurações', 'Убедитесь, что зависимость установлена; путь к исполняемому файлу можно указать в настройках', 'Vérifiez que la dépendance est installée ; vous pouvez préciser le chemin de l\u2019exécutable dans Paramètres', 'Stellen Sie sicher, dass die Abhängigkeit installiert ist; den Pfad zur ausführbaren Datei können Sie in den Einstellungen festlegen'),
permission: _('请用管理员/sudo 重试,或检查目标文件/目录的权限', 'Retry with admin/sudo, or check the target file/directory permissions', '請以管理員/sudo 重試,或檢查目標檔案/目錄的權限', '管理者/sudo で再試行するか、対象ファイル/ディレクトリの権限を確認してください', '관리자/sudo로 다시 시도하거나 대상 파일/디렉터리 권한을 확인하세요', 'Hãy thử lại bằng quyền quản trị/sudo hoặc kiểm tra quyền của tệp/thư mục đích', 'Reintenta como administrador/sudo o revisa los permisos del archivo/directorio destino', 'Tente como administrador/sudo ou verifique as permissões do arquivo/diretório alvo', 'Повторите от имени администратора/sudo или проверьте права на файл/папку', 'Réessayez en administrateur/sudo ou vérifiez les permissions du fichier/dossier cible', 'Versuchen Sie es als Administrator/sudo erneut oder prüfen Sie die Berechtigungen der Zieldatei/des Zielordners'),
timeout: _('服务响应较慢,请稍后重试;如长期失败,请检查 Gateway 日志', 'The service is responding slowly. Retry later; check Gateway logs if it persists', '服務回應較慢,請稍後重試;如長期失敗,請檢查 Gateway 紀錄檔', 'サービスの応答が遅いです。後で再試行し、続く場合は Gateway のログを確認してください', '서비스 응답이 느립니다. 나중에 다시 시도하고, 계속되면 Gateway 로그를 확인하세요', 'Dịch vụ phản hồi chậm, vui lòng thử lại sau; nếu vẫn lỗi, hãy kiểm tra nhật ký Gateway', 'El servicio responde lento, reintenta luego; si persiste, revisa los registros del Gateway', 'O serviço está lento, tente novamente; se persistir, verifique os logs do Gateway', 'Сервис отвечает медленно, повторите позже; если ошибка не уходит — посмотрите логи Gateway', 'Le service répond lentement, réessayez plus tard ; si l\u2019erreur persiste, consultez les journaux du Gateway', 'Der Dienst antwortet langsam, später erneut versuchen; falls anhaltend, prüfen Sie die Gateway-Protokolle'),
busy: _('服务正在处理其他请求,请稍后重试', 'The service is handling other requests. Retry shortly', '服務正在處理其他請求,請稍後重試', 'サービスが他のリクエストを処理中です。しばらくしてから再試行してください', '서비스가 다른 요청을 처리 중입니다. 잠시 후 다시 시도하세요', 'Dịch vụ đang xử lý yêu cầu khác, vui lòng thử lại sau', 'El servicio está atendiendo otras solicitudes, reintenta en breve', 'O serviço está processando outras solicitações, tente novamente em breve', 'Сервис обрабатывает другие запросы, повторите чуть позже', 'Le service traite d\u2019autres requêtes, réessayez sous peu', 'Der Dienst bearbeitet andere Anfragen, kurz später erneut versuchen'),
notFound: _('请确认目标资源是否仍存在', 'Confirm that the target resource still exists', '請確認目標資源是否仍存在', '対象リソースがまだ存在するか確認してください', '대상 리소스가 여전히 존재하는지 확인하세요', 'Hãy xác nhận tài nguyên đích vẫn tồn tại', 'Confirma que el recurso aún exista', 'Confirme se o recurso ainda existe', 'Убедитесь, что целевой ресурс ещё существует', 'Vérifiez que la ressource cible existe toujours', 'Bestätigen Sie, dass die Zielressource noch existiert'),
auth: _('请检查 API key/账号信息是否正确,或重新登录', 'Check that the API key / account info is correct, or sign in again', '請檢查 API key/帳號資訊是否正確,或重新登入', 'API キー/アカウント情報が正しいか確認するか、再度ログインしてください', 'API 키/계정 정보가 올바른지 확인하거나 다시 로그인하세요', 'Hãy kiểm tra API key/thông tin tài khoản, hoặc đăng nhập lại', 'Verifica que la API key / cuenta sea correcta, o vuelve a iniciar sesión', 'Verifique se a API key / conta está correta, ou faça login novamente', 'Проверьте API-ключ / данные учётной записи или войдите снова', 'Vérifiez que la clé API / les identifiants sont corrects ou reconnectez-vous', 'Prüfen Sie API-Key / Anmeldedaten oder melden Sie sich erneut an'),
rateLimit: _('已触发限流,请稍后重试,或在模型/渠道配置中放宽频率', 'Rate limit reached. Retry later, or raise the limit in the model/channel settings', '已觸發限流,請稍後重試,或在模型/頻道設定中放寬頻率', 'レート制限に達しました。後で再試行するか、モデル/チャンネル設定で上限を緩めてください', '속도 제한에 도달했습니다. 잠시 후 다시 시도하거나 모델/채널 설정에서 한도를 완화하세요', 'Đã đạt giới hạn tốc độ, thử lại sau hoặc nới lỏng giới hạn trong cài đặt mô hình/kênh', 'Se alcanzó el límite de tasa, reintenta luego o aumenta el límite en la configuración', 'Limite de taxa atingido, tente mais tarde ou aumente o limite nas configurações', 'Достигнут лимит запросов, повторите позже или увеличьте лимит в настройках', 'Limite de débit atteinte, réessayez plus tard ou augmentez la limite dans les paramètres', 'Ratenlimit erreicht, später erneut versuchen oder das Limit in den Einstellungen erhöhen'),
generic: _('请稍后重试;如问题持续,请到日志页查看详情', 'Try again later; if the issue persists, check the Logs page for details', '請稍後重試;如問題持續,請到日誌頁查看詳情', '後で再試行してください。問題が続く場合はログページで詳細を確認してください', '잠시 후 다시 시도하세요; 문제가 계속되면 로그 페이지에서 자세히 확인하세요', 'Vui lòng thử lại sau; nếu lỗi vẫn xảy ra, hãy kiểm tra trang Nhật ký', 'Reintenta más tarde; si persiste, revisa la página de Registros', 'Tente novamente mais tarde; se persistir, verifique a página de Logs', 'Повторите позже; если ошибка не уходит — посмотрите страницу Логи', 'Réessayez plus tard ; si le problème persiste, consultez la page Journaux', 'Versuchen Sie es später erneut; bei anhaltendem Problem die Protokoll-Seite prüfen'),
},
errorRawLabel: _('技术详情', 'Technical details', '技術詳情', '技術的詳細', '기술 정보', 'Chi tiết kỹ thuật', 'Detalles técnicos', 'Detalhes técnicos', 'Технические подробности', 'Détails techniques', 'Technische Details'),
// 空状态通用副本
emptyGetStartedHint: _('点下面的按钮开始第一步', 'Click the button below to get started', '點下面的按鈕開始第一步', '下のボタンから最初の一歩を', '아래 버튼을 눌러 시작하세요', 'Nhấn nút bên dưới để bắt đầu', 'Pulsa el botón de abajo para empezar', 'Clique no botão abaixo para começar', 'Нажмите кнопку ниже, чтобы начать', 'Cliquez sur le bouton ci-dessous pour commencer', 'Klicken Sie auf die Schaltfläche unten, um zu starten'),
}

View File

@@ -21,6 +21,11 @@ export default {
toggleEnabled: _('已启用', 'Enabled', '已啟用'),
toggleFailed: _('操作失败', 'Operation failed', '操作失敗', '状態切替失敗'),
confirmDelete: _('确定删除任务「{name}」?', 'Delete task "{name}"?', '確定刪除任務「{name}」?', 'タスク「{name}」を削除しますか?', '작업「{name}」을 삭제하시겠습니까?'),
deleteTitle: _('删除定时任务「{name}」', 'Delete cron task "{name}"', '刪除定時任務「{name}」', '定期タスク「{name}」を削除', '예약 작업「{name}」 삭제', 'Xoá tác vụ định kỳ "{name}"', 'Eliminar tarea programada "{name}"', 'Excluir tarefa agendada "{name}"', 'Удалить задачу "{name}"', 'Supprimer la tâche planifiée "{name}"', 'Geplante Aufgabe "{name}" löschen'),
deleteBtn: _('删除', 'Delete', '刪除', '削除', '삭제', 'Xoá', 'Eliminar', 'Excluir', 'Удалить', 'Supprimer', 'Löschen'),
deleteCancel: _('保留', 'Keep', '保留', '保持', '유지', 'Giữ lại', 'Conservar', 'Manter', 'Оставить', 'Conserver', 'Behalten'),
deleteImpactStop: _('任务将立即停止,不再按计划执行', 'Task will stop immediately and will no longer run on schedule', '任務將立即停止,不再按計畫執行', 'タスクは直ちに停止し、スケジュール実行されません', '작업이 즉시 중지되고 더 이상 예약대로 실행되지 않습니다', 'Tác vụ sẽ dừng ngay và không chạy theo lịch nữa', 'La tarea se detendrá de inmediato y dejará de ejecutarse según el calendario', 'A tarefa será interrompida imediatamente e deixará de rodar no agendamento', 'Задача немедленно остановится и больше не будет выполняться по расписанию', 'La tâche s\u2019arrêtera immédiatement et ne s\u2019exécutera plus selon le planning', 'Die Aufgabe wird sofort gestoppt und nicht mehr nach Zeitplan ausgeführt'),
deleteImpactHistory: _('已执行的历史记录会被保留', 'Past execution history will be kept', '已執行的歷史紀錄會被保留', '実行履歴は保持されます', '실행 이력은 유지됩니다', 'Lịch sử thực thi sẽ được giữ lại', 'El historial de ejecuciones se conservará', 'O histórico de execuções será mantido', 'История выполнения будет сохранена', 'L\u2019historique d\u2019exécution sera conservé', 'Der Ausführungsverlauf bleibt erhalten'),
deleted: _('已删除', 'Deleted', '已刪除', 'タスク削除済み', '작업 삭제됨', 'Tác vụ đã xóa', 'Tarea eliminada', 'Tarefa excluída', 'Задача удалена', 'Tâche supprimée', 'Aufgabe gelöscht'),
deleteFailed: _('删除失败', 'Delete failed', '刪除失敗', 'タスク削除失敗', '작업 삭제 실패'),
fetchFailed: _('获取任务列表失败', 'Failed to fetch task list', '取得任務列表失敗'),

View File

@@ -3,6 +3,25 @@ import { _ } from '../helper.js'
export default {
title: _('仪表盘', 'Dashboard', '儀表盤', 'ダッシュボード', '대시보드', 'Bảng điều khiển', 'Panel', 'Painel', 'Панель', 'Tableau de bord'),
desc: _('OpenClaw 运行状态概览', 'OpenClaw runtime status overview', 'OpenClaw 執行狀態概覽', 'OpenClaw 実行状況の概要', 'OpenClaw 실행 상태 개요', 'Tổng quan trạng thái OpenClaw', 'Resumen del estado de OpenClaw', 'Visão geral do estado do OpenClaw', 'Обзор состояния OpenClaw', 'Vue d\'ensemble de l\'état OpenClaw', 'OpenClaw-Statusübersicht'),
// ── 新手任务卡片 ──
onboardingTitle: _('🎯 新手上路', '🎯 Get Started', '🎯 新手上路', '🎯 はじめに', '🎯 시작하기', '🎯 Bắt đầu', '🎯 Empezar', '🎯 Comece aqui', '🎯 Начало работы', '🎯 Démarrer', '🎯 Erste Schritte'),
onboardingDesc: _('完成下面几步,就能开始用面板了', 'Finish these steps to start using ClawPanel', '完成下面几步,就能開始用面板了', '以下のステップを完了するとパネルが使えます', '아래 단계를 완료하면 패널을 사용할 수 있습니다', 'Hoàn tất các bước dưới để bắt đầu sử dụng', 'Completa estos pasos para empezar a usar el panel', 'Conclua estes passos para começar a usar o painel', 'Выполните эти шаги, чтобы начать пользоваться панелью', 'Effectuez ces étapes pour commencer à utiliser le panneau', 'Schließen Sie diese Schritte ab, um mit dem Panel zu beginnen'),
onboardingClose: _('我已经会用了,关闭引导', 'I know how to use this, close', '我已經會用了,關閉引導', '使い方を理解しています、閉じる', '사용법을 이미 알고 있습니다, 닫기', 'Tôi đã biết cách dùng, đóng', 'Ya sé cómo usarlo, cerrar', 'Já sei usar, fechar', 'Я уже знаю, закрыть', 'Je sais déjà l\u2019utiliser, fermer', 'Ich kenne mich aus, schließen'),
onboardingDone: _('完成', 'Done', '完成', '完了', '완료', 'Hoàn tất', 'Hecho', 'Concluído', 'Готово', 'Terminé', 'Erledigt'),
onboardingTodo: _('待完成', 'To do', '待完成', '未完了', '미완료', 'Chưa hoàn tất', 'Pendiente', 'Pendente', 'В процессе', 'À faire', 'Offen'),
onboardingStep1Title: _('启动 Gateway', 'Start Gateway', '啟動 Gateway', 'Gateway を起動', 'Gateway 시작', 'Khởi động Gateway', 'Iniciar Gateway', 'Iniciar Gateway', 'Запустить Gateway', 'Démarrer Gateway', 'Gateway starten'),
onboardingStep1Desc: _('Gateway 是面板和模型对话的「发动机」,先启动它', 'Gateway is the engine that connects the panel to your AI models. Start it first', 'Gateway 是面板和模型對話的「發動機」,先啟動它', 'Gateway はパネルと AI モデルをつなぐ「エンジン」。最初に起動してください', 'Gateway는 패널과 AI 모델을 연결하는 엔진입니다. 먼저 시작하세요', 'Gateway là "động cơ" kết nối panel với mô hình AI. Hãy khởi động trước', 'Gateway es el "motor" que conecta el panel con tus modelos de IA. Inícialo primero', 'O Gateway é o "motor" que conecta o painel aos seus modelos de IA. Inicie-o primeiro', 'Gateway — это «двигатель», соединяющий панель с моделями ИИ. Запустите его первым', 'Gateway est le « moteur » qui relie le panneau à vos modèles IA. Démarrez-le d\u2019abord', 'Gateway ist der „Motor", der das Panel mit Ihren KI-Modellen verbindet. Starten Sie ihn zuerst'),
onboardingStep1Cta: _('去启动', 'Start it', '去啟動', '起動する', '시작하기', 'Khởi động', 'Iniciar', 'Iniciar', 'Запустить', 'Démarrer', 'Starten'),
onboardingStep2Title: _('添加你的第一个模型', 'Add your first model', '新增你的第一個模型', '最初のモデルを追加', '첫 번째 모델 추가', 'Thêm mô hình đầu tiên', 'Añade tu primer modelo', 'Adicione seu primeiro modelo', 'Добавьте первую модель', 'Ajoutez votre premier modèle', 'Fügen Sie Ihr erstes Modell hinzu'),
onboardingStep2Desc: _('配上 OpenAI / Claude / DeepSeek 等任意服务商和 API keyAI 才有「大脑」', 'Add a provider like OpenAI / Claude / DeepSeek with an API key — that gives the AI its "brain"', '配上 OpenAI / Claude / DeepSeek 等任意服務商和 API keyAI 才有「大腦」', 'OpenAI / Claude / DeepSeek などのプロバイダーと API キーを設定すると AI に「脳」が宿ります', 'OpenAI / Claude / DeepSeek 같은 프로바이더와 API key를 설정해 AI에 "두뇌"를 부여하세요', 'Thêm nhà cung cấp (OpenAI / Claude / DeepSeek) cùng API key để AI có "bộ não"', 'Añade un proveedor como OpenAI / Claude / DeepSeek con su API key — eso le da el "cerebro" a la IA', 'Adicione um provedor como OpenAI / Claude / DeepSeek com a chave da API — isso dá um "cérebro" à IA', 'Добавьте провайдера (OpenAI / Claude / DeepSeek) с API-ключом — это даст ИИ «мозг»', 'Ajoutez un fournisseur comme OpenAI / Claude / DeepSeek avec une clé API — cela donne un « cerveau » à l\u2019IA', 'Fügen Sie einen Anbieter wie OpenAI / Claude / DeepSeek mit API-Key hinzu — damit hat die KI ein „Gehirn"'),
onboardingStep2Cta: _('去添加模型', 'Add a model', '去新增模型', 'モデルを追加', '모델 추가', 'Thêm mô hình', 'Añadir modelo', 'Adicionar modelo', 'Добавить модель', 'Ajouter un modèle', 'Modell hinzufügen'),
onboardingStep3Title: _('创建第一个 Agent', 'Create your first Agent', '建立第一個 Agent', '最初の Agent を作成', '첫 Agent 생성', 'Tạo Agent đầu tiên', 'Crea tu primer Agent', 'Crie seu primeiro Agent', 'Создайте первого агента', 'Créez votre premier Agent', 'Erstellen Sie Ihren ersten Agent'),
onboardingStep3Desc: _('Agent 是「分身」—— 给它身份、技能、记忆,它就能代你聊天和办事', 'Agents are your "alter egos" — give them an identity, skills, and memory so they can chat and act on your behalf', 'Agent 是「分身」—— 給它身份、技能、記憶,它就能代你聊天和辦事', 'Agent はあなたの「分身」。アイデンティティ・スキル・記憶を与えると、あなたの代わりに会話したり仕事をしたりします', 'Agent는 당신의 "분신"입니다. 정체성·스킬·기억을 부여하면 당신을 대신해 대화하고 일을 처리합니다', 'Agent là "phân thân" — đặt danh tính, kỹ năng, ký ức cho nó để nó trò chuyện và làm việc thay bạn', 'Los Agents son tus "alter egos" — dales una identidad, habilidades y memoria para que conversen y actúen por ti', 'Os Agents são seus "alter egos" — dê-lhes identidade, habilidades e memória para que conversem e ajam em seu nome', 'Agent — это «второе я». Дайте ему имя, навыки и память, и он будет говорить и действовать от вашего имени', 'Les Agents sont vos « alter egos ». Donnez-leur une identité, des compétences et une mémoire pour qu\u2019ils discutent et agissent pour vous', 'Agents sind Ihre „alter egos". Geben Sie ihnen Identität, Fähigkeiten und Gedächtnis, damit sie für Sie chatten und handeln'),
onboardingStep3Cta: _('去创建 Agent', 'Create an Agent', '去建立 Agent', 'Agent を作成', 'Agent 만들기', 'Tạo Agent', 'Crear Agent', 'Criar Agent', 'Создать агента', 'Créer un Agent', 'Agent erstellen'),
onboardingStep4Title: _('开始第一次对话', 'Start your first chat', '開始第一次對話', '最初のチャットを始める', '첫 대화 시작', 'Bắt đầu cuộc trò chuyện đầu tiên', 'Inicia tu primera conversación', 'Inicie sua primeira conversa', 'Начните первый чат', 'Démarrez votre première conversation', 'Starten Sie Ihren ersten Chat'),
onboardingStep4Desc: _('一切就绪 —— 现在打开聊天页,跟你的 Agent 说句话试试', 'All set — open the chat page and say hi to your Agent', '一切就緒 —— 現在打開聊天頁,跟你的 Agent 說句話試試', '準備完了。チャットページを開いて Agent に話しかけてみましょう', '준비 완료. 채팅 페이지를 열고 Agent에게 말을 걸어보세요', 'Tất cả sẵn sàng — mở trang trò chuyện và chào Agent của bạn', 'Listo — abre la página de chat y saluda a tu Agent', 'Tudo pronto — abra a página de chat e diga "oi" para o seu Agent', 'Готово — откройте страницу чата и поздоровайтесь со своим агентом', 'Tout est prêt — ouvrez la page de chat et dites bonjour à votre Agent', 'Alles bereit — öffnen Sie die Chat-Seite und begrüßen Sie Ihren Agent'),
onboardingStep4Cta: _('去聊天', 'Open chat', '去聊天', 'チャットを開く', '채팅 열기', 'Mở trò chuyện', 'Abrir chat', 'Abrir chat', 'Открыть чат', 'Ouvrir le chat', 'Chat öffnen'),
onboardingAllDone: _('🎉 全部搞定!享受你的 ClawPanel 之旅', '🎉 All done! Enjoy your ClawPanel journey', '🎉 全部搞定!享受你的 ClawPanel 之旅', '🎉 すべて完了ClawPanel をお楽しみください', '🎉 모두 완료! ClawPanel을 즐기세요', '🎉 Hoàn tất tất cả! Chúc bạn dùng ClawPanel vui vẻ', '🎉 ¡Todo listo! Disfruta tu experiencia con ClawPanel', '🎉 Tudo pronto! Aproveite sua experiência com o ClawPanel', '🎉 Всё готово! Наслаждайтесь работой с ClawPanel', '🎉 Tout est prêt ! Profitez de ClawPanel', '🎉 Alles erledigt! Viel Spaß mit ClawPanel'),
gateway: _('Gateway', 'Gateway'),
portDetect: _('端口检测', 'Port detection', '連接埠檢測', 'ポート検出', '포트 감지'),
notStarted: _('未启动', 'Not started', '未啟動', '未起動', '미시작', 'Chưa khởi động', 'No iniciado', 'Não iniciado', 'Не запущен', 'Non démarré', 'Nicht gestartet'),

View File

@@ -23,7 +23,17 @@ export default {
resetDiaryDone: _('梦境日记已重置', 'Dream diary reset'),
clearGroundedDone: _('grounded 短期记忆已清空', 'Grounded short-term memory cleared'),
confirmResetDiary: _('确定要重置梦境日记吗?这会清空现有 DREAMS.md 内容。', 'Reset the dream diary? This will clear existing DREAMS.md content.'),
resetDiaryTitle: _('重置梦境日记', 'Reset dream diary', '重置夢境日記', '夢日記をリセット', '꿈 일기 초기화', 'Khôi phục nhật ký giấc mơ', 'Restablecer diario de sueños', 'Redefinir diário de sonhos', 'Сбросить дневник снов', 'Réinitialiser le journal de rêves', 'Traumtagebuch zurücksetzen'),
resetDiaryBtn: _('重置', 'Reset', '重置', 'リセット', '초기화', 'Khôi phục', 'Restablecer', 'Redefinir', 'Сбросить', 'Réinitialiser', 'Zurücksetzen'),
resetDiaryCancel: _('保留', 'Keep', '保留', '保持', '유지', 'Giữ lại', 'Conservar', 'Manter', 'Оставить', 'Conserver', 'Behalten'),
resetDiaryImpactContent: _('DREAMS.md 内容将清空,所有梦境记录将丢失', 'DREAMS.md will be emptied and all dream records will be lost', 'DREAMS.md 內容將清空,所有夢境紀錄將遺失', 'DREAMS.md が空になり、すべての夢の記録が失われます', 'DREAMS.md가 비워지고 모든 꿈 기록이 손실됩니다', 'DREAMS.md sẽ bị xoá và mọi ghi chép giấc mơ sẽ mất', 'DREAMS.md se vaciará y se perderán todos los registros de sueños', 'DREAMS.md será esvaziado e todos os registros de sonhos serão perdidos', 'Файл DREAMS.md будет очищен и все записи о снах будут утеряны', 'DREAMS.md sera vidé et tous les enregistrements de rêves seront perdus', 'DREAMS.md wird geleert und alle Traumaufzeichnungen gehen verloren'),
resetDiaryImpactReplay: _('下次 Dreaming 周期会重新生成新的梦境', 'The next Dreaming cycle will regenerate new dreams from scratch', '下次 Dreaming 週期會重新產生新的夢境', '次回の Dreaming サイクルで新しい夢が一から生成されます', '다음 Dreaming 사이클에서 새 꿈이 처음부터 다시 생성됩니다', 'Chu kỳ Dreaming tiếp theo sẽ sinh lại giấc mơ mới từ đầu', 'El próximo ciclo de Dreaming regenerará nuevos sueños desde cero', 'O próximo ciclo de Dreaming gerará novos sonhos do zero', 'Следующий цикл Dreaming сгенерирует новые сны с нуля', 'Le prochain cycle Dreaming générera de nouveaux rêves à partir de zéro', 'Der nächste Dreaming-Zyklus erzeugt neue Träume von Grund auf'),
confirmClearGrounded: _('确定要清空 grounded 短期记忆吗?', 'Clear grounded short-term memory?'),
clearGroundedTitle: _('清空短期记忆', 'Clear short-term memory', '清空短期記憶', '短期記憶をクリア', '단기 기억 비우기', 'Xoá ký ức ngắn hạn', 'Borrar memoria a corto plazo', 'Limpar memória de curto prazo', 'Очистить кратковременную память', 'Effacer la mémoire à court terme', 'Kurzzeitgedächtnis leeren'),
clearGroundedBtn: _('清空', 'Clear', '清空', 'クリア', '비우기', 'Xoá', 'Borrar', 'Limpar', 'Очистить', 'Effacer', 'Leeren'),
clearGroundedCancel: _('保留', 'Keep', '保留', '保持', '유지', 'Giữ lại', 'Conservar', 'Manter', 'Оставить', 'Conserver', 'Behalten'),
clearGroundedImpact: _('grounded 短期记忆将立刻清空,最近一段对话上下文会丢失', 'Grounded short-term memory will be cleared immediately and recent conversation context will be lost', 'grounded 短期記憶將立即清空,最近一段對話上下文會遺失', 'grounded の短期記憶が直ちにクリアされ、直近の会話コンテキストが失われます', 'grounded 단기 기억이 즉시 비워지고 최근 대화 맥락이 사라집니다', 'Ký ức ngắn hạn grounded sẽ bị xoá ngay, ngữ cảnh trò chuyện gần đây sẽ mất', 'La memoria a corto plazo de grounded se borrará de inmediato y se perderá el contexto de las conversaciones recientes', 'A memória de curto prazo do grounded será limpa imediatamente e o contexto recente das conversas será perdido', 'Кратковременная память grounded будет немедленно очищена, и контекст недавних бесед будет утерян', 'La mémoire à court terme grounded sera effacée immédiatement et le contexte des conversations récentes sera perdu', 'Das grounded-Kurzzeitgedächtnis wird sofort geleert und der jüngste Gesprächskontext geht verloren'),
clearGroundedImpactNext: _('下一次对话开始时上下文将重建', 'Context will be rebuilt at the start of the next conversation', '下一次對話開始時上下文將重建', '次の会話開始時にコンテキストが再構築されます', '다음 대화 시작 시 컨텍스트가 다시 구축됩니다', 'Ngữ cảnh sẽ được xây dựng lại khi bắt đầu cuộc trò chuyện tiếp theo', 'El contexto se reconstruirá al iniciar la próxima conversación', 'O contexto será reconstruído no início da próxima conversa', 'Контекст будет восстановлен при начале следующей беседы', 'Le contexte sera reconstruit au début de la prochaine conversation', 'Der Kontext wird zu Beginn des nächsten Gesprächs neu aufgebaut'),
openMemory: _('打开记忆文件页', 'Open Memory Page'),
heroActive: _('正在整理上下文、筛选线索、沉淀长期记忆', 'Consolidating context, filtering signals, and promoting long-term memory'),
heroIdle: _('Dreaming 当前处于空闲状态,等待下一轮整理', 'Dreaming is idle and waiting for the next sweep'),

View File

@@ -477,6 +477,11 @@ export default {
cronCustomExpr: _('自定义 cron 表达式', 'Custom cron expression', '自訂 cron 表達式'),
cronPreview: _('预览', 'Preview', '預覽'),
cronConfirmDelete: _('确定要删除任务「{name}」吗?', 'Delete job "{name}"?', '確定要刪除任務「{name}」嗎?'),
cronDeleteTitle: _('删除任务「{name}」', 'Delete job "{name}"', '刪除任務「{name}」', 'ジョブ「{name}」を削除', '작업「{name}」 삭제', 'Xoá tác vụ "{name}"', 'Eliminar tarea "{name}"', 'Excluir tarefa "{name}"', 'Удалить задачу "{name}"', 'Supprimer la tâche "{name}"', 'Aufgabe "{name}" löschen'),
cronDeleteBtn: _('删除', 'Delete', '刪除', '削除', '삭제', 'Xoá', 'Eliminar', 'Excluir', 'Удалить', 'Supprimer', 'Löschen'),
cronDeleteCancel: _('保留', 'Keep', '保留', '保持', '유지', 'Giữ lại', 'Conservar', 'Manter', 'Оставить', 'Conserver', 'Behalten'),
cronDeleteImpactStop: _('任务将停止,不再按计划执行', 'Job will stop and will no longer run on schedule', '任務將停止,不再按計畫執行', 'ジョブは停止し、スケジュール実行されなくなります', '작업이 중지되고 더 이상 예약대로 실행되지 않습니다', 'Tác vụ sẽ dừng và không chạy theo lịch nữa', 'La tarea se detendrá y dejará de ejecutarse según el calendario', 'A tarefa será interrompida e deixará de rodar no agendamento', 'Задача остановится и не будет выполняться по расписанию', 'La tâche s\u2019arrêtera et ne s\u2019exécutera plus selon le planning', 'Die Aufgabe stoppt und wird nicht mehr nach Zeitplan ausgeführt'),
cronDeleteImpactHistory: _('已执行的历史记录会被保留', 'Past execution history will be kept', '已執行的歷史紀錄會被保留', '実行履歴は保持されます', '실행 이력은 유지됩니다', 'Lịch sử thực thi sẽ được giữ lại', 'El historial de ejecuciones se conservará', 'O histórico de execuções será mantido', 'История выполнения будет сохранена', 'L\u2019historique d\u2019exécution sera conservé', 'Der Ausführungsverlauf bleibt erhalten'),
cronSaving: _('保存中...', 'Saving...', '儲存中...'),
cronNameRequired: _('请输入任务名称', 'Job name is required', '請輸入任務名稱'),
cronPromptRequired: _('请输入 AI 指令', 'AI prompt is required', '請輸入 AI 指令'),

View File

@@ -0,0 +1,9 @@
import { _ } from '../helper.js'
export default {
title: _('面板术语表', 'ClawPanel Glossary', '面板術語表', '用語集', '용어집', 'Bảng thuật ngữ', 'Glosario', 'Glossário', 'Глоссарий', 'Glossaire', 'Glossar'),
desc: _('面板里出现的技术词,用大白话解释一遍。点击右上角「打开页面」直达对应配置。', 'Plain-language explanations of every tech term in the panel. Click "Open page" to jump to the matching settings.', '面板裡出現的技術詞,用大白話解釋一遍。點擊右上角「打開頁面」直達對應設定。', 'パネル内の専門用語をやさしい言葉で解説。「ページを開く」をクリックで対応設定へ', '패널의 기술 용어를 쉬운 말로 설명. "페이지 열기"를 클릭하면 해당 설정으로 이동', 'Giải thích các thuật ngữ kỹ thuật trong panel bằng ngôn ngữ đơn giản. Bấm "Mở trang" để tới phần cấu hình tương ứng', 'Términos técnicos del panel explicados con palabras sencillas. Pulsa "Abrir página" para ir a la configuración correspondiente', 'Termos técnicos do painel explicados em linguagem simples. Clique em "Abrir página" para ir à configuração correspondente', 'Технические термины панели простыми словами. Нажмите «Открыть страницу», чтобы перейти к настройкам', 'Termes techniques du panneau expliqués simplement. Cliquez sur « Ouvrir la page » pour accéder aux réglages', 'Technische Begriffe des Panels in einfachen Worten erklärt. Klicken Sie auf „Seite öffnen" um zur Einstellung zu gelangen'),
searchPlaceholder: _('搜索术语,比如 Gateway、Agent、Token...', 'Search terms like Gateway, Agent, Token...', '搜尋術語,例如 Gateway、Agent、Token...', '用語を検索: Gateway、Agent、Token...', '용어 검색: Gateway, Agent, Token...', 'Tìm thuật ngữ: Gateway, Agent, Token...', 'Buscar términos: Gateway, Agent, Token...', 'Buscar termos: Gateway, Agent, Token...', 'Поиск терминов: Gateway, Agent, Token...', 'Rechercher: Gateway, Agent, Token...', 'Begriffe suchen: Gateway, Agent, Token...'),
noMatch: _('没有匹配的术语', 'No matching terms', '沒有符合的術語', '一致する用語なし', '일치하는 용어 없음', 'Không có thuật ngữ phù hợp', 'Sin coincidencias', 'Sem correspondências', 'Совпадений не найдено', 'Aucune correspondance', 'Keine Übereinstimmung'),
openPage: _('打开页面', 'Open page', '打開頁面', 'ページを開く', '페이지 열기', 'Mở trang', 'Abrir página', 'Abrir página', 'Открыть страницу', 'Ouvrir la page', 'Seite öffnen'),
}

View File

@@ -25,6 +25,11 @@ export default {
created: _('已创建 {name}', 'Created {name}', '已建立 {name}'),
createFailed: _('创建失败', 'Failed to create', '建立失敗'),
confirmDelete: _('确定删除 {name}', 'Delete {name}?', '確定刪除 {name}', 'メモリファイル「{name}」を削除しますか?', '메모리 파일「{name}」을 삭제하시겠습니까?'),
deleteConfirmTitle: _('删除记忆文件「{name}」', 'Delete memory file "{name}"', '刪除記憶檔案「{name}」', 'メモリファイル「{name}」を削除', '메모리 파일「{name}」 삭제', 'Xoá tệp ký ức "{name}"', 'Eliminar archivo de memoria "{name}"', 'Excluir arquivo de memória "{name}"', 'Удалить файл памяти "{name}"', 'Supprimer le fichier de mémoire "{name}"', 'Speicherdatei "{name}" löschen'),
deleteConfirmBtn: _('删除', 'Delete', '刪除', '削除', '삭제', 'Xoá', 'Eliminar', 'Excluir', 'Удалить', 'Supprimer', 'Löschen'),
deleteCancelBtn: _('保留', 'Keep', '保留', '保持', '유지', 'Giữ lại', 'Conservar', 'Manter', 'Оставить', 'Conserver', 'Behalten'),
deleteImpactPermanent: _('文件将从 Hermes 记忆库永久删除,无法恢复', 'File will be permanently removed from the Hermes memory store and cannot be recovered', '檔案將從 Hermes 記憶庫永久刪除,無法復原', 'Hermes メモリストアから永久に削除され、復元できません', 'Hermes 메모리에서 영구 삭제되며 복구할 수 없습니다', 'Tệp sẽ bị xoá vĩnh viễn khỏi kho ký ức của Hermes, không thể khôi phục', 'El archivo se eliminará permanentemente del almacén de memoria de Hermes y no se podrá recuperar', 'O arquivo será removido permanentemente do armazenamento de memória do Hermes e não poderá ser recuperado', 'Файл будет навсегда удалён из хранилища памяти Hermes и не подлежит восстановлению', 'Le fichier sera supprimé définitivement de la mémoire de Hermes et ne pourra pas être restauré', 'Die Datei wird dauerhaft aus dem Hermes-Speicher entfernt und kann nicht wiederhergestellt werden'),
deleteImpactAgent: _('该 Agent 在新对话中将不再使用此记忆', 'The Agent will no longer use this memory in new conversations', '該 Agent 在新對話中將不再使用此記憶', 'Agent は新しい会話でこのメモリを使用しなくなります', 'Agent는 새 대화에서 이 메모리를 더 이상 사용하지 않습니다', 'Agent sẽ không dùng ký ức này trong các cuộc trò chuyện mới', 'El Agent dejará de usar esta memoria en nuevas conversaciones', 'O Agent deixará de usar esta memória em novas conversas', 'Agent больше не будет использовать эту память в новых беседах', 'L\u2019Agent n\u2019utilisera plus cette mémoire dans les nouvelles conversations', 'Der Agent verwendet diesen Speicher in neuen Gesprächen nicht mehr'),
deleted: _('已删除 {name}', 'Deleted {name}', '已刪除 {name}', '削除済み', '삭제됨', 'Đã xóa', 'Eliminado', 'Excluído', 'Удалено', 'Supprimé', 'Gelöscht'),
deleteFailed: _('删除失败', 'Failed to delete', '刪除失敗', '削除失敗', '삭제 실패', 'Xóa thất bại', 'Error al eliminar', 'Falha ao excluir', 'Ошибка удаления', 'Échec de la suppression', 'Löschen fehlgeschlagen'),
noFiles: _('暂无文件', 'No files', '暫無檔案', 'メモリファイルなし', '메모리 파일 없음', 'Không có tệp', 'Sin archivos', 'Sem arquivos', 'Нет файлов', 'Aucun fichier', 'Keine Dateien'),

View File

@@ -82,6 +82,11 @@ export default {
confirmDeleteModel: _('确定删除模型「{name}」?', 'Delete model "{name}"?', '確定刪除模型「{name}」?'),
modelDeleted: _('已删除 {name}', 'Deleted {name}', '已刪除 {name}'),
confirmBatchDelete: _('确定删除选中的 {count} 个模型?\n{ids}', 'Delete {count} selected models?\n{ids}', '確定刪除選中的 {count} 個模型?\n{ids}'),
batchDeleteTitle: _('删除 {count} 个模型', 'Delete {count} models', '刪除 {count} 個模型', '{count} 件のモデルを削除', '{count}개 모델 삭제', 'Xoá {count} mô hình', 'Eliminar {count} modelos', 'Excluir {count} modelos', 'Удалить {count} моделей', 'Supprimer {count} modèles', '{count} Modelle löschen'),
batchDeleteBtn: _('删除', 'Delete', '刪除', '削除', '삭제', 'Xoá', 'Eliminar', 'Excluir', 'Удалить', 'Supprimer', 'Löschen'),
batchDeleteCancel: _('保留', 'Keep', '保留', '保持', '유지', 'Giữ lại', 'Conservar', 'Manter', 'Оставить', 'Conserver', 'Behalten'),
batchDeleteImpact: _('使用了这些模型的 Agent 会回退到该服务商的其他模型,或者主模型', 'Agents using these models will fall back to other models in this provider or the primary model', '使用了這些模型的 Agent 會回退到該服務商的其他模型,或主模型', 'これらのモデルを使用していた Agent はプロバイダー内の他のモデルまたはメインモデルにフォールバックします', '이 모델을 사용하던 Agent는 동일 프로바이더의 다른 모델 또는 주 모델로 폴백합니다', 'Agent đang dùng các mô hình này sẽ chuyển về mô hình khác của nhà cung cấp hoặc mô hình chính', 'Los Agents que usaban estos modelos recurrirán a otros modelos del proveedor o al modelo principal', 'Os Agents que utilizavam esses modelos voltarão para outros modelos do provedor ou para o modelo principal', 'Агенты, использовавшие эти модели, переключатся на другие модели поставщика или основную модель', 'Les Agents qui utilisaient ces modèles se rabattront sur d\u2019autres modèles du fournisseur ou sur le modèle principal', 'Agents, die diese Modelle verwendeten, weichen auf andere Modelle des Anbieters oder auf das Hauptmodell aus'),
batchDeleteImpactConfig: _('配置会立即保存并安排 Gateway 重启', 'Configuration is saved immediately and a Gateway restart is queued', '設定會立即儲存並安排 Gateway 重啟', '設定はすぐに保存され、Gateway の再起動が予約されます', '설정이 즉시 저장되고 Gateway 재시작이 예약됩니다', 'Cấu hình sẽ được lưu ngay và lên lịch khởi động lại Gateway', 'La configuración se guardará de inmediato y se programará un reinicio del Gateway', 'A configuração será salva imediatamente e o reinício do Gateway será agendado', 'Конфигурация будет сохранена немедленно и поставлен в очередь перезапуск Gateway', 'La configuration sera enregistrée immédiatement et un redémarrage du Gateway sera planifié', 'Die Konfiguration wird sofort gespeichert und ein Gateway-Neustart wird eingeplant'),
batchDeleted: _('已删除 {count} 个模型', 'Deleted {count} models', '已刪除 {count} 個模型'),
batchSelectHint: _('请先勾选要删除的模型', 'Please select models to delete first', '請先勾選要刪除的模型'),
addProviderTitle: _('添加服务商', 'Add Provider', '新增服務商'),

View File

@@ -51,6 +51,16 @@ export default {
installFailed: _('安装失败', 'Install failed', '安裝失敗'),
uninstallFailed: _('卸载失败', 'Uninstall failed', '卸載失敗'),
uninstallConfirm: _('确定要卸载 Gateway 服务吗?\n这会停止服务并移除 LaunchAgent。', 'Uninstall Gateway service?\nThis will stop the service and remove the LaunchAgent.', '確定要卸載 Gateway 服務吗?\n这會停止服務並移除 LaunchAgent。'),
uninstallTitle: _('卸载 Gateway 服务', 'Uninstall Gateway service', '卸載 Gateway 服務', 'Gateway サービスをアンインストール', 'Gateway 서비스 제거', 'Gỡ dịch vụ Gateway', 'Desinstalar servicio Gateway', 'Desinstalar serviço Gateway', 'Удалить службу Gateway', 'Désinstaller le service Gateway', 'Gateway-Dienst deinstallieren'),
uninstallBtn: _('卸载', 'Uninstall', '卸載', 'アンインストール', '제거', 'Gỡ cài đặt', 'Desinstalar', 'Desinstalar', 'Удалить', 'Désinstaller', 'Deinstallieren'),
uninstallCancelBtn: _('保留', 'Keep', '保留', '保持', '유지', 'Giữ lại', 'Conservar', 'Manter', 'Оставить', 'Conserver', 'Behalten'),
uninstallImpactStop: _('Gateway 将立即停止,所有连接到 ClawPanel 的渠道会下线', 'Gateway will stop immediately and all channels connected to ClawPanel will go offline', 'Gateway 將立即停止,所有連接到 ClawPanel 的頻道會下線', 'Gateway は直ちに停止し、ClawPanel に接続中のチャンネルがオフラインになります', 'Gateway가 즉시 중지되고 ClawPanel에 연결된 모든 채널이 오프라인 상태가 됩니다', 'Gateway sẽ dừng ngay lập tức và tất cả kênh kết nối tới ClawPanel sẽ ngoại tuyến', 'El Gateway se detendrá de inmediato y todos los canales conectados a ClawPanel quedarán desconectados', 'O Gateway será interrompido imediatamente e todos os canais conectados ao ClawPanel ficarão offline', 'Gateway будет немедленно остановлен, и все каналы, подключённые к ClawPanel, перейдут в офлайн', 'Le Gateway s\u2019arrêtera immédiatement et tous les canaux liés à ClawPanel passeront hors ligne', 'Gateway wird sofort gestoppt und alle mit ClawPanel verbundenen Kanäle gehen offline'),
uninstallImpactAutostart: _('系统开机自启动项会被移除,需要时可在「服务」页重新安装', 'Auto-start entries will be removed. You can reinstall from the Services page when needed', '系統開機自啟動項會被移除,需要時可在「服務」頁重新安裝', '自動起動設定が削除されます。必要時に「サービス」ページから再インストールできます', '시스템 자동 시작 항목이 제거됩니다. 필요할 때 서비스 페이지에서 다시 설치할 수 있습니다', 'Mục tự khởi động sẽ bị xoá, có thể cài lại từ trang Dịch vụ khi cần', 'Las entradas de inicio automático se eliminarán; podrás reinstalarlas desde la página Servicios', 'As entradas de inicialização automática serão removidas; reinstale a partir da página Serviços quando necessário', 'Записи автозапуска будут удалены. При необходимости можно переустановить со страницы Сервисы', 'Les entrées de démarrage automatique seront supprimées ; vous pourrez réinstaller depuis la page Services', 'Autostart-Einträge werden entfernt; bei Bedarf können Sie über die Seite Dienste neu installieren'),
uninstallImpactConfig: _('配置文件和聊天数据会被保留', 'Configuration files and chat data will be kept', '設定檔案和聊天數據會被保留', '設定ファイルとチャット履歴は保持されます', '설정 파일과 채팅 데이터는 유지됩니다', 'Tệp cấu hình và dữ liệu trò chuyện sẽ được giữ lại', 'Los archivos de configuración y datos de chat se conservarán', 'Os arquivos de configuração e dados de chat serão mantidos', 'Файлы конфигурации и данные чатов будут сохранены', 'Les fichiers de configuration et les données de chat seront conservés', 'Konfigurationsdateien und Chatdaten bleiben erhalten'),
deleteBackupTitle: _('删除备份「{name}」', 'Delete backup "{name}"', '刪除備份「{name}」', 'バックアップ「{name}」を削除', '백업「{name}」 삭제', 'Xoá bản sao lưu "{name}"', 'Eliminar copia "{name}"', 'Excluir backup "{name}"', 'Удалить резервную копию "{name}"', 'Supprimer la sauvegarde "{name}"', 'Sicherung "{name}" löschen'),
deleteBackupBtn: _('删除', 'Delete', '刪除', '削除', '삭제', 'Xoá', 'Eliminar', 'Excluir', 'Удалить', 'Supprimer', 'Löschen'),
deleteBackupCancel: _('保留', 'Keep', '保留', '保持', '유지', 'Giữ lại', 'Conservar', 'Manter', 'Оставить', 'Conserver', 'Behalten'),
deleteBackupImpact: _('备份文件将永久删除,无法用它恢复以前的配置', 'Backup file will be permanently deleted and cannot be restored', '備份檔案將永久刪除,無法用它復原以前的設定', 'バックアップが永久に削除され、以前の設定に戻せなくなります', '백업이 영구 삭제되어 이전 설정으로 복원할 수 없게 됩니다', 'Tệp sao lưu sẽ bị xoá vĩnh viễn, không thể dùng để khôi phục cấu hình cũ', 'El archivo de copia se eliminará permanentemente y no podrá restaurar configuraciones anteriores', 'O arquivo de backup será excluído permanentemente e não poderá restaurar configurações anteriores', 'Файл резервной копии будет удалён навсегда и не сможет восстановить прежнюю конфигурацию', 'Le fichier de sauvegarde sera supprimé définitivement et ne pourra plus restaurer la configuration', 'Die Sicherungsdatei wird dauerhaft gelöscht und kann nicht zur Wiederherstellung früherer Konfigurationen verwendet werden'),
actionProgress: _('正在{action}...', '{action} in progress...'),
actionProgressSec: _('正在{action}... {sec}s', '{action} in progress... {sec}s'),
actionTimeout: _('{action}超时Gateway 可能仍在启动中', '{action} timed out, Gateway may still be starting', '{action}逾時Gateway 可能仍在啟動中'),