feat: i18n 11 languages + website update + fix #139 #140 #141

i18n:
- Add 9 new locale files (ja/ko/de/es/fr/pt/ru/vi/zh-TW)
- Add multilingual README files for all 11 languages
- Add locale helper, index, and modular translation system
- Add translation generation scripts

Website (docs/index.html):
- Replace 公益AI接口 branding with 晴辰云AI接口
- Remove OpenClaw 独立安装包 promotion block
- Update SEO meta tags (description, keywords, OG, Twitter, JSON-LD)
- Add 11-language README links to footer
- Update 元宝派 link to new URL

Bug fixes:
- fix(cron): delivery format mode:'push' → mode:'announce', remove invalid 'to' field (fixes #141)
- fix(cron): allow single-channel users to select delivery channel
- fix(cron): preserve delivery field in job state for editing
- fix(models): add 'ollama' as recognized API type, prevent overwriting native ollama config (fixes #140)
- fix(models): skip /v1 append for ollama native API baseUrl
- fix(assistant): normalize 'google-generative-ai' consistently, add ollama hints
- fix(version): use CLI path classification for source detection on Windows (fixes #139)
- fix(version): default to 'official' instead of 'chinese' when source unknown
- fix(version): reorder npm global package check based on active CLI
This commit is contained in:
晴天
2026-03-24 22:31:11 +08:00
parent f8af3bea4a
commit 985d263dc6
261 changed files with 26760 additions and 175 deletions

View File

@@ -0,0 +1,307 @@
import { _ } from '../helper.js'
export default {
title: _('消息渠道', 'Channels', '訊息頻道', 'チャンネル', '채널', 'Kênh', 'Canales', 'Canais', 'Каналы', 'Canaux', 'Kanäle'),
desc: _('渠道列表管理接入;在 Agent 对接页为每个 Agent 绑定多条渠道路由,配置相互独立,并支持渠道连通性测试', 'Manage channel integrations; bind multiple channel routes per Agent with independent configs and connectivity testing', '頻道列表管理接入;在 Agent 对接頁為每個 Agent 綁定多條頻道路由,設定相互獨立,並支援頻道連通性測試', 'メッセージチャンネルの管理とプラットフォーム接続', '메시지 채널 관리 및 플랫폼 연결', 'Quản lý kênh tin nhắn và kết nối nền tảng', 'Gestionar canales de mensajería y conexiones de plataforma', 'Gerenciar canais de mensagens e conexões de plataforma', 'Управление каналами сообщений и подключение платформ', 'Gérer les canaux de messagerie et les connexions de plateforme', 'Nachrichtenkanäle und Plattformverbindungen verwalten'),
tabChannels: _('渠道列表', 'Channel List', '頻道列表'),
tabAgents: _('Agent 对接', 'Agent Binding'),
configured: _('已接入', 'Connected'),
available: _('可接入平台', 'Available Platforms'),
accountCount: _('{count} 个账号', '{count} accounts', '{count} 個账號'),
editAccount: _('编辑', 'Edit', '編輯'),
addAccount: _('添加账号', 'Add Account', '新增账號'),
editDefault: _('编辑默认', 'Edit Default', '編輯預設'),
noGuide: _('无向导', 'No guide', '無向导'),
disable: _('禁用', 'Disable', '停用', '無効化', '비활성화'),
enable: _('启用', 'Enable', '啟用', '有効化', '활성화'),
loadFailed: _('加载平台列表失败', 'Failed to load platform list', '載入平台列表失敗', 'チャンネルの読み込みに失敗', '채널 로드 실패', 'Tải thất bại', 'Error al cargar', 'Falha ao carregar', 'Ошибка загрузки', 'Échec du chargement', 'Laden fehlgeschlagen'),
agentBindHint: _('每个 Agent 可绑定多条路由(例如不同账号或匹配条件);绑定之间互不影响。请先在「渠道列表」中完成渠道接入。', 'Each Agent can have multiple route bindings (e.g. different accounts or match conditions). Bindings are independent. Complete channel setup in "Channel List" first.', '每個 Agent 可綁定多條路由(例如不同账號或匹配條件);綁定之間互不影響。請先在「頻道列表」中完成頻道接入。'),
createAgentFirst: _('请先在「Agent 管理」中创建 Agent', 'Please create an Agent in "Agent Management" first', '請先在「Agent 管理」中建立 Agent'),
qqbotLabel: _('QQ 机器人', 'QQ Bot', 'QQ 機器人'),
qqbotDesc: _('通过 QQ 开放平台接入,支持私聊和群聊', 'Connect via QQ Open Platform, supports DM and group chat', '通過 QQ 開放平台接入,支援私聊和群聊'),
qqbotGuide1: _('前往 <a href="https://q.qq.com" target="_blank" rel="noopener">QQ 开放平台</a> 创建机器人', '前往 <a href="https://q.qq.com" target="_blank" rel="noopener">QQ 开放平台</a> 创建机器人', '前往 <a href="https://q.qq.com" target="_blank" rel="noopener">QQ 開放平台</a> 建立機器人'),
qqbotGuide2: _('在「开发 → 开发设置」中获取 <strong>AppID</strong> 和 <strong>ClientSecret</strong>', '在「开发 → 开发设置」中获取 <strong>AppID</strong> 和 <strong>ClientSecret</strong>', '在「開發 → 開發設定」中取得 <strong>AppID</strong> 和 <strong>ClientSecret</strong>'),
qqbotGuide3: _('沙箱模式下可跳过审核直接测试', 'You can skip review and test directly in sandbox mode', '沙箱模式下可略過審核直接測試'),
qqbotGuide4: _('将机器人添加到你的 QQ 群(沙箱频道亦可)', 'Add the bot to your QQ group (sandbox channel also works)', '將機器人新增到你的 QQ 群(沙箱頻道亦可)'),
qqbotGuide5: _('填入下方凭证并保存,面板会自动安装插件、写入配置并重启 Gateway', 'Fill in credentials and save; the panel will auto-install the plugin, write config, and restart Gateway', '填入下方憑證並儲存,面板會自動安裝外掛、写入設定並重啟 Gateway'),
qqbotGuide6: _('在群里 @机器人 发消息即可开始对话', '@mention the bot in the group to start chatting', '在群里 @機器人 發訊息即可開始對話'),
qqbotGuideFooter: _('<div style="margin-top:8px;font-size:var(--font-size-xs);color:var(--text-tertiary)">遇到问题?参考 <a href="https://q.qq.com/qqbot/openclaw/faq.html" target="_blank" rel="noopener">OpenClaw × QQ 常见问题</a></div>', '<div style="margin-top:8px;font-size:var(--font-size-xs);color:var(--text-tertiary)">遇到问题?参考 <a href="https://q.qq.com/qqbot/openclaw/faq.html" target="_blank" rel="noopener">OpenClaw × QQ 常见问题</a></div>', '<div style="margin-top:8px;font-size:var(--font-size-xs);color:var(--text-tertiary)">遇到問題?參考 <a href="https://q.qq.com/qqbot/openclaw/faq.html" target="_blank" rel="noopener">OpenClaw × QQ 常见問題</a></div>'),
qqbotAppIdPh: _('QQ 开放平台 AppID', 'QQ Open Platform AppID', 'QQ 開放平台 AppID'),
qqbotSecretPh: _('QQ 开放平台 ClientSecret', 'QQ Open Platform ClientSecret', 'QQ 開放平台 ClientSecret'),
dingtalkLabel: _('钉钉', 'DingTalk', '釘釘'),
dingtalkDesc: _('通过钉钉企业内部应用接入,支持单聊和群聊', 'Connect via DingTalk enterprise internal app, supports DM and group chat', '通過釘釘企業內部應用接入,支援單聊和群聊', 'DingTalk に接続'),
dingtalkGuide1: _('前往 <a href="https://open-dev.dingtalk.com" target="_blank" rel="noopener">钉钉开放平台</a>,创建「企业内部应用」', '前往 <a href="https://open-dev.dingtalk.com" target="_blank" rel="noopener">钉钉开放平台</a>,创建「企业内部应用」', '前往 <a href="https://open-dev.dingtalk.com" target="_blank" rel="noopener">釘釘開放平台</a>,建立「企業內部應用」'),
dingtalkGuide2: _('在「应用功能 → 机器人」中启用机器人能力', 'Enable Robot capability under "App Features → Robot"', '在「應用功能 → 機器人」中啟用機器人能力'),
dingtalkGuide3: _('消息接收模式选择 <strong>Stream 模式</strong>(推荐)', 'Set message receive mode to <strong>Stream Mode</strong> (recommended)', '訊息接收模式選擇 <strong>Stream 模式</strong>(推薦)'),
dingtalkGuide4: _('在「凭证与基础信息」中获取 <strong>Client ID (AppKey)</strong> 和 <strong>Client Secret (AppSecret)</strong>', 'Get <strong>Client ID (AppKey)</strong> and <strong>Client Secret (AppSecret)</strong> from credentials page', '在「憑證與基礎資訊」中取得 <strong>Client ID (AppKey)</strong> 和 <strong>Client Secret (AppSecret)</strong>'),
dingtalkGuide5: _('权限管理中添加 <code>qyapi_robot_sendmsg</code>、<code>Card.Streaming.Write</code>、<code>Card.Instance.Write</code>', '权限管理中添加 <code>qyapi_robot_sendmsg</code>、<code>Card.Streaming.Write</code>、<code>Card.Instance.Write</code>', '權限管理中新增 <code>qyapi_robot_sendmsg</code>、<code>Card.Streaming.Write</code>、<code>Card.Instance.Write</code>'),
dingtalkGuide6: _('发布应用版本后,将机器人添加到目标群', 'Publish the app version, then add the bot to the target group', '發佈應用版本后,將機器人新增到目標群'),
dingtalkGuide7: _('填入下方凭证并保存,面板会自动安装插件并重启 Gateway', 'Fill in credentials and save; the panel will auto-install the plugin and restart Gateway', '填入下方憑證並儲存,面板會自動安裝外掛並重啟 Gateway'),
dingtalkGuideFooter: _('<div style="margin-top:8px;font-size:var(--font-size-xs);color:var(--text-tertiary)">注意Stream 模式需要钉钉服务端主动推送,确保网络可达</div>', '<div style="margin-top:8px;font-size:var(--font-size-xs);color:var(--text-tertiary)">注意Stream 模式需要钉钉服务端主动推送,确保网络可达</div>', '<div style="margin-top:8px;font-size:var(--font-size-xs);color:var(--text-tertiary)">注意Stream 模式需要釘釘伺服端主動推送,確保網路可達</div>'),
dingtalkClientIdPh: _('AppKey / Client ID', 'AppKey / Client ID'),
dingtalkClientSecretPh: _('AppSecret / Client Secret', 'AppSecret / Client Secret'),
feishuLabel: _('飞书', 'Feishu', '飛書'),
feishuDesc: _('通过飞书企业自建应用接入,支持单聊和群聊', 'Connect via Feishu custom enterprise app, supports DM and group chat', '通過飛書企業自建應用接入,支援單聊和群聊', 'Feishu に接続'),
feishuGuide1: _('前往 <a href="https://open.feishu.cn/app" target="_blank" rel="noopener">飞书开放平台</a> 创建企业自建应用', '前往 <a href="https://open.feishu.cn/app" target="_blank" rel="noopener">飞书开放平台</a> 创建企业自建应用', '前往 <a href="https://open.feishu.cn/app" target="_blank" rel="noopener">飛書開放平台</a> 建立企業自建應用'),
feishuGuide2: _('在「添加应用能力」中添加「机器人」', 'Add "Bot" capability under "Add App Capabilities"', '在「新增應用能力」中新增「機器人」'),
feishuGuide3: _('在「凭证与基础信息」中获取 <strong>App ID</strong> 和 <strong>App Secret</strong>', 'Get <strong>App ID</strong> and <strong>App Secret</strong> from credentials page', '在「憑證與基礎資訊」中取得 <strong>App ID</strong> 和 <strong>App Secret</strong>'),
feishuGuide4: _('事件回调选择「长连接」方式(无需公网 IP', 'Select "Long Connection" for event callback (no public IP needed)', '事件回調選擇「長連線」方式(無需公網 IP'),
feishuGuide5: _('权限管理中搜索并开通 <code>im:message</code>、<code>im:message.group_at_msg</code> 等消息权限', '权限管理中搜索并开通 <code>im:message</code>、<code>im:message.group_at_msg</code> 等消息权限', '權限管理中搜尋並開通 <code>im:message</code>、<code>im:message.group_at_msg</code> 等訊息權限'),
feishuGuide6: _('创建版本并发布后,将机器人添加到目标群', 'Create a version, publish, then add the bot to the target group', '建立版本並發佈后,將機器人新增到目標群'),
feishuGuideFooter: _('<div style="margin-top:8px;font-size:var(--font-size-xs);color:var(--text-tertiary)">推荐使用长连接方式,无需公网地址即可接收消息</div>', '<div style="margin-top:8px;font-size:var(--font-size-xs);color:var(--text-tertiary)">推荐使用长连接方式,无需公网地址即可接收消息</div>', '<div style="margin-top:8px;font-size:var(--font-size-xs);color:var(--text-tertiary)">推薦使用長連線方式,無需公網位址即可接收訊息</div>'),
feishuAppIdPh: _('飞书应用 App ID', 'Feishu App ID', '飛書應用 App ID'),
feishuAppSecretPh: _('飞书应用 App Secret', 'Feishu App Secret', '飛書應用 App Secret'),
feishuDomainLabel: _('平台域名', 'Platform Domain'),
feishuDomainFeishu: _('飞书 (feishu.cn)', 'Feishu (feishu.cn)', '飛書 (feishu.cn)'),
feishuDomainLark: _('Lark (larksuite.com)', 'Lark (larksuite.com)'),
telegramDesc: _('接入 Telegram Bot支持私聊和群组', 'Connect a Telegram Bot, supports DM and groups', '接入 Telegram Bot支援私聊和群組', 'Telegram Bot に接続'),
telegramGuide1: _('在 Telegram 中搜索 <a href="https://t.me/BotFather" target="_blank" rel="noopener">@BotFather</a> 并发送 <code>/newbot</code>', '在 Telegram 中搜索 <a href="https://t.me/BotFather" target="_blank" rel="noopener">@BotFather</a> 并发送 <code>/newbot</code>', '在 Telegram 中搜尋 <a href="https://t.me/BotFather" target="_blank" rel="noopener">@BotFather</a> 並發送 <code>/newbot</code>'),
telegramGuide2: _('按提示设置机器人名称和用户名', 'Follow prompts to set bot name and username', '按提示設定機器人名稱和使用者名'),
telegramGuide3: _('复制 BotFather 返回的 <strong>Bot Token</strong>', 'Copy the <strong>Bot Token</strong> returned by BotFather', '複製 BotFather 返回的 <strong>Bot Token</strong>'),
telegramGuide4: _('填入下方凭证并保存', 'Fill in credentials below and save', '填入下方憑證並儲存'),
telegramGuideFooter: _('<div style="margin-top:8px;font-size:var(--font-size-xs);color:var(--text-tertiary)">需要公网可达的服务器或使用 polling 模式</div>', '<div style="margin-top:8px;font-size:var(--font-size-xs);color:var(--text-tertiary)">需要公网可达的服务器或使用 polling 模式</div>', '<div style="margin-top:8px;font-size:var(--font-size-xs);color:var(--text-tertiary)">需要公網可達的伺服器或使用 polling 模式</div>'),
discordDesc: _('接入 Discord Bot支持服务器频道和私信', 'Connect a Discord Bot, supports server channels and DMs', '接入 Discord Bot支援伺服器頻道和私信', 'Discord Bot に接続'),
discordGuide1: _('前往 <a href="https://discord.com/developers/applications" target="_blank" rel="noopener">Discord Developer Portal</a> 创建 Application', '前往 <a href="https://discord.com/developers/applications" target="_blank" rel="noopener">Discord Developer Portal</a> 创建 Application', '前往 <a href="https://discord.com/developers/applications" target="_blank" rel="noopener">Discord Developer Portal</a> 建立 Application'),
discordGuide2: _('在 Bot 页面点击「Reset Token」获取 <strong>Bot Token</strong>', 'Click "Reset Token" on the Bot page to get the <strong>Bot Token</strong>', '在 Bot 頁面点擊「Reset Token」取得 <strong>Bot Token</strong>'),
discordGuide3: _('开启 <strong>MESSAGE CONTENT INTENT</strong>', 'Enable <strong>MESSAGE CONTENT INTENT</strong>', '開啟 <strong>MESSAGE CONTENT INTENT</strong>'),
discordGuide4: _('使用 OAuth2 URL Generator 邀请 Bot 加入服务器', 'Use OAuth2 URL Generator to invite the Bot to your server', '使用 OAuth2 URL Generator 邀請 Bot 加入伺服器'),
discordGuideFooter: _('<div style="margin-top:8px;font-size:var(--font-size-xs);color:var(--text-tertiary)">确保开启 Message Content Intent 以接收消息内容</div>', '<div style="margin-top:8px;font-size:var(--font-size-xs);color:var(--text-tertiary)">确保开启 Message Content Intent 以接收消息内容</div>', '<div style="margin-top:8px;font-size:var(--font-size-xs);color:var(--text-tertiary)">確保開啟 Message Content Intent 以接收訊息內容</div>'),
slackDesc: _('接入 Slack App支持频道和私信', 'Connect a Slack App, supports channels and DMs', '接入 Slack App支援頻道和私信', 'Slack に接続'),
slackGuide1: _('前往 <a href="https://api.slack.com/apps" target="_blank" rel="noopener">Slack API</a> 创建 App推荐 From a manifest', '前往 <a href="https://api.slack.com/apps" target="_blank" rel="noopener">Slack API</a> 创建 App推荐 From a manifest', '前往 <a href="https://api.slack.com/apps" target="_blank" rel="noopener">Slack API</a> 建立 App推薦 From a manifest'),
slackGuide2: _('在 OAuth & Permissions 中添加 Bot Token Scopes<code>chat:write</code>、<code>app_mentions:read</code> 等', 'Add Bot Token Scopes in OAuth & Permissions: <code>chat:write</code>, <code>app_mentions:read</code>, etc.', '在 OAuth & Permissions 中新增 Bot Token Scopes<code>chat:write</code>、<code>app_mentions:read</code> 等'),
slackGuide3: _('安装 App 到工作区,获取 <strong>Bot Token</strong>xoxb-', 'Install the App to your workspace and get the <strong>Bot Token</strong> (xoxb-)', '安裝 App 到工作區,取得 <strong>Bot Token</strong>xoxb-'),
slackGuide4: _('Socket Mode在 Basic Information 中开启 Socket Mode获取 <strong>App-Level Token</strong>xapp-', 'Socket Mode: Enable Socket Mode in Basic Information and get the <strong>App-Level Token</strong> (xapp-)', 'Socket Mode在 Basic Information 中開啟 Socket Mode取得 <strong>App-Level Token</strong>xapp-'),
slackGuide5: _('HTTP Mode在 Event Subscriptions 中填入请求 URL', 'HTTP Mode: Fill in the Request URL under Event Subscriptions', 'HTTP Mode在 Event Subscriptions 中填入請求 URL'),
slackGuideFooter: _('<div style="margin-top:8px;font-size:var(--font-size-xs);color:var(--text-tertiary)">Socket Mode 无需公网地址HTTP Mode 需要配置事件回调 URL</div>', '<div style="margin-top:8px;font-size:var(--font-size-xs);color:var(--text-tertiary)">Socket Mode 无需公网地址HTTP Mode 需要配置事件回调 URL</div>', '<div style="margin-top:8px;font-size:var(--font-size-xs);color:var(--text-tertiary)">Socket Mode 無需公網位址HTTP Mode 需要設定事件回調 URL</div>'),
modeLabel: _('连接模式', 'Connection Mode', '連線模式'),
slackSocketMode: _('Socket Mode推荐', 'Socket Mode (recommended)', 'Socket Mode推薦'),
slackHttpMode: _('HTTP Mode', 'HTTP Mode'),
slackAppTokenHint: _('Socket Mode 需要 App-Level Token (xapp-)', 'Socket Mode requires App-Level Token (xapp-)'),
slackSigningSecretPh: _('Signing Secret', 'Signing Secret'),
slackSigningSecretHint: _('HTTP Mode 下用于验证请求签名', 'Used to verify request signatures in HTTP Mode', 'HTTP Mode 下用於驗證請求簽章'),
slackTeamIdPh: _('可选,如 T01234567', 'Optional, e.g. T01234567', '可選,如 T01234567'),
slackWebhookPathPh: _('可选,如 /slack/events', 'Optional, e.g. /slack/events', '可選,如 /slack/events'),
dmPolicy: _('私信策略', 'DM Policy'),
policyDefault: _('默认', 'Default', '預設'),
dmAllow: _('允许私信', 'Allow DMs', '允許私信'),
dmDeny: _('拒绝私信', 'Deny DMs', '拒絕私信'),
groupPolicy: _('群组策略', 'Group Policy', '群組策略'),
groupAllChannels: _('所有频道', 'All channels', '所有頻道'),
groupMentionOnly: _('仅 @提及时', 'Only when @mentioned', '僅 @提及時'),
groupAllowlist: _('白名单', 'Allowlist', '白名單'),
allowFromPh: _('可选,逗号分隔用户/频道 ID', 'Optional, comma-separated user/channel IDs', '可選,逗號分隔使用者/頻道 ID'),
allowFromHint: _('限制允许的用户或频道 ID留空不限制', 'Restrict to specific user or channel IDs; leave empty for no restriction', '限制允許的使用者或頻道 ID留空不限制'),
weixinLabel: _('微信', 'WeChat'),
weixinDesc: _('通过 openclaw-weixin 插件接入个人微信', 'Connect personal WeChat via the openclaw-weixin plugin', '通過 openclaw-weixin 外掛接入個人微信'),
weixinGuide1: _('本功能基于 <strong>openclaw-weixin</strong> 插件', 'This feature is powered by the <strong>openclaw-weixin</strong> plugin', '本功能基於 <strong>openclaw-weixin</strong> 外掛'),
weixinGuide2: _('点击下方「一键安装插件」自动安装', 'Click "Install Plugin" below to auto-install', '点擊下方「一鍵安裝外掛」自動安裝'),
weixinGuide3: _('安装完成后点击「扫码登录」,用手机微信扫描二维码', 'After installation, click "Scan to Login" and scan the QR code with your phone', '安裝完成后点擊「掃碼登入」,用手機微信掃描二维碼'),
weixinGuide4: _('登录成功后 Gateway 会自动接管消息', 'Once logged in, Gateway will automatically handle messages', '登入成功后 Gateway 會自動接管訊息'),
weixinGuide5: _('若掉线需重新扫码登录', 'Re-scan is needed if disconnected', '若掉線需重新掃碼登入'),
weixinGuideFooter: _('<div style="margin-top:8px;font-size:var(--font-size-xs);color:var(--text-tertiary)">注意:个人微信接入存在风控风险,建议使用小号</div>', '<div style="margin-top:8px;font-size:var(--font-size-xs);color:var(--text-tertiary)">注意:个人微信接入存在风控风险,建议使用小号</div>', '<div style="margin-top:8px;font-size:var(--font-size-xs);color:var(--text-tertiary)">注意:個人微信接入存在風控風險,建議使用小號</div>'),
weixinInstall: _('一键安装插件', 'Install Plugin', '一鍵安裝外掛'),
weixinInstallHint: _('自动下载并安装 openclaw-weixin 插件', 'Auto-download and install the openclaw-weixin plugin', '自動下載並安裝 openclaw-weixin 外掛'),
weixinLogin: _('扫码登录', 'Scan to Login', '掃碼登入'),
weixinLoginHint: _('启动微信登录流程,扫码后自动接管消息', 'Start the WeChat login flow; messages are handled after scanning', '啟動微信登入流程,掃碼后自動接管訊息'),
weixinScanQr: _('用手机微信扫描此二维码', 'Scan this QR code with WeChat on your phone', '用手機微信掃描此二维碼'),
msteamsDesc: _('接入 Microsoft Teams Bot', 'Connect a Microsoft Teams Bot'),
msteamsGuide1: _('在 <a href="https://portal.azure.com" target="_blank" rel="noopener">Azure Portal</a> 注册 Bot Channel Registration', '在 <a href="https://portal.azure.com" target="_blank" rel="noopener">Azure Portal</a> 注册 Bot Channel Registration', '在 <a href="https://portal.azure.com" target="_blank" rel="noopener">Azure Portal</a> 註冊 Bot Channel Registration'),
msteamsGuide2: _('获取 <strong>App ID</strong> 和 <strong>App Password</strong>', 'Get the <strong>App ID</strong> and <strong>App Password</strong>', '取得 <strong>App ID</strong> 和 <strong>App Password</strong>'),
msteamsGuide3: _('在 Teams 中安装自定义 App', 'Install the custom App in Teams', '在 Teams 中安裝自定義 App'),
msteamsGuide4: _('配置消息端点 URL', 'Configure the messaging endpoint URL', '設定訊息端点 URL'),
msteamsGuideFooter: _('<div style="margin-top:8px;font-size:var(--font-size-xs);color:var(--text-tertiary)">需要 Azure AD 应用注册和 Teams 管理员权限</div>', '<div style="margin-top:8px;font-size:var(--font-size-xs);color:var(--text-tertiary)">需要 Azure AD 应用注册和 Teams 管理员权限</div>', '<div style="margin-top:8px;font-size:var(--font-size-xs);color:var(--text-tertiary)">需要 Azure AD 應用註冊和 Teams 管理員權限</div>'),
msteamsTenantIdPh: _('可选,单租户时填写', 'Optional, fill for single-tenant', '可選,單租戶時填写'),
msteamsAllowFromPh: _('可选,逗号分隔', 'Optional, comma-separated', '可選,逗號分隔'),
signalDesc: _('接入 Signal Messenger', 'Connect to Signal Messenger', '', 'Signal に接続'),
signalGuide1: _('安装 <a href="https://github.com/AsamK/signal-cli" target="_blank" rel="noopener">signal-cli</a> 并注册/链接账号', '安装 <a href="https://github.com/AsamK/signal-cli" target="_blank" rel="noopener">signal-cli</a> 并注册/链接账号', '安裝 <a href="https://github.com/AsamK/signal-cli" target="_blank" rel="noopener">signal-cli</a> 並註冊/連結账號'),
signalGuide2: _('确保 signal-cli 可正常收发消息', 'Ensure signal-cli can send and receive messages', '確保 signal-cli 可正常收發訊息'),
signalGuide3: _('填入账号信息和 signal-cli 路径', 'Fill in account info and signal-cli path', '填入账號資訊和 signal-cli 路徑'),
signalGuideFooter: _('<div style="margin-top:8px;font-size:var(--font-size-xs);color:var(--text-tertiary)">需要本地安装 signal-cli 并完成账号注册</div>', '<div style="margin-top:8px;font-size:var(--font-size-xs);color:var(--text-tertiary)">需要本地安装 signal-cli 并完成账号注册</div>', '<div style="margin-top:8px;font-size:var(--font-size-xs);color:var(--text-tertiary)">需要本地安裝 signal-cli 並完成账號註冊</div>'),
signalAccountLabel: _('Signal 账号', 'Signal Account', 'Signal 账號'),
signalAccountPh: _('+1234567890', '+1234567890'),
signalCliPathLabel: _('signal-cli 路径', 'signal-cli Path', 'signal-cli 路徑'),
signalCliPathPh: _('可选,默认从 PATH 查找', 'Optional, defaults to PATH lookup', '可選,預設從 PATH 尋找'),
signalAllowFromPh: _('可选,逗号分隔', 'Optional, comma-separated', '可選,逗號分隔'),
matrixDesc: _('接入 Matrix 协议Element 等客户端)', 'Connect via Matrix protocol (Element and other clients)', '接入 Matrix 协議Element 等用戶端)', 'Matrix プロトコルに接続'),
matrixGuide1: _('在 Matrix 服务器上注册 Bot 账号', 'Register a Bot account on a Matrix server', '在 Matrix 伺服器上註冊 Bot 账號'),
matrixGuide2: _('获取 <strong>Access Token</strong>(或使用用户名密码)', 'Get an <strong>Access Token</strong> (or use username & password)', '取得 <strong>Access Token</strong>(或使用使用者名密碼)'),
matrixGuide3: _('邀请 Bot 加入目标房间', 'Invite the Bot to the target room', '邀請 Bot 加入目標房間'),
matrixGuideFooter: _('<div style="margin-top:8px;font-size:var(--font-size-xs);color:var(--text-tertiary)">支持任何兼容 Matrix 协议的服务器</div>', '<div style="margin-top:8px;font-size:var(--font-size-xs);color:var(--text-tertiary)">支持任何兼容 Matrix 协议的服务器</div>', '<div style="margin-top:8px;font-size:var(--font-size-xs);color:var(--text-tertiary)">支援任何相容 Matrix 协議的伺服器</div>'),
matrixAccessTokenHint: _('使用 Access Token 或 User ID + Password 二选一', 'Use either Access Token or User ID + Password', '使用 Access Token 或 User ID + Password 二選一'),
matrixPasswordPh: _('使用 Access Token 时可留空', 'Leave empty when using Access Token', '使用 Access Token 時可留空'),
matrixAllowFromPh: _('可选,逗号分隔用户 ID', 'Optional, comma-separated user IDs', '可選,逗號分隔使用者 ID'),
matrixAuthRequired: _('Matrix 需要填写 Access Token或填写 User ID + Password', 'Matrix requires an Access Token, or User ID + Password'),
groupAllGroups: _('所有群组', 'All groups', '所有群組'),
groupAllRooms: _('所有房间', 'All rooms', '所有房間'),
groupAllTeams: _('所有团队', 'All teams', '所有團队'),
groupMentionBot: _('仅 @机器人时', 'Only when @bot', '僅 @機器人時'),
optionalEg: _('可选,如', 'Optional, e.g.', '可選,如'),
editAccountLabel: _('编辑 {id}', 'Edit {id}', '編輯 {id}'),
bound: _('已绑定', 'Bound', '已綁定'),
notBoundAgent: _('未绑定 Agent', 'No Agent bound', '未綁定 Agent'),
addAgentBindingForAccount: _('添加 Agent 绑定', 'Add Agent Binding', '新增 Agent 綁定'),
addAgentBindingSub: _('为该账号添加新的 Agent 路由', 'Add a new Agent route for this account', '為該账號新增新的 Agent 路由'),
editConfig: _('编辑配置', 'Edit Config', '編輯設定'),
addAgentBinding: _('添加 Agent 绑定', 'Add Agent Binding', '新增 Agent 綁定'),
routeToAgent: _('将收到的消息路由到指定 Agent', 'Route incoming messages to a specific Agent', '將收到的訊息路由到指定 Agent'),
addNewAccount: _('添加新账号', 'Add New Account', '新增新账號'),
addNewAccountSub: _('创建一个新的机器人账号配置', 'Create a new bot account configuration', '建立一個新的機器人账號設定'),
actions: _('操作', 'Actions', '', '操作'),
bindAgentTitle: _('绑定 Agent', 'Bind Agent', '綁定 Agent'),
targetAgent: _('目标 Agent', 'Target Agent', '目標 Agent'),
targetAgentHint: _('选择接收消息的 Agent', 'Select the Agent to receive messages', '選擇接收訊息的 Agent'),
peerScope: _('匹配范围', 'Match Scope', '匹配範圍'),
peerAll: _('全部(私聊+群聊)', 'All (DM + Group)'),
peerAllHint: _('接收该渠道所有消息', 'Receive all messages from this channel', '接收該頻道所有訊息'),
peerDirect: _('仅私聊', 'DM Only', '僅私聊'),
peerDirectHint: _('仅接收一对一私聊消息', 'Only receive one-on-one direct messages', '僅接收一对一私聊訊息'),
peerDirectLabel: _('私聊', 'DM'),
peerGroup: _('仅群聊', 'Group Only', '僅群聊'),
peerGroupHint: _('仅接收群组/频道消息', 'Only receive group/channel messages', '僅接收群組/頻道訊息'),
peerGroupLabel: _('群聊', 'Group'),
peerIdHint: _('目标 ID', 'Target ID', '目標 ID'),
peerIdHintDetailed: _('限定特定群/用户 ID留空则匹配所有', 'Restrict to a specific group/user ID; leave empty to match all', '限定特定群/使用者 ID留空則匹配所有'),
targetId: _('目标 ID', 'Target ID', '目標 ID'),
saveBinding: _('保存绑定', 'Save Binding', '儲存綁定'),
duplicateBinding: _('已存在相同的绑定配置', 'A binding with the same configuration already exists', '已存在相同的綁定設定'),
saving: _('保存中...', 'Saving...', '儲存中...', '保存中...', '저장 중...'),
bindingSaved: _('绑定已保存', 'Binding saved', '綁定已儲存'),
saveFailed: _('保存失败', 'Save failed', '儲存失敗', '保存失敗', '저장 실패', 'Lưu thất bại', 'Error al guardar', 'Falha ao salvar', 'Ошибка сохранения', 'Échec de la sauvegarde', 'Speichern fehlgeschlagen'),
accountLabel: _('账号', 'Account', '账號'),
defaultAccount: _('默认账号', 'Default Account', '預設账號'),
accountShort: _('账号', 'Acct', '账號'),
peerDm: _('私聊', 'DM'),
peerGroupShort: _('群聊', 'Group'),
peerChannelShort: _('频道', 'Channel', '頻道'),
noAgents: _('暂无 Agent', 'No Agents', '暫無 Agent'),
orphanAgent: _('配置中存在绑定,但当前 Agent 列表中无此 ID', 'Binding exists in config but Agent ID not found in current list', '設定中存在綁定,但目前 Agent 列表中無此 ID'),
diagnose: _('联通诊断', 'Diagnose', '聯通诊斷'),
remove: _('移除', 'Remove'),
noBindings: _('尚未绑定任何渠道', 'No channel bindings yet', '尚未綁定任何頻道'),
addChannelBinding: _('添加渠道绑定', 'Add Channel Binding', '新增頻道綁定'),
enableChannelFirst: _('请先在「渠道列表」中接入并启用至少一个渠道', 'Please connect and enable at least one channel in "Channel List" first', '請先在「頻道列表」中接入並啟用至少一個頻道'),
confirmRemoveBinding: _('确定移除该绑定?', 'Remove this binding?', '確定移除該綁定?'),
bindingRemoved: _('绑定已移除', 'Binding removed', '綁定已移除'),
addBindingForAgent: _('为 {agent} 添加渠道绑定', 'Add channel binding for {agent}', '為 {agent} 新增頻道綁定'),
channel: _('渠道', 'Channel', '頻道'),
bindingIndependentHint: _('每条绑定独立生效,可为同一渠道添加多条不同匹配规则', 'Each binding works independently; you can add multiple rules for the same channel', '每條綁定獨立生效,可為同一頻道新增多條不同匹配規則'),
subAccount: _('子账号', 'Sub-account', '子账號'),
noMultiAccount: _('该渠道不支持多账号', 'This channel does not support multiple accounts', '該頻道不支援多账號'),
noMultiAccountHint: _('请先在渠道列表中添加多个账号', 'Add multiple accounts in the channel list first', '請先在頻道列表中新增多個账號'),
confirmRemoveAccount: _('确定移除该账号及其所有配置?', 'Remove this account and all its config?', '確定移除該账號及其所有設定?'),
removed: _('已移除', 'Removed'),
removeFailed: _('移除失败', 'Remove failed', '移除失敗'),
disabled: _('已禁用', 'Disabled', '已停用'),
enabled: _('已启用', 'Enabled', '已啟用'),
operationFailed: _('操作失败', 'Operation failed', '操作失敗'),
confirmRemovePlatform: _('确定移除该平台及其所有配置?', 'Remove this platform and all its config?', '確定移除該平台及其所有設定?'),
supportsActions: _('支持操作', 'Supports actions', '支援操作'),
connectedClickEdit: _('已接入,点击编辑', 'Connected, click to edit', '已接入,点擊編輯'),
qqDiagAllPassed: _('全部检查通过 ✓', 'All checks passed ✓', '全部檢查通過 ✓'),
qqDiagHasFailed: _('存在未通过的检查项', 'Some checks failed', '存在未通過的檢查項'),
qqRepairHint: _('可尝试一键修复:重新安装插件并重启 Gateway', 'Try one-click repair: reinstall plugin and restart Gateway', '可尝試一鍵修复:重新安裝外掛並重啟 Gateway'),
qqRepairBtn: _('一键修复', 'One-Click Repair', '一鍵修复'),
qqFaqBtn: _('打开 QQ OpenClaw 常见问题', 'Open QQ OpenClaw FAQ', '開啟 QQ OpenClaw 常见問題'),
qqDiagTitle: _('QQ 联通诊断', 'QQ Connectivity Diagnosis', 'QQ 聯通诊斷'),
notes: _('说明', 'Notes', '說明'),
processing: _('处理中...', 'Processing...', '處理中...'),
repairDone: _('修复完成', 'Repair complete'),
repairFailed: _('修复失败', 'Repair failed', '修复失敗'),
unknownChannelType: _('无法识别渠道类型', 'Unrecognized channel type', '無法識別頻道類型'),
diagnosing: _('诊断中...', 'Diagnosing...', '诊斷中...'),
testing: _('测试中...', 'Testing...', '測試中...', 'テスト中...', '테스트 중...', 'Đang kiểm tra...', 'Probando...', 'Testando...', 'Проверка...', 'Test en cours...', 'Wird getestet...'),
noCredentialsFound: _('未找到该渠道在配置中的凭证', 'No credentials found for this channel in config', '未找到該頻道在設定中的憑證'),
testPassed: _('渠道测试通过', 'Channel test passed', '頻道測試通過'),
verifyFailed: _('校验失败', 'Verification failed', '校驗失敗'),
testFailed: _('渠道测试失败', 'Channel test failed', '頻道測試失敗', '接続失敗', '연결 실패', 'Kết nối thất bại', 'Conexión fallida', 'Conexão falhou', 'Ошибка подключения', 'Connexion échouée', 'Verbindung fehlgeschlagen'),
diagFailed: _('诊断失败', 'Diagnosis failed', '诊斷失敗'),
connectingGateway: _('连接 Gateway...', 'Connecting Gateway...', '連線 Gateway...'),
gatewayNotConnected: _('Gateway 未连接', 'Gateway not connected', 'Gateway 未連線'),
generatingQr: _('正在生成二维码...', 'Generating QR code...', '正在生成二维碼...'),
generatingQrShort: _('生成二维码...', 'Generating QR...', '生成二维碼...'),
whatsappScanQr: _('用手机 WhatsApp 扫描此二维码', 'Scan this QR code with WhatsApp on your phone', '用手機 WhatsApp 掃描此二维碼'),
whatsappScanPath: _('WhatsApp → 已连接的设备 → 连接设备', 'WhatsApp → Linked Devices → Link a Device', 'WhatsApp → 已連線的設備 → 連線設備'),
waitingScan: _('等待扫码...', 'Waiting for scan...', '等待掃碼...'),
whatsappLinked: _('WhatsApp 链接成功!', 'WhatsApp linked successfully!', 'WhatsApp 連結成功!'),
whatsappAlreadyLinked: _('WhatsApp 已链接,无需重新扫码', 'WhatsApp is already linked, no need to re-scan', 'WhatsApp 已連結,無需重新掃碼'),
linkedSuccess: _('链接成功!', 'Linked successfully!', '連結成功!'),
scanTimeout: _('扫码超时', 'Scan timed out', '掃碼逾時'),
scanTimeoutRetry: _('扫码超时或未完成,请重试', 'Scan timed out or not completed, please retry', '掃碼逾時或未完成,請重試'),
whatsappNotAvailableHint: _('WhatsApp 插件未加载', 'WhatsApp plugin not loaded', 'WhatsApp 外掛未載入'),
scanLoginFailed: _('扫码登录失败', 'Scan login failed', '掃碼登入失敗'),
unknownPlatform: _('未知平台', 'Unknown platform'),
setupSteps: _('接入步骤', 'Setup Steps', '接入步驟'),
clickToExpand: _('点击展开', 'click to expand', '点擊展開'),
docsOnlyTitle: _('当前面板暂未完成该渠道的可用配置向导', 'Configuration wizard for this channel is not yet available', '目前面板暂未完成該頻道的可用設定向导'),
docsOnlyDefault: _('请先按上游文档或 CLI 完成接入', 'Please complete setup via upstream docs or CLI first', '請先按上游文件或 CLI 完成接入'),
setupGuide: _('接入说明', 'Setup Guide', '接入說明'),
gotIt: _('知道了', 'Got It'),
detectingPlugin: _('检测插件状态...', 'Detecting plugin status...', '檢測外掛狀態...'),
operations: _('操作', 'Operations'),
setup: _('接入', 'Setup'),
close: _('关闭', 'Close', '關閉'),
pluginStatusFailed: _('无法获取插件状态', 'Failed to get plugin status', '無法取得外掛狀態'),
pluginInstalled: _('已安装', 'Installed', '已安裝', 'プラグインインストール済み'),
version: _('版本', 'Version'),
unknown: _('未知', 'Unknown'),
newVersionAvailable: _('新版 {version} 可用,点击「升级插件」更新', 'New version {version} available, click "Upgrade Plugin" to update', '新版 {version} 可用,点擊「升級外掛」更新'),
upgradePlugin: _('升级插件', 'Upgrade Plugin', '升級外掛'),
upToDate: _('已是最新', 'Up to date'),
pluginNotInstalled: _('未安装', 'Not installed', '未安裝', 'プラグイン未インストール'),
latestVersion: _('最新版', 'Latest version'),
clickInstallBelow: _('点击下方「一键安装插件」开始', 'Click "Install Plugin" below to get started', '点擊下方「一鍵安裝外掛」開始'),
executing: _('正在执行', 'Executing', '正在執行'),
executingShort: _('执行中...', 'Executing...', '執行中...'),
executingAction: _('正在执行渠道动作', 'Executing channel action', '正在執行頻道動作'),
executionDone: _('执行完成', 'Execution complete', '執行完成'),
executionFailed: _('执行失败', 'Execution failed', '執行失敗'),
unknownError: _('未知错误', 'Unknown error', '未知錯誤'),
execute: _('执行', 'Execute', '執行'),
channelConnected: _('🎉 渠道连接成功!正在刷新列表…', '🎉 Channel connected! Refreshing list...', '🎉 頻道連線成功!正在重新整理列表…'),
reDetecting: _('重新检测…', 'Re-detecting...', '重新檢測…'),
actionDone: _('渠道动作执行完成', 'Channel action completed', '頻道動作執行完成'),
actionFailed: _('渠道动作执行失败', 'Channel action failed', '頻道動作執行失敗'),
accountIdentifier: _('账号标识', 'Account Identifier', '账號標識'),
accountIdPlaceholder: _('留空为默认账号;修改会创建新账号', 'Leave empty for default account; changing creates a new account', '留空為預設账號;修改會建立新账號'),
accountIdHint: _('每个账号对应一个独立机器人。不同账号可绑定不同 Agent。', 'Each account corresponds to an independent bot. Different accounts can bind to different Agents.', '每個账號对應一個獨立機器人。不同账號可綁定不同 Agent。'),
bindAgent: _('绑定 Agent', 'Bind Agent', '綁定 Agent', 'Agent をバインド', 'Agent 바인딩', 'Liên kết Agent', 'Vincular Agent', 'Vincular Agent', 'Привязать агента', 'Lier un Agent', 'Agent verknüpfen'),
bindAgentHint: _('该账号收到的消息路由到哪个 Agent可在「Agent 对接」页添加更多绑定)。', 'Which Agent receives messages for this account (add more bindings in "Agent Binding" tab).', '該账號收到的訊息路由到哪個 Agent可在「Agent 对接」頁新增更多綁定)。'),
show: _('显示', 'Show', '顯示'),
hide: _('隐藏', 'Hide', '隱藏'),
pairingApproval: _('配对审批', 'Pairing Approval', '配对審批'),
pairingApprovalHint: _('当机器人提示 <code>access not configured</code>、<code>Pairing code</code> 或要求执行 <code>openclaw pairing approve</code> 时,可直接在这里完成批准。', 'When the bot shows <code>access not configured</code>, <code>Pairing code</code>, or asks to run <code>openclaw pairing approve</code>, you can approve directly here.', '當機器人提示 <code>access not configured</code>、<code>Pairing code</code> 或要求執行 <code>openclaw pairing approve</code> 時,可直接在這裡完成批準。'),
pairingCodePlaceholder: _('例如 R3ZFPWZP', 'e.g. R3ZFPWZP', '', 'ペアリングコードを入力'),
viewPending: _('查看待审批', 'View Pending', '查看待審批'),
approvePairingCode: _('批准配对码', 'Approve Pairing Code', '批準配对碼'),
preActions: _('运行前动作', 'Pre-run Actions', '執行前動作'),
preActionsHint: _('适用于需要先执行 CLI 登录、扫码或初始化命令的渠道。', 'For channels that require CLI login, scanning, or initialization commands first.', '適用於需要先執行 CLI 登入、掃碼或初始化命令的頻道。'),
gatewayAuthAutoFilled: _('已从当前 Gateway 鉴权配置中自动带出 {type},通常无需手填', 'Auto-filled {type} from current Gateway auth config; usually no need to fill manually', '已從目前 Gateway 鉴權設定中自動帶出 {type},通常無需手填'),
existingConfigHint: _('当前已有配置,修改后点击保存即可覆盖', 'Existing config found; edit and click Save to overwrite', '目前已有設定,修改后点擊儲存即可覆蓋'),
fullDiagnose: _('完整联通诊断', 'Full Connectivity Diagnosis', '完整聯通诊斷'),
qqDiagHint: _('检查<strong>已保存到配置文件</strong>的凭证、本机 Gateway 端口、<code>/__api/health</code>、QQ 插件与 chatCompletions。QQ 提示「灵魂不在线」时优先看此处,并参考 <a href="https://q.qq.com/qqbot/openclaw/faq.html" target="_blank" rel="noopener">OpenClaw × QQ 常见问题</a>。', '检查<strong>已保存到配置文件</strong>的凭证、本机 Gateway 端口、<code>/__api/health</code>、QQ 插件与 chatCompletions。QQ 提示「灵魂不在线」时优先看此处,并参考 <a href="https://q.qq.com/qqbot/openclaw/faq.html" target="_blank" rel="noopener">OpenClaw × QQ 常见问题</a>。', '檢查<strong>已儲存到設定檔案</strong>的憑證、本機 Gateway 連接埠、<code>/__api/health</code>、QQ 外掛與 chatCompletions。QQ 提示「靈魂不線上」時優先看此處,並參考 <a href="https://q.qq.com/qqbot/openclaw/faq.html" target="_blank" rel="noopener">OpenClaw × QQ 常见問題</a>。'),
edit: _('编辑', 'Edit', '編輯', '編集', '편집', 'Sửa', 'Editar', 'Editar', 'Редактировать', 'Modifier', 'Bearbeiten'),
connect: _('接入', 'Connect'),
verifyCredentials: _('校验凭证', 'Verify Credentials', '校驗憑證'),
save: _('保存', 'Save', '儲存', '保存', '저장', 'Lưu', 'Guardar', 'Salvar', 'Сохранить', 'Enregistrer', 'Speichern'),
connectAndSave: _('接入并保存', 'Connect & Save', '接入並儲存'),
reading: _('读取中...', 'Reading...', '讀取中...'),
pendingRequests: _('待审批请求', 'Pending Requests', '待審批請求'),
noPendingRequests: _('暂无待审批请求', 'No pending requests', '暫無待審批請求'),
readFailed: _('读取失败', 'Read failed', '讀取失敗'),
enterPairingCode: _('请输入配对码', 'Please enter pairing code', '請輸入配对碼'),
approving: _('批准中...', 'Approving...', '批準中...', '承認中...'),
pairingApproved: _('配对已批准', 'Pairing approved', '配对已批準'),
operationComplete: _('操作完成', 'Operation complete'),
approveFailed: _('批准失败', 'Approve failed', '批準失敗', '承認失敗', '승인 실패'),
pleaseFill: _('请填写「{field}」', 'Please fill in "{field}"', '請填写「{field}」'),
verifying: _('校验中...', 'Verifying...', '校驗中...'),
credentialsValid: _('凭证有效', 'Credentials valid', '憑證有效'),
qqVerifyNote: _('此项只验证 AppID/Secret 能否向腾讯换 token。<strong>不能</strong>代表 QQ 里机器人已在线;若提示「灵魂不在线」,请使用下方 <strong>完整联通诊断</strong> 并对照 <a href="https://q.qq.com/qqbot/openclaw/faq.html" target="_blank" rel="noopener">QQ OpenClaw 常见问题</a>。', '此项只验证 AppID/Secret 能否向腾讯换 token。<strong>不能</strong>代表 QQ 里机器人已在线;若提示「灵魂不在线」,请使用下方 <strong>完整联通诊断</strong> 并对照 <a href="https://q.qq.com/qqbot/openclaw/faq.html" target="_blank" rel="noopener">QQ OpenClaw 常见问题</a>。', '此項只驗證 AppID/Secret 能否向腾訊換 token。<strong>不能</strong>代表 QQ 里機器人已線上;若提示「靈魂不線上」,請使用下方 <strong>完整聯通诊斷</strong> 並对照 <a href="https://q.qq.com/qqbot/openclaw/faq.html" target="_blank" rel="noopener">QQ OpenClaw 常见問題</a>。'),
verifyRequestFailed: _('校验请求失败', 'Verification request failed', '校驗請求失敗'),
installingPlugin: _('安装插件中...', 'Installing plugin...', '安裝外掛中...'),
installPlugin: _('安装插件', 'Install Plugin', '安裝外掛', 'プラグインインストール', '플러그인 설치', 'Cài đặt plugin', 'Instalar plugin', 'Instalar plugin', 'Установить плагин', 'Installer le plugin', 'Plugin installieren'),
pluginInstallFailed: _('插件安装失败', 'Plugin installation failed', '外掛安裝失敗'),
pluginDetected: _('已检测到插件,无需重复安装,本次仅更新配置', 'Plugin detected, no need to reinstall; only updating config', '已檢測到外掛,無需重複安裝,本次僅更新設定'),
writingConfig: _('写入配置...', 'Writing config...', '写入設定...'),
configSaved: _('{platform} 配置已保存Gateway 正在重载', '{platform} config saved, Gateway is reloading', '{platform} 設定已儲存Gateway 正在重載'),
}