mirror of
https://github.com/hansjone/dsh-im-ops.git
synced 2026-10-09 01:53:21 +08:00
Pass inbound group titles into <dsh_im_source> without extra platform API lookups. DingTalk uses conversationTitle; Telegram groups use chat.title.
976 lines
85 KiB
JavaScript
976 lines
85 KiB
JavaScript
import * as React from 'react';
|
||
|
||
export const IM_LOCALE_NAMESPACE = 'dsh-im';
|
||
|
||
const EN = Object.freeze({
|
||
'$locale': 'en',
|
||
'IM机器人': 'IM bots',
|
||
'IM机器人设置': 'IM bot settings',
|
||
'更多机器人设置': 'More bot settings',
|
||
'机器人设置': 'Bot settings',
|
||
'机器人设置页签': 'Bot settings tabs',
|
||
'投递设置': 'Delivery settings',
|
||
'访问设置': 'Access settings',
|
||
'查看访问权限说明': 'View access permission details',
|
||
'允许所有用户': 'Allow all users',
|
||
'仅白名单用户': 'Allowlisted users only',
|
||
'默认命令权限': 'Default command permission',
|
||
'命令权限': 'Command permission',
|
||
'可以执行命令': 'Can run commands',
|
||
'不可以执行命令': 'Cannot run commands',
|
||
'白名单用户': 'Allowlisted users',
|
||
'查看白名单说明': 'View allowlist details',
|
||
'命令权限例外': 'Command permission exceptions',
|
||
'当前没有白名单用户,保存后普通用户将无法使用机器人。': 'There are currently no allowlisted users. After saving, regular users will not be able to use the bot.',
|
||
'新增用户': 'Add user',
|
||
'尚未添加用户': 'No users added',
|
||
'当前渠道不支持群聊': 'Group chat is not supported by this channel',
|
||
'原所有者或扫码接入者始终可以访问并执行命令;以下设置仅约束其他用户。': 'The original owner or QR-code operator can always access the bot and run commands; the settings below apply only to other users.',
|
||
'此区域无需配置,保存私聊设置时会保留现有群聊策略。': 'No setup is needed here. Saving direct-message settings keeps the existing group policy.',
|
||
'访问设置已保存。': 'Access settings saved.',
|
||
'访问设置暂不可用。': 'Access settings are currently unavailable.',
|
||
'访问设置保存失败,请稍后重试。': 'Could not save access settings. Try again later.',
|
||
'服务没有返回已保存的访问策略,请刷新后重试。': 'The service did not return the saved access policy. Refresh and try again.',
|
||
'访问策略尚未就绪,请返回机器人列表刷新后重试。': 'The access policy is not ready. Return to the bot list, refresh, and try again.',
|
||
'当前渠道暂不支持访问设置。': 'Access settings are not supported by this channel yet.',
|
||
'用户标识无效。': 'The user ID is invalid.',
|
||
'用户标识必须是字符串。': 'The user ID must be a string.',
|
||
'用户标识不能为空、包含控制字符或超过 256 个字符。': 'The user ID cannot be empty, contain control characters, or exceed 256 characters.',
|
||
'用户条目必须包含用户标识和命令权限。': 'Each user entry must include a user ID and command permission.',
|
||
'命令权限必须是布尔值。': 'Command permission must be a boolean.',
|
||
'访问模式只能是 open 或 allowlist。': 'Access mode must be open or allowlist.',
|
||
'开放模式设置必须完整。': 'Open-mode settings must be complete.',
|
||
'开放模式默认命令权限必须是布尔值。': 'The open-mode default command permission must be a boolean.',
|
||
'开放模式命令权限覆盖用户必须是数组。': 'Open-mode command permission overrides must be an array.',
|
||
'开放模式命令权限覆盖用户不能包含重复的用户标识。': 'Open-mode command permission overrides cannot contain duplicate user IDs.',
|
||
'白名单模式设置必须完整。': 'Allowlist-mode settings must be complete.',
|
||
'白名单模式用户必须是数组。': 'Allowlist-mode users must be an array.',
|
||
'白名单模式用户不能包含重复的用户标识。': 'Allowlist-mode users cannot contain duplicate user IDs.',
|
||
'访问场景设置必须同时包含模式、开放模式设置和白名单模式设置。': 'Each access context must include its mode, open-mode settings, and allowlist-mode settings.',
|
||
'请同时提交完整的私聊和群聊访问设置。': 'Submit complete direct-message and group access settings together.',
|
||
'填写微信用户 ID': 'Enter a WeChat user ID',
|
||
'飞书 Open ID': 'Feishu Open ID',
|
||
'群成员 Open ID': 'Group member Open ID',
|
||
'钉钉用户 ID': 'DingTalk user ID',
|
||
'填写 senderStaffId 或 senderId': 'Enter senderStaffId or senderId',
|
||
'群成员用户 ID': 'Group member user ID',
|
||
'企业微信用户 ID': 'WeCom user ID',
|
||
'填写 userid': 'Enter userid',
|
||
'填写 member_openid': 'Enter member_openid',
|
||
'QQ User Open ID': 'QQ User Open ID',
|
||
'群成员 User ID': 'Group member User ID',
|
||
'填写数字 User ID': 'Enter a numeric user ID',
|
||
'WhatsApp 电话号码或 JID': 'WhatsApp phone number or JID',
|
||
'群成员电话号码或 JID': 'Group member phone number or JID',
|
||
'8613800000000 或完整 JID': '8613800000000 or a full JID',
|
||
'IM 渠道': 'IM channels',
|
||
'让 DeepSeek Harness 触手可及': 'Connecting DeepSeek Harness',
|
||
'当前版本': 'Current version',
|
||
'DSH-IM 更新': 'DSH-IM update',
|
||
'检查更新': 'Check for updates',
|
||
'重新检查': 'Check again',
|
||
'刷新状态': 'Refresh status',
|
||
'手工更新': 'Manual update',
|
||
'手工更新命令': 'Manual update command',
|
||
'复制命令': 'Copy command',
|
||
'复制中…': 'Copying…',
|
||
'已复制': 'Copied',
|
||
'命令已复制。': 'Command copied.',
|
||
'复制失败,请选中命令后按 Ctrl+C 或 ⌘C 复制。': 'Copy failed. Select the command and press Ctrl+C or ⌘C to copy it.',
|
||
'自动更新失败可以使用命令更新:': 'If the automatic update fails, update with this command:',
|
||
'尚未确认目标版本,此命令安装执行时 npm 的 latest 版本。': 'No target version has been confirmed. This command installs the npm latest version available when you run it.',
|
||
'请在当前 Desktop 的内置终端执行,完成后手动重启。': 'Run this in the current Desktop’s built-in terminal, then restart manually.',
|
||
'请在运行当前 Harness 的同一环境执行,保持 DSH_HOME 一致,完成后手动重启。': 'Run this in the same environment as the current Harness, with the same DSH_HOME, then restart manually.',
|
||
'请等待当前操作结束,确认没有安装进程运行后再执行命令。': 'Wait for the current operation to finish and confirm no installer is running before using this command.',
|
||
'源码或链接安装请按原安装方式更新,不提供覆盖源码的 npm 命令。': 'Update source or linked installations using their original method. No npm command is provided to overwrite the source.',
|
||
'无法安全生成当前 profile 的命令,请在终端中手动确认 profile 后更新。': 'A safe command cannot be generated for this profile. Confirm the profile in your terminal before updating manually.',
|
||
'更新至': 'Update to',
|
||
'安装更新': 'Install update',
|
||
'正在更新…': 'Updating…',
|
||
'待手动重启': 'Restart needed',
|
||
'运行版本': 'Running version',
|
||
'已安装版本': 'Installed version',
|
||
'目标 profile': 'Target profile',
|
||
'目标版本': 'Target version',
|
||
'无法确认': 'Unknown',
|
||
'发现新版本': 'Update available',
|
||
'已是最新版本': 'Up to date',
|
||
'当前版本无需更新': 'No newer version available',
|
||
'已获取 npm 最新版本': 'Latest npm version retrieved',
|
||
'检查 npm 最新版本,不会自动安装。': 'Check the latest npm version. Nothing is installed automatically.',
|
||
'正在从 npm 检查最新版本…': 'Checking npm for the latest version…',
|
||
'正在安装,请稍候…': 'Installing, please wait…',
|
||
'正在校验安装结果…': 'Verifying the installation…',
|
||
'已安装,待手动重启': 'Installed — manual restart needed',
|
||
'更新已生效': 'Updated version is active',
|
||
'更新失败': 'Update failed',
|
||
'更新请求失败': 'Update request failed',
|
||
'仅更新 DSH-IM。安装完成后需手动重启后台;本功能不会自动重启或主动刷新页面。': 'Only DSH-IM will be updated. Restart the backend manually after installation. This feature does not automatically restart it or initiate a page refresh.',
|
||
'当前是源码或链接安装,只能检查版本;请手动更新源码,或迁移到 npm 安装。': 'This is a source or linked installation. You can check versions, but must update the source manually or migrate to an npm installation.',
|
||
'无法确认当前 profile,请在对应的 Harness 环境中手动更新。': 'The current profile could not be identified. Update manually in the corresponding Harness environment.',
|
||
'当前运行环境不支持按钮安装,请手动更新插件。': 'This runtime cannot install through this button. Update the plugin manually.',
|
||
'当前 npm 源配置与官方源不一致,请先检查 registry 配置。': 'The npm registry configuration differs from the official registry. Check your registry settings first.',
|
||
'当前 Host 的 Node.js 版本不满足新版要求,请先更新运行环境。': 'The Host Node.js version does not meet the new version’s requirements. Update the runtime first.',
|
||
'新版本已安装,请在方便时手动重启当前 Harness 或 Desktop。': 'The new version is installed. Manually restart this Harness or Desktop when convenient.',
|
||
'上次安装结果无法确认,请先检查此 profile 的插件安装状态。': 'The previous installation result is uncertain. Check this profile’s plugin installation first.',
|
||
'无法访问 npm 或请求超时,请稍后重新检查。': 'npm is unreachable or the request timed out. Check again later.',
|
||
'npm 返回的版本信息无效,暂时无法更新。': 'npm returned invalid release information. Updating is unavailable.',
|
||
'版本确认已过期,请重新检查后再安装。': 'The version confirmation expired. Check again before installing.',
|
||
'插件安装状态已发生变化,请重新检查。': 'The plugin installation changed. Check again.',
|
||
'此 profile 正在更新,请稍后查看状态。': 'This profile is already updating. Check its status shortly.',
|
||
'安装失败,请检查当前安装状态后重试。': 'Installation failed. Check the current installation before retrying.',
|
||
'安装结果校验失败,请手动检查插件版本。': 'Installation verification failed. Check the plugin version manually.',
|
||
'无法安全保存更新状态,请先检查当前安装结果。': 'Update state could not be saved safely. Check the current installation result before retrying.',
|
||
'上次更新已中断,请检查安装状态后重试。': 'The previous update was interrupted. Check the installation before retrying.',
|
||
'更新服务已关闭,请手动重新打开设置页。': 'The update service has closed. Reopen settings manually.',
|
||
'更新请求无效,请重新检查版本。': 'The update request is invalid. Check the version again.',
|
||
'当前插件安装不完整或与 profile 不符,请手动检查安装配置。': 'The plugin installation is incomplete or does not match this profile. Check the installation configuration manually.',
|
||
'无法确认当前 npm 源配置,暂时不能安装更新。': 'The npm registry configuration could not be verified. Installation is unavailable.',
|
||
'安装超时,请先确认当前安装状态,再决定是否重试。': 'Installation timed out. Check the current installation before retrying.',
|
||
'更新请求失败,请重试。': 'The update request failed. Try again.',
|
||
'更新服务返回了无法识别的响应。': 'The update service returned an unrecognized response.',
|
||
'当前 Host 不支持更新接口,请先手动更新插件并重启。': 'This Host does not support the update API. Update the plugin manually and restart first.',
|
||
'关闭窗口不会取消安装。请勿同时在其他窗口管理此 profile 的插件。': 'Closing this window does not cancel installation. Do not manage this profile’s plugins in another window at the same time.',
|
||
'页面版本与运行版本不同,请手动刷新页面;若仍不一致,请手动重启 Harness 或 Desktop。': 'The page and running versions differ. Refresh the page manually; if they still differ, manually restart Harness or Desktop.',
|
||
'请在机器人空闲时安装;安装会修改当前 profile 的依赖,完成后需手动重启。': 'Install while bots are idle. This changes the current profile’s dependencies and requires a manual restart afterward.',
|
||
'AI Office': 'AI Office',
|
||
'(实验功能)': '(Experimental)',
|
||
'AI Office 设置': 'AI Office settings',
|
||
'AI Office 设置页缺少 RPC 连接': 'AI Office settings are missing an RPC connection',
|
||
'正在读取 AI Office Connector…': 'Loading AI Office Connector…',
|
||
'本机主动连接公网 Office;Harness 不开放端口。协议 Hook 固定为 ': 'This machine connects outward to the public Office; Harness exposes no port. Protocol hooks: ',
|
||
'尚未配置': 'Not configured',
|
||
'已连接 Office': 'Connected to Office',
|
||
'已配置': 'Configured',
|
||
'等待重连': 'Waiting to reconnect',
|
||
'凭据缺失': 'Credential missing',
|
||
'最近心跳': 'Last heartbeat',
|
||
'最近事件': 'Last event',
|
||
'重连次数': 'Reconnects',
|
||
'运行 Job': 'Running Jobs',
|
||
'完成 Job': 'Completed Jobs',
|
||
'尚无': 'None yet',
|
||
'设备连接': 'Device connection',
|
||
'Token 只写入本机凭据存储': 'Token is written only to the local credential store',
|
||
'粘贴 Office 一次性凭据': 'Paste the one-time Office credential',
|
||
'已安全保存;留空保持不变': 'Stored securely; leave blank to keep it',
|
||
'最大并发': 'Max concurrency',
|
||
'Heartbeat 秒数': 'Heartbeat seconds',
|
||
'Workspace 映射': 'Workspace mappings',
|
||
'每行 alias=/本机/绝对路径;Office 只能看到 alias。': 'One alias=/local/absolute/path per line; Office sees only aliases.',
|
||
'Instruction Preset 映射': 'Instruction preset mappings',
|
||
'每行 alias=指令;新增 preset 不需要改 Office 代码。': 'One alias=instruction per line; new presets require no Office code change.',
|
||
'保存并连接': 'Save and connect',
|
||
'测试连接': 'Test connection',
|
||
'测试中…': 'Testing…',
|
||
'重新连接': 'Reconnect',
|
||
'移除连接': 'Remove connection',
|
||
'连接测试通过。': 'Connection test passed.',
|
||
'配置已保存。': 'Configuration saved.',
|
||
'协议 Hook 预览': 'Protocol hook preview',
|
||
'由 Base URL 自动派生,不单独填写': 'Derived from Base URL; no separate input',
|
||
'Base URL 无效': 'Invalid Base URL',
|
||
'Office Hook 尚未部署时,配置会安全保存并自动重试;出现 HTTP 404 代表协议端点待上线,不代表 Harness 故障。': 'Configuration is saved and retried while Office hooks are unavailable; HTTP 404 means the protocol endpoint is pending, not a Harness failure.',
|
||
'Workspace 映射每行必须使用 alias=value': 'Each workspace mapping must use alias=value',
|
||
'Instruction Preset 映射每行必须使用 alias=value': 'Each instruction preset mapping must use alias=value',
|
||
'action-items=转换为负责人、截止和验收明确的工单': 'action-items=Turn this into accountable tasks with deadlines and acceptance criteria',
|
||
'AI Office 拒绝了 Device Token。': 'AI Office rejected the Device Token.',
|
||
'AI Office Connector Hook 尚未就绪。': 'AI Office Connector hooks are not available yet.',
|
||
'AI Office Connector 协议版本不兼容。': 'The AI Office Connector protocol is incompatible.',
|
||
'本机暂时无法访问 AI Office。': 'AI Office cannot currently be reached from this machine.',
|
||
'AI Office 连接已中断。': 'The AI Office connection was interrupted.',
|
||
'帮助与反馈 · 前往 GitHub': 'Help & feedback · Open GitHub',
|
||
'请改用 localhost 重新打开': 'Reopen with localhost',
|
||
'页面会在当前端口重新打开,机器人配置不会改变。': 'The page will reopen on the current port. Your bot configuration will not change.',
|
||
'使用 localhost 重新打开': 'Reopen with localhost',
|
||
'当前地址与浏览器的本机请求校验不兼容。请使用上方按钮改用 localhost 重新打开。': 'This address is incompatible with the browser’s local-request checks. Use the button above to reopen with localhost.',
|
||
'微信': 'WeChat',
|
||
'飞书': 'Feishu',
|
||
'钉钉': 'DingTalk',
|
||
'企业微信': 'WeCom',
|
||
'微信机器人': 'WeChat bot',
|
||
'飞书机器人': 'Feishu bot',
|
||
'钉钉机器人': 'DingTalk bot',
|
||
'企业微信机器人': 'WeCom bot',
|
||
'QQ机器人': 'QQ bot',
|
||
'WhatsApp机器人': 'WhatsApp bot',
|
||
'WhatsApp账号': 'WhatsApp account',
|
||
'微信设置': 'WeChat settings',
|
||
'飞书机器人设置': 'Feishu bot settings',
|
||
'群聊响应方式': 'Group response mode',
|
||
'仅在 @机器人时响应(推荐)': 'Only respond when @mentioned (recommended)',
|
||
'响应所有群消息': 'Respond to all group messages',
|
||
'响应所有群消息(需飞书敏感权限)': 'Respond to all group messages (requires a sensitive Feishu scope)',
|
||
'重新授权': 'Reauthorize',
|
||
'去授权': 'Authorize',
|
||
'重新授权群消息权限': 'Reauthorize group-message permission',
|
||
'授权群消息权限': 'Authorize group-message permission',
|
||
'正在准备授权…': 'Preparing authorization…',
|
||
'正在准备…': 'Preparing…',
|
||
'私聊始终响应;群聊仅处理明确 @当前机器人的消息。群消息权限已开通,再次切换无需授权。': 'Direct messages always work; group chats require an explicit @mention of this bot. The group-message permission is already granted, so switching again needs no authorization.',
|
||
'私聊始终响应;群聊仅处理明确 @当前机器人的消息。选择全部消息后会打开飞书官方授权流程。': 'Direct messages always work; group chats require an explicit @mention of this bot. Selecting all messages opens the official Feishu authorization flow.',
|
||
'已开通“获取群组中所有消息”权限(im:message.group_msg);机器人会处理群聊中的所有可见消息。': 'The “Read all messages in associated group chat” scope (im:message.group_msg) is granted; the bot processes every visible group message.',
|
||
'尚未确认“获取群组中所有消息”权限,请完成飞书授权。': 'The “Read all messages in associated group chat” scope has not been confirmed. Complete Feishu authorization.',
|
||
'私聊始终响应;群聊仅处理明确 @当前机器人的消息。': 'Direct messages always work; group chats require an explicit @mention of this bot.',
|
||
'需在飞书为该机器人开通“获取群组中所有消息”权限(im:message.group_msg);开通后,机器人会处理群聊中的所有可见消息。': 'Grant this bot the “Read all messages in associated group chat” Feishu scope (im:message.group_msg); once granted, it will process every visible group message.',
|
||
'群聊响应方式修改失败,请重试。': 'Could not update the group response mode. Try again.',
|
||
'群消息权限授权失败,请重试。': 'Could not authorize group-message permission. Try again.',
|
||
'钉钉设置': 'DingTalk settings',
|
||
'企业微信设置': 'WeCom settings',
|
||
'扫码接入机器人': 'Scan QR code',
|
||
'正在接入': 'Connecting',
|
||
'手动接入': 'Manual setup',
|
||
'收起凭据': 'Hide credentials',
|
||
'收起接入': 'Hide setup',
|
||
'接入机器人': 'Connect bot',
|
||
'开始接入': 'Start setup',
|
||
'在线': 'online',
|
||
'运行正常': 'Connected',
|
||
'正在连接': 'Connecting',
|
||
'正在连接…': 'Connecting…',
|
||
'连接未就绪': 'Not connected',
|
||
'连接中': 'Connecting',
|
||
'连接中断': 'Disconnected',
|
||
'需要处理': 'Needs attention',
|
||
'状态未知': 'Unknown status',
|
||
'离线': 'Offline',
|
||
'已断开': 'Disconnected',
|
||
'消息通道': 'Message channel',
|
||
'查看消息通道说明': 'View message channel details',
|
||
'最近检查': 'Last checked',
|
||
'最近一条消息处理失败': 'Latest message failed',
|
||
'错误码': 'Code',
|
||
'参考号': 'Reference',
|
||
'当前工作区': 'Current workspace',
|
||
'选择目录': 'Choose folder',
|
||
'选择机器人工作区目录': 'Select bot workspace folder',
|
||
'当前目录': 'Current folder',
|
||
'主目录': 'Home',
|
||
'直接输入路径': 'Enter a path directly',
|
||
'支持 Windows 盘符、UNC 与 POSIX 绝对路径。': 'Supports Windows drives, UNC paths, and POSIX absolute paths.',
|
||
'输入 Host 上的完整绝对路径': 'Enter a full absolute path on the Host',
|
||
'前往': 'Go',
|
||
'读取中…': 'Loading…',
|
||
'正在准备目录选择器…': 'Preparing folder picker…',
|
||
'正在读取目录…': 'Loading folders…',
|
||
'这个目录中没有子文件夹。': 'This folder has no subfolders.',
|
||
'此目录的子文件夹过多,仅显示前一部分。': 'This folder has too many subfolders; only the first group is shown.',
|
||
'无法读取目录,请重试。': 'Could not load the folder. Try again.',
|
||
'重试': 'Retry',
|
||
'显示隐藏文件夹': 'Show hidden folders',
|
||
'切换后会清除这个机器人的旧会话映射。': 'Switching clears this bot’s previous session mappings.',
|
||
'切换中…': 'Switching…',
|
||
'选择此目录': 'Select this folder',
|
||
'工作区绝对路径': 'Absolute workspace path',
|
||
'/绝对路径/到/工作区': '/absolute/path/to/workspace',
|
||
'修改': 'Change',
|
||
'保存': 'Save',
|
||
'上下文增强': 'Context enhancement',
|
||
'未开启': 'Not enabled',
|
||
'仅群聊': 'Groups only',
|
||
'仅私聊': 'Direct only',
|
||
'群聊和私聊': 'Groups and direct',
|
||
'关闭弹窗': 'Close dialog',
|
||
'查看上下文增强说明': 'View context enhancement details',
|
||
'上下文增强范围': 'Context enhancement scope',
|
||
'启用范围': 'Enable in',
|
||
'启用': 'Enabled',
|
||
'(当前渠道不支持群聊)': '(This channel does not support group chats)',
|
||
'来源字段': 'Source fields',
|
||
'查看来源字段说明': 'View source field details',
|
||
'查看群聊来源字段说明': 'View group source field details',
|
||
'查看私聊来源字段说明': 'View direct source field details',
|
||
'渠道': 'Channel',
|
||
'会话类型': 'Conversation type',
|
||
'发送者标识': 'Sender ID',
|
||
'发送者昵称': 'Sender name',
|
||
'查看发送者昵称字段说明': 'View sender name field details',
|
||
'查看群聊发送者昵称字段说明': 'View group sender name field details',
|
||
'查看私聊发送者昵称字段说明': 'View direct sender name field details',
|
||
'该字段不是每个渠道都能提供。当前消息没有发送者昵称时,即使已选择该字段,<dsh_im_source> 中也会省略 senderName。': 'This field is not available on every channel. If the current message has no sender name, <dsh_im_source> omits senderName even when the field is selected.',
|
||
'会话标题': 'Conversation title',
|
||
'查看群聊会话标题字段说明': 'View group conversation title field details',
|
||
'查看私聊会话标题字段说明': 'View direct conversation title field details',
|
||
'该字段不是每个渠道都能提供。钉钉群聊会带上群名。当前消息没有会话标题时,即使已选择该字段,<dsh_im_source> 中也会省略 conversationTitle。': 'This field is not available on every channel. DingTalk group chats include the group name. If the current message has no conversation title, <dsh_im_source> omits conversationTitle even when the field is selected.',
|
||
'机器人标识': 'Bot ID',
|
||
'增强提示词': 'Guidance',
|
||
'查看增强提示词使用说明': 'View guidance instructions',
|
||
'查看群聊增强提示词使用说明': 'View group guidance instructions',
|
||
'查看私聊增强提示词使用说明': 'View direct guidance instructions',
|
||
'使用说明': 'How to use',
|
||
'用于告诉模型如何使用 <dsh_im_source> 中已选择的来源字段。只填写正文,插件会自动添加 <dsh_im_source_guidance> 成对标签。': 'Tell the model how to use the selected fields in <dsh_im_source>. Enter only the body; the plugin adds paired <dsh_im_source_guidance> tags.',
|
||
'生效规则': 'Behavior',
|
||
'隐私提示': 'Privacy',
|
||
'使用示例': 'Example',
|
||
'仅依据当前消息的 <dsh_im_source> 中实际提供的字段理解来源;没有提供的字段不要猜测或补全。\nconversationType是群聊时回复严肃一点,conversationType是私聊时回复一定要幽默搞笑,像周星驰的电影一样搞笑': 'Understand the source only from fields actually present in <dsh_im_source> for the current message; do not guess or fill in missing fields.\nWhen conversationType is group, reply more seriously. When conversationType is direct, make the reply humorous and funny.',
|
||
'仅依据当前消息的 <dsh_im_source> 中实际提供的字段理解来源;没有提供的字段不要猜测或补全。\n当前消息来自群聊,请使用严肃、克制、简洁的表达方式。': 'Understand the source only from fields actually present in <dsh_im_source> for the current message; do not guess or fill in missing fields.\nThis message is from a group chat. Use a serious, restrained, and concise style.',
|
||
'仅依据当前消息的 <dsh_im_source> 中实际提供的字段理解来源;没有提供的字段不要猜测或补全。\n当前消息来自私聊,可以使用更轻松、幽默、详细的表达方式。': 'Understand the source only from fields actually present in <dsh_im_source> for the current message; do not guess or fill in missing fields.\nThis message is from a direct chat. You may use a lighter, more humorous, and detailed style.',
|
||
'填入示例': 'Use example',
|
||
'清空': 'Clear',
|
||
'选择在哪些会话中启用、提供哪些来源字段,以及如何使用这些信息。仅使用已有消息元数据,不查询平台 API。': 'Choose which conversations to enhance, which source fields to include, and how to use them. Only existing message metadata is used; no platform APIs are queried.',
|
||
'增强提示词中请使用字段名(如 senderId、conversationType)引用这些信息。只发送勾选且当前消息中可用的字段,不会额外查询或补全。': 'Reference these values by field name (such as senderId or conversationType) in the guidance. Only selected fields available in the current message are sent; no extra lookups are made.',
|
||
'增强提示词中请使用字段名(如 senderId、conversationType)引用这些信息。只发送当前会话中勾选且可用的字段,不会额外查询或补全。': 'Reference these values by field name (such as senderId or conversationType) in the guidance. Only fields selected and available in the current conversation are sent; no extra lookups are made.',
|
||
'用于告诉模型如何使用当前群聊消息的 <dsh_im_source> 来源字段。只填写正文,插件会自动添加 <dsh_im_source_guidance> 成对标签。': 'Tell the model how to use <dsh_im_source> fields for the current group message. Enter only the body; the plugin adds paired <dsh_im_source_guidance> tags.',
|
||
'用于告诉模型如何使用当前私聊消息的 <dsh_im_source> 来源字段。只填写正文,插件会自动添加 <dsh_im_source_guidance> 成对标签。': 'Tell the model how to use <dsh_im_source> fields for the current direct message. Enter only the body; the plugin adds paired <dsh_im_source_guidance> tags.',
|
||
'仅在群聊开关开启时使用。清空并保存后不再附加群聊增强提示词;所选来源字段仍按当前场景设置发送。': 'Used only when group enhancement is enabled. Clear and save to omit group guidance; selected source fields still follow the group settings.',
|
||
'仅在私聊开关开启时使用。清空并保存后不再附加私聊增强提示词;所选来源字段仍按当前场景设置发送。': 'Used only when direct enhancement is enabled. Clear and save to omit direct guidance; selected source fields still follow the direct settings.',
|
||
'只需填写正文,插件自动添加 <dsh_im_source_guidance> 成对标签。清空并保存后,不再附加增强提示词,已选来源字段仍按开关设置发送。': 'Enter only the body; the plugin adds paired <dsh_im_source_guidance> tags. Clear and save to omit guidance. Selected source fields still follow the conversation switches.',
|
||
'发送者标识可能包含平台用户 ID 或电话号码形式的标识。关闭开关不会删除已经写入会话历史的信息。': 'Sender IDs may contain platform user IDs or phone-number-like identifiers. Turning this off does not remove information already saved in conversation history.',
|
||
'上下文增强保存失败,请重试。': 'Could not save context enhancement. Try again.',
|
||
'请提交完整的上下文增强设置。': 'Submit the complete context enhancement settings.',
|
||
'群聊和私聊开关必须是布尔值。': 'Group and direct switches must be booleans.',
|
||
'来源字段只能选择已定义的六个字段。': 'Source fields must be chosen from the six defined fields.',
|
||
'保存中…': 'Saving…',
|
||
'未设置': 'Not set',
|
||
'工作区修改失败,请重试。': 'Could not update the workspace. Try again.',
|
||
'请输入工作区绝对路径。': 'Enter an absolute workspace path.',
|
||
'工作区必须是绝对路径。': 'The workspace must be an absolute path.',
|
||
'工作区路径不存在。': 'The workspace path does not exist.',
|
||
'工作区路径必须指向一个目录。': 'The workspace path must point to a directory.',
|
||
'找不到要修改的机器人。': 'The bot could not be found.',
|
||
'Agent Preset': 'Agent Preset',
|
||
'查看 Agent Preset 说明': 'View Agent Preset help',
|
||
'跟随 Host 默认': 'Follow the Host default',
|
||
'(已不可用)': ' (unavailable)',
|
||
'只影响新建会话;若当前聊天已有会话,先发送 /new,再发送普通消息生效。': 'This affects only new sessions. If the current chat already has a session, send /new, then send a regular message to apply it.',
|
||
'当前 Agent Preset 已不可用,请选择其他 Preset 或跟随 Host 默认。': 'The current Agent Preset is unavailable. Choose another preset or follow the Host default.',
|
||
'Agent Preset 修改失败,请重试。': 'Could not update the Agent Preset. Try again.',
|
||
'请选择 Agent Preset。': 'Choose an Agent Preset.',
|
||
'Agent Preset 无效。': 'The Agent Preset is invalid.',
|
||
'Agent Preset 不存在或不可用。': 'The Agent Preset does not exist or is unavailable.',
|
||
'尚未检查': 'Not checked yet',
|
||
'刚刚': 'Just now',
|
||
'检查连接': 'Check connection',
|
||
'检查中…': 'Checking…',
|
||
'连接检查失败,请稍后重试。': 'Connection check failed. Try again later.',
|
||
'测试消息已发送,请到对应机器人会话中确认。': 'Test message sent. Check the matching bot conversation.',
|
||
'连接检查完成。机器人尚未收到可用于测试的私聊消息。': 'Connection check completed. The bot has not received a direct message it can use for testing.',
|
||
'连接检查完成,但测试消息发送失败。': 'Connection check completed, but the test message could not be sent.',
|
||
'测试消息已发送,请到飞书会话中确认。': 'Test message sent. Check the Feishu conversation.',
|
||
'测试消息已发送,请到 WhatsApp 自聊会话中确认。': 'Test message sent. Check the WhatsApp self-chat.',
|
||
'连接检查完成,但当前没有可用的 WhatsApp 自聊目标。': 'Connection check completed, but no WhatsApp self-chat target is available.',
|
||
'钉钉连接检查完成,测试消息已发送。': 'DingTalk connection check completed and the test message was sent.',
|
||
'钉钉连接检查完成,但测试消息发送失败。': 'DingTalk connection check completed, but the test message could not be sent.',
|
||
'微信连接检查完成,测试消息已发送。': 'WeChat connection check completed and the test message was sent.',
|
||
'微信连接检查完成,但测试消息发送失败。': 'WeChat connection check completed, but the test message could not be sent.',
|
||
'企业微信连接检查完成,测试消息已发送。': 'WeCom connection check completed and the test message was sent.',
|
||
'企业微信连接检查完成,但测试消息发送失败。': 'WeCom connection check completed, but the test message could not be sent.',
|
||
'重试连接': 'Reconnect',
|
||
'重试中…': 'Retrying…',
|
||
'移除接入': 'Remove connection',
|
||
'确认移除接入': 'Remove connection',
|
||
'确认移除': 'Remove',
|
||
'正在移除…': 'Removing…',
|
||
'保留机器人': 'Keep bot',
|
||
'保留账号': 'Keep account',
|
||
'取消': 'Cancel',
|
||
'关闭': 'Close',
|
||
'立即重试': 'Retry now',
|
||
'重新读取': 'Reload',
|
||
'重新生成二维码': 'Generate a new QR code',
|
||
'重新生成二维码后继续': 'Generate a new QR code',
|
||
'刷新二维码': 'Refresh QR code',
|
||
'刷新中…': 'Refreshing…',
|
||
'换一个二维码': 'Get another QR code',
|
||
'继续连接': 'Continue connecting',
|
||
'绑定并连接': 'Connect',
|
||
'正在绑定…': 'Connecting…',
|
||
'验证并连接': 'Verify and connect',
|
||
'正在验证并连接…': 'Verifying and connecting…',
|
||
'正在验证…': 'Verifying…',
|
||
'操作失败,请稍后重试': 'The operation failed. Try again later.',
|
||
'请稍后重试': 'Try again later.',
|
||
'当前二维码有效时间': 'QR code expires in',
|
||
'二维码有效时间': 'QR code expires in',
|
||
'二维码已过期': 'QR code expired',
|
||
'二维码已失效': 'QR code expired',
|
||
'二维码已过期\n请重新生成': 'QR code expired\nGenerate a new one',
|
||
'二维码图片正在生成…': 'Generating QR code…',
|
||
'二维码正在生成…': 'Generating QR code…',
|
||
'二维码正在自动刷新…': 'Refreshing QR code…',
|
||
'二维码未就绪,请打开授权链接': 'The QR code is not ready. Open the authorization link.',
|
||
'二维码图片未就绪,请使用备用链接。': 'The QR code is not ready. Use the alternate link.',
|
||
'二维码图片未就绪,请重新生成。': 'The QR code is not ready. Generate a new one.',
|
||
'等待刷新': 'Waiting to refresh',
|
||
'正在刷新二维码': 'Refreshing QR code',
|
||
'打开备用链接': 'Open alternate link',
|
||
'生成二维码': 'Generate QR code',
|
||
'生成微信二维码': 'Generate WeChat QR code',
|
||
'生成飞书二维码': 'Generate Feishu QR code',
|
||
'生成钉钉二维码': 'Generate DingTalk QR code',
|
||
'生成企业微信二维码': 'Generate WeCom QR code',
|
||
'生成 QQ 二维码': 'Generate QQ QR code',
|
||
'正在生成二维码…': 'Generating QR code…',
|
||
'正在准备授权二维码': 'Preparing authorization QR code',
|
||
'正在准备权限授权二维码': 'Preparing permission authorization QR code',
|
||
'正在准备微信二维码': 'Preparing WeChat QR code',
|
||
'正在添加新机器人': 'Adding a new bot',
|
||
'正在申请钉钉授权二维码…': 'Requesting DingTalk authorization QR code…',
|
||
'正在申请企业微信二维码…': 'Requesting WeCom QR code…',
|
||
'正在申请 QQ 二维码…': 'Requesting QQ QR code…',
|
||
'正在生成 WhatsApp 二维码': 'Generating WhatsApp QR code',
|
||
'扫码,创建第一个飞书入口': 'Scan to create your first Feishu bot',
|
||
'扫码只会新增一个机器人,已接入的机器人会继续正常收发消息。': 'Scanning adds one bot. Existing bots will continue to send and receive messages.',
|
||
'无需手动填写 App ID。以后还可以继续添加机器人,分别服务不同团队或飞书租户。': 'No App ID is required. You can add more bots later for different teams or Feishu tenants.',
|
||
'使用飞书扫码创建机器人': 'Scan with Feishu to create a bot',
|
||
'刷新二维码后继续': 'Refresh the QR code to continue',
|
||
'打开飞书移动端,使用扫一扫读取二维码': 'Open Feishu on your phone and scan the QR code',
|
||
'核对应用名称与权限范围,并确认创建': 'Review the app name and permissions, then confirm',
|
||
'保持本页打开,等待新机器人的长连接就绪': 'Keep this page open until the bot connection is ready',
|
||
'在飞书中打开': 'Open in Feishu',
|
||
'取消添加': 'Cancel',
|
||
'使用飞书扫码补全权限': 'Scan with Feishu to complete permissions',
|
||
'使用飞书确认群消息权限': 'Confirm group-message permission with Feishu',
|
||
'扫码会更新现有飞书应用,只增量开通“获取群组中所有消息”权限;不会创建新应用。确认后会自动启用“响应所有群消息”,其他机器人不受影响。': 'Scanning updates the existing Feishu app with only the “Read all messages in associated group chat” scope. It does not create a new app. After confirmation, “Respond to all group messages” is enabled automatically; other bots are unaffected.',
|
||
'核对现有应用,并确认“获取群组中所有消息”权限': 'Review the existing app and confirm the “Read all messages in associated group chat” permission',
|
||
'保持本页打开,等待权限生效并自动切换响应方式': 'Keep this page open while the permission takes effect and the response mode switches automatically',
|
||
'取消授权': 'Cancel authorization',
|
||
'已确认,正在启用全部消息模式': 'Confirmed. Enabling all-message mode',
|
||
'权限配置已提交,正在保存设置并重连此机器人;此阶段无法取消,其他机器人不会中断。': 'The permission update was submitted. Saving the setting and reconnecting this bot. This stage cannot be cancelled; other bots will not be interrupted.',
|
||
'权限配置已提交,正在启用全部消息模式并重连此机器人;此阶段无法取消,其他机器人不会中断。': 'The permission update was submitted. Enabling all-message mode and reconnecting this bot. This stage cannot be cancelled; other bots will not be interrupted.',
|
||
'正在为现有飞书应用申请群消息权限二维码,请稍候。': 'Requesting a group-message permission QR code for the existing Feishu app…',
|
||
'群消息权限没有开通完成': 'Group-message permission was not granted',
|
||
'扫码会更新现有飞书应用,增量补充当前缺少的卡片按钮回调、读取用户消息内图片或文件所需的 im:message:readonly(飞书显示为“获取单聊、群组消息”)、上传机器人图片或文件所需的 im:resource,以及原生命令面板所需的 application:app_slash_command:read / write;不会创建新应用。确认页只显示当前缺少项,完成后此机器人会短暂重连,其他机器人不受影响。': 'Scanning updates the existing Feishu app with the missing card-button callback, im:message:readonly for reading images or files in user messages (shown by Feishu as “Read direct and group messages”), im:resource for uploading images or files sent by the bot, and application:app_slash_command:read / write for the native command panel. It does not create a new app. The confirmation page shows only missing items; this bot reconnects briefly afterward, while other bots are unaffected.',
|
||
'核对现有应用名称,并确认只新增当前缺少的上述配置': 'Review the existing app name and confirm that only the missing items described above are added',
|
||
'保持本页打开,等待权限与回调补全完成': 'Keep this page open until permissions and the callback are complete',
|
||
'取消补全': 'Cancel setup',
|
||
'已确认,正在完成权限与回调配置': 'Confirmed. Completing permissions and callback setup',
|
||
'正在准备权限补全二维码': 'Preparing the permission-completion QR code',
|
||
'配置已提交,正在保存权限、验证卡片回调并重连此机器人;此阶段无法取消,其他机器人不会中断。': 'The update was submitted. Saving permissions, verifying the card callback, and reconnecting this bot. This stage cannot be cancelled; other bots will not be interrupted.',
|
||
'正在为现有飞书应用申请一次性更新二维码,请稍候。': 'Requesting a one-time update QR code for the existing Feishu app…',
|
||
'权限与回调没有补全完成': 'Permissions and callback setup did not finish',
|
||
'补全权限': 'Complete permissions',
|
||
'补全范围': 'Completion scope',
|
||
'增量添加当前缺少的卡片回调 card.action.trigger、读取消息内图片或文件所需的 im:message:readonly(飞书显示为“获取单聊、群组消息”)、上传机器人图片或文件所需的 im:resource,以及原生命令面板所需的 application:app_slash_command:read / write;确认页只显示当前缺少项,不会创建新应用。': 'Adds the missing card callback card.action.trigger, im:message:readonly for reading images or files in messages (shown by Feishu as “Read direct and group messages”), im:resource for uploading images or files sent by the bot, and application:app_slash_command:read / write for the native command panel. The confirmation page shows only missing items; no new app is created.',
|
||
'等待扫码…': 'Waiting for scan…',
|
||
'飞书服务返回了不匹配的权限补全二维码': 'Feishu returned a permission-completion QR code for a different bot',
|
||
'飞书服务返回了不匹配的群消息权限二维码': 'Feishu returned a group-message permission QR code for a different bot',
|
||
'飞书服务返回的修复信息缺少 botId': 'Feishu repair status is missing the bot ID',
|
||
'飞书服务返回的应用更新信息缺少 botId': 'Feishu app-update status is missing the bot ID',
|
||
'飞书服务返回了不匹配的注册进度': 'Feishu returned registration progress for a different operation',
|
||
'此机器人': 'this bot',
|
||
'用于为${botName}开通群消息权限的一次性授权二维码': 'One-time QR code for granting group-message permission to ${botName}',
|
||
'正在为「${botName}」开通群消息权限': 'Granting group-message permission to “${botName}”',
|
||
'${botName ?? "机器人"}的权限补全二维码已生成,请使用飞书扫码。': 'Permission-completion QR code generated for ${botName ?? "bot"}. Scan it with Feishu.',
|
||
'${botName ?? "机器人"}的群消息权限二维码已生成,请使用飞书确认。': 'Group-message permission QR code generated for ${botName ?? "bot"}. Confirm it with Feishu.',
|
||
'${targetBotName}已开通群消息权限,并启用“响应所有群消息”。': '${targetBotName} now has group-message permission and “Respond to all group messages” is enabled.',
|
||
'${targetBot.bot.name}已开通群消息权限,并启用“响应所有群消息”。': '${targetBot.bot.name} now has group-message permission and “Respond to all group messages” is enabled.',
|
||
'${targetBot.bot.name}已连接,可以在飞书中开始聊天。': '${targetBot.bot.name} is connected and ready to chat in Feishu.',
|
||
'已取消补全权限与回调。': 'Completing permissions and the callback was cancelled.',
|
||
'已取消群消息权限授权。': 'Group-message permission authorization was cancelled.',
|
||
'权限与回调已更新,但暂时无法确认机器人连接状态': 'Permissions and the callback were updated, but the bot connection could not be confirmed yet',
|
||
'群消息权限已更新,但暂时无法确认机器人连接状态': 'The group-message permission was updated, but the bot connection could not be confirmed yet',
|
||
'飞书权限与回调补全失败': 'Could not complete Feishu permissions and callback setup',
|
||
'飞书群消息权限开通失败': 'Could not grant the Feishu group-message permission',
|
||
'请先完成当前飞书授权操作,再开通群消息权限。': 'Finish the current Feishu authorization before granting group-message permission.',
|
||
'已确认,正在连接新机器人': 'Confirmed. Connecting the new bot',
|
||
'正在安全保存凭据并检查新机器人的消息通道,其他机器人不会中断。': 'Saving credentials and checking the new bot connection. Existing bots will not be interrupted.',
|
||
'正在向飞书申请一次性授权二维码,请稍候。': 'Requesting a one-time authorization QR code from Feishu…',
|
||
'新机器人没有添加完成': 'The new bot was not added',
|
||
'新飞书机器人已连接,可以开始聊天。': 'The new Feishu bot is connected and ready to chat.',
|
||
'飞书应用创建失败': 'Could not create the Feishu app',
|
||
'机器人已经创建,但暂时无法确认连接状态': 'The bot was created, but its connection could not be confirmed yet',
|
||
'机器人仍未连接': 'The bot is still offline',
|
||
'机器人尚未连接': 'The bot is not connected yet',
|
||
'长连接运行正常': 'Persistent connection is healthy',
|
||
'长连接': 'Persistent connection',
|
||
'应用标识已安全保存': 'App identifier stored securely',
|
||
'机器人标识已安全保存': 'Bot identifier stored securely',
|
||
'已安全保存': 'Stored securely',
|
||
'已接入的微信账号': 'Connected WeChat accounts',
|
||
'已接入的机器人': 'Connected bots',
|
||
'已接入的钉钉机器人': 'Connected DingTalk bots',
|
||
'已绑定的企业微信机器人': 'Connected WeCom bots',
|
||
'已绑定的 QQ 机器人': 'Connected QQ bots',
|
||
'已接入的 WhatsApp 机器人': 'Connected WhatsApp accounts',
|
||
'使用手机微信扫描二维码': 'Scan with WeChat on your phone',
|
||
'扫一次码,就能在微信里使用 Harness': 'Scan once to use Harness in WeChat',
|
||
'打开手机微信并扫描左侧二维码': 'Open WeChat on your phone and scan the QR code',
|
||
'在微信中确认连接该机器人': 'Confirm the bot connection in WeChat',
|
||
'保持本页打开,等待机器人自动连接': 'Keep this page open while the bot connects',
|
||
'等待微信扫码': 'Waiting for WeChat scan',
|
||
'需要配对码': 'Pairing code required',
|
||
'输入手机微信显示的数字': 'Enter the number shown in WeChat',
|
||
'微信配对码': 'WeChat pairing code',
|
||
'已扫码,请在手机上确认': 'Scanned. Confirm on your phone',
|
||
'配对码已提交,正在等待微信确认。': 'Pairing code submitted. Waiting for WeChat confirmation.',
|
||
'这是微信附加的安全确认步骤。配对码只用于本次扫码轮询,不会写入配置或日志。': 'This is an additional WeChat confirmation step. The pairing code is used only for this connection and is never stored.',
|
||
'正在保存凭据并验证 Harness 与微信长轮询。': 'Saving credentials and verifying the WeChat connection.',
|
||
'微信已确认,正在启动消息连接': 'Confirmed in WeChat. Starting the message connection',
|
||
'微信已授权,但无法读取现有登录凭据。请检查 DSH 凭据存储。': 'WeChat was authorized, but the existing login credential could not be read. Check the DSH credential store.',
|
||
'微信已授权,但登录凭据无法写入 DSH 凭据存储。请检查凭据存储是否可写。': 'WeChat was authorized, but the login credential could not be written to the DSH credential store. Check that the store is writable.',
|
||
'微信已授权,但账号配置无法写入本机。请检查 DSH_HOME 目录权限。': 'WeChat was authorized, but the account configuration could not be saved locally. Check the DSH_HOME directory permissions.',
|
||
'微信已授权,但无法初始化账号状态或工作区。请检查 DSH_HOME 和工作区目录。': 'WeChat was authorized, but the account state or workspace could not be initialized. Check DSH_HOME and the workspace directory.',
|
||
'微信已授权,但插件无法连接本机 Harness。请检查 dsh web 地址和端口。': 'WeChat was authorized, but the plugin could not connect to the local Harness. Check the dsh web address and port.',
|
||
'微信已授权,但 Harness 健康检查超时。请确认 dsh web 未阻塞。': 'WeChat was authorized, but the Harness health check timed out. Confirm that dsh web is not blocked.',
|
||
'微信已授权,但 Harness 拒绝了本机健康检查。请检查 Host 信任配置。': 'WeChat was authorized, but Harness denied the local health check. Check the Host trust configuration.',
|
||
'微信已授权,但找不到 Harness 健康检查接口。请确认 Harness 与插件版本兼容。': 'WeChat was authorized, but the Harness health endpoint was not found. Confirm that Harness and the plugin are compatible.',
|
||
'微信已授权,但 Harness 健康检查返回服务错误。请查看 dsh web 日志。': 'WeChat was authorized, but the Harness health check returned a service error. Check the dsh web logs.',
|
||
'微信已授权,但 Harness 返回了无法识别的响应。请确认 Harness 与插件版本兼容。': 'WeChat was authorized, but Harness returned an unrecognized response. Confirm that Harness and the plugin are compatible.',
|
||
'微信已授权,但 Harness 拒绝了健康检查请求。请查看 dsh web 日志。': 'WeChat was authorized, but Harness rejected the health-check request. Check the dsh web logs.',
|
||
'微信已授权,但 Harness 健康检查发生未知错误。请查看 dsh web 日志。': 'WeChat was authorized, but the Harness health check failed unexpectedly. Check the dsh web logs.',
|
||
'微信已授权,但消息连接初始化失败。请查看 dsh web 日志后重试。': 'WeChat was authorized, but the message connection could not be initialized. Check the dsh web logs and try again.',
|
||
'微信已授权,但激活过程中发生未知错误。请查看 dsh web 日志。': 'WeChat was authorized, but an unknown error occurred during activation. Check the dsh web logs.',
|
||
'微信已绑定,可以开始向已绑定的机器人发消息。': 'WeChat is connected and ready for messages.',
|
||
'这个微信账号已经绑定并保持在线。': 'This WeChat account is connected and online.',
|
||
'微信账号及本机凭据已移除。': 'The WeChat account and local credentials were removed.',
|
||
'已取消微信绑定。': 'WeChat setup was cancelled.',
|
||
'正在联系腾讯微信 iLink 服务。': 'Contacting the WeChat iLink service.',
|
||
'iLink 长轮询': 'iLink long polling',
|
||
'扫一次码,自动创建并连接机器人': 'Scan once to create and connect a bot',
|
||
'使用钉钉 App 完成机器人授权': 'Authorize the bot with the DingTalk app',
|
||
'使用已加入企业/组织的钉钉账号扫描左侧二维码': 'Scan the QR code with a DingTalk account that belongs to an organization',
|
||
'在授权页点击“一键创建新机器人”': 'Select “Create new bot” on the authorization page',
|
||
'请勿关闭本页,钉钉完成授权后将自动继续。': 'Keep this page open. Setup will continue after DingTalk authorization.',
|
||
'等待钉钉扫码授权': 'Waiting for DingTalk authorization',
|
||
'授权已确认,正在创建钉钉机器人': 'Authorized. Creating the DingTalk bot',
|
||
'正在确认钉钉授权': 'Confirming DingTalk authorization',
|
||
'正在检查钉钉 Stream 长连接,成功后会自动显示为在线。': 'Checking the DingTalk Stream connection. It will appear online when ready.',
|
||
'钉钉机器人已接入,可以开始发送消息。': 'The DingTalk bot is connected and ready for messages.',
|
||
'这个钉钉机器人已经接入并保持在线。': 'This DingTalk bot is connected and online.',
|
||
'Stream 长连接': 'Stream persistent connection',
|
||
'使用企业微信 App 扫码创建智能机器人': 'Scan with WeCom to create an AI bot',
|
||
'使用企业微信 App 完成智能机器人授权': 'Authorize the AI bot with WeCom',
|
||
'打开企业微信 App,扫描左侧二维码': 'Open WeCom and scan the QR code',
|
||
'在腾讯授权页面确认创建智能机器人': 'Confirm bot creation on the Tencent authorization page',
|
||
'返回这里等待连接完成': 'Return here and wait for the connection to complete',
|
||
'等待企业微信 App 扫码': 'Waiting for WeCom scan',
|
||
'企业微信已授权,正在连接机器人': 'Authorized in WeCom. Connecting the bot',
|
||
'凭据正在写入本机,并启动企业微信 WebSocket 消息连接。': 'Saving credentials locally and starting the WeCom WebSocket connection.',
|
||
'WebSocket 长连接': 'WebSocket persistent connection',
|
||
'使用手机 QQ 扫码创建并绑定机器人': 'Scan with mobile QQ to create and connect a bot',
|
||
'使用手机 QQ 完成机器人绑定': 'Complete bot setup with mobile QQ',
|
||
'打开手机 QQ,扫描左侧二维码': 'Open mobile QQ and scan the QR code',
|
||
'在腾讯授权页面确认创建或绑定机器人': 'Confirm bot creation or connection on the Tencent authorization page',
|
||
'等待手机 QQ 扫码': 'Waiting for mobile QQ scan',
|
||
'QQ 已授权,正在连接机器人': 'Authorized in QQ. Connecting the bot',
|
||
'凭据正在写入本机,并启动 QQ WebSocket 消息连接。': 'Saving credentials locally and starting the QQ WebSocket connection.',
|
||
'使用手机 WhatsApp 扫描二维码即可接入。': 'Scan the QR code with WhatsApp to connect.',
|
||
'用手机 WhatsApp 扫描二维码': 'Scan with WhatsApp on your phone',
|
||
'打开 WhatsApp → 设置 → 已关联设备': 'Open WhatsApp → Settings → Linked devices',
|
||
'点击“关联设备”并扫描左侧二维码': 'Select “Link a device” and scan the QR code',
|
||
'等待 WhatsApp 扫码': 'Waiting for WhatsApp scan',
|
||
'已扫码,正在连接 WhatsApp': 'Scanned. Connecting WhatsApp',
|
||
'正在建立安全的关联设备会话。': 'Creating a secure linked-device session.',
|
||
'关联设备正在接入 DeepSeek Harness。': 'Linking the device to DeepSeek Harness.',
|
||
'WhatsApp Web 关联设备运行正常': 'WhatsApp linked device is healthy',
|
||
'查看 WhatsApp 访问模式说明': 'View WhatsApp access mode details',
|
||
'WhatsApp 访问模式': 'WhatsApp access mode',
|
||
'仅自己模式': 'Only me',
|
||
'指定联系人模式': 'Selected contacts',
|
||
'开放响应模式': 'Open responses',
|
||
'仅自己模式(默认)': 'Only me (default)',
|
||
'已生效:': 'Active: ',
|
||
'只响应已绑定 WhatsApp 账号的自聊消息。': 'Only respond to self-chat messages from the linked WhatsApp account.',
|
||
'响应自聊和白名单联系人的私聊,忽略群聊。': 'Respond to self-chat and allowlisted direct messages; ignore group messages.',
|
||
'响应所有私聊、已绑定账号自己发出的群聊消息,以及其他群成员的提及或回复。': 'Respond to all direct messages, group messages sent by the linked account, and mentions or replies from other group members.',
|
||
'允许私聊的 WhatsApp 电话号码': 'WhatsApp phone numbers allowed to send direct messages',
|
||
'每行一个含国家或地区代码的号码': 'One number with country or region code per line',
|
||
'可以包含开头的 +,保存时会自动移除。': 'A leading + is allowed and removed when saved.',
|
||
'仅指定联系人模式使用白名单,切换模式时会保留。': 'Only Selected contacts uses the allowlist; it is retained when modes change.',
|
||
'白名单为空;保存后将只接受自聊消息。': 'The allowlist is empty; only self-chat messages will be accepted after saving.',
|
||
'电话号码必须包含国家或地区代码,每行一个。': 'Each phone number must include a country or region code on its own line.',
|
||
'WhatsApp 访问设置暂不可用。': 'WhatsApp access settings are currently unavailable.',
|
||
'WhatsApp 访问设置保存失败。': 'Could not save WhatsApp access settings.',
|
||
'Bot API 长轮询': 'Bot API long polling',
|
||
' Gateway 长连接': ' Gateway persistent connection',
|
||
'Gateway 长连接': 'Gateway persistent connection',
|
||
' Socket Mode 长连接': ' Socket Mode persistent connection',
|
||
'Socket Mode 长连接': 'Socket Mode persistent connection',
|
||
'接入 Telegram 机器人': 'Connect a Telegram bot',
|
||
'先通过 @BotFather 获取 Bot Token,再在这里完成接入。': 'Get a Bot Token from @BotFather, then connect it here.',
|
||
'填写 @BotFather 生成的 Bot Token': 'Enter the Bot Token from @BotFather',
|
||
'访问模式': 'Access mode',
|
||
'Telegram 访问模式': 'Telegram access mode',
|
||
'查看 Telegram 访问模式说明': 'View Telegram access mode details',
|
||
'群聊全部忽略,私聊仅允许白名单用户。': 'All group messages are ignored; only allowlisted users may send DMs.',
|
||
'保持原有行为:私聊直接响应,群聊在被提及或回复时响应。': 'Keep the original behavior: respond to DMs and to group mentions or replies.',
|
||
'安全模式': 'Safe mode',
|
||
'兼容模式': 'Compatible mode',
|
||
'已生效:安全模式': 'Active: Safe mode',
|
||
'已生效:兼容模式': 'Active: Compatible mode',
|
||
'模式': 'Mode',
|
||
'兼容模式(默认)': 'Compatible mode (default)',
|
||
'安全模式(私聊白名单)': 'Safe mode (private-chat allowlist)',
|
||
'允许私聊的 Telegram User ID': 'Telegram User IDs allowed to send DMs',
|
||
'每行一个数字 User ID': 'One numeric User ID per line',
|
||
'白名单仅属于当前机器人。': 'This allowlist belongs only to the current bot.',
|
||
'兼容模式下暂不使用白名单,切换模式时会保留。': 'Compatible mode does not enforce the allowlist; it is retained when modes change.',
|
||
'白名单为空;保存后该机器人会拒绝所有入站消息。': 'The allowlist is empty; this bot will reject all inbound messages after saving.',
|
||
'正在保存…': 'Saving…',
|
||
'保存访问设置': 'Save access settings',
|
||
'User ID 必须是 1–16 位正整数,每行一个。': 'Each User ID must be a 1–16 digit positive integer on its own line.',
|
||
'Telegram 访问设置暂不可用。': 'Telegram access settings are currently unavailable.',
|
||
'Telegram 访问设置保存失败。': 'Could not save Telegram access settings.',
|
||
'接入 Discord 机器人': 'Connect a Discord bot',
|
||
'先在 Developer Portal 创建 Bot 并邀请到服务器,再在这里完成接入。': 'Create a bot in the Developer Portal and invite it to your server, then connect it here.',
|
||
'填写 Discord Developer Portal 的 Bot Token': 'Enter the Bot Token from the Discord Developer Portal',
|
||
'接入 Slack 机器人': 'Connect a Slack bot',
|
||
'先用 Manifest 创建并配置 Slack App': 'Create and configure a Slack app with the manifest',
|
||
'复制配置后,在 Slack 选择 From a manifest;创建完成后生成 connections:write App Token,并将应用安装到工作区。': 'Copy the manifest and choose “From a manifest” in Slack. Then create a connections:write App Token and install the app to your workspace.',
|
||
'复制 Manifest': 'Copy manifest',
|
||
'已复制 Manifest': 'Manifest copied',
|
||
'打开 Slack 创建页': 'Open Slack app creation',
|
||
'Bot Token 来自 OAuth & Permissions;App Token 来自 Basic Information,并且必须包含 connections:write。': 'Get the Bot Token from OAuth & Permissions and the App Token from Basic Information. The App Token must include connections:write.',
|
||
'使用官方 App Manifest 快速配置机器人,再填写 Bot Token 与 App Token 建立本地 Socket Mode 连接。': 'Configure the bot with the official app manifest, then enter the Bot Token and App Token to start a local Socket Mode connection.',
|
||
'Slack 工作区': 'Slack workspace',
|
||
'Bot Token 与 App Token': 'Bot Token and App Token',
|
||
'填写 Bot Token': 'Enter Bot Token',
|
||
'手动接入飞书机器人': 'Connect Feishu bot manually',
|
||
'手动接入钉钉机器人': 'Connect DingTalk bot manually',
|
||
'手动接入企业微信机器人': 'Connect WeCom bot manually',
|
||
'手动接入QQ机器人': 'Connect QQ bot manually',
|
||
'填写飞书开放平台 App ID': 'Enter the Feishu Open Platform App ID',
|
||
'填写飞书开放平台 App Secret': 'Enter the Feishu Open Platform App Secret',
|
||
'填写钉钉应用 Client ID': 'Enter the DingTalk Client ID',
|
||
'填写钉钉应用 Client Secret': 'Enter the DingTalk Client Secret',
|
||
'填写企业微信智能机器人 Bot ID': 'Enter the WeCom AI Bot ID',
|
||
'填写企业微信智能机器人 Secret': 'Enter the WeCom AI Bot Secret',
|
||
'填写 QQ 开放平台 AppID': 'Enter the QQ Open Platform AppID',
|
||
'填写 QQ 开放平台 AppSecret': 'Enter the QQ Open Platform AppSecret',
|
||
'扫码接入微信机器人': 'Connect WeChat bot by QR code',
|
||
'扫码接入飞书机器人': 'Connect Feishu bot by QR code',
|
||
'扫码接入钉钉机器人': 'Connect DingTalk bot by QR code',
|
||
'扫码接入企业微信机器人': 'Connect WeCom bot by QR code',
|
||
'扫码接入 QQ 机器人': 'Connect QQ bot by QR code',
|
||
'扫码接入 WhatsApp 机器人': 'Connect WhatsApp by QR code',
|
||
'扫码绑定 WhatsApp 机器人': 'Connect WhatsApp by QR code',
|
||
'使用 App ID 和 App Secret 绑定飞书机器人': 'Connect a Feishu bot with App ID and App Secret',
|
||
'使用 Client ID 和 Client Secret 绑定钉钉机器人': 'Connect a DingTalk bot with Client ID and Client Secret',
|
||
'使用 Bot ID 和 Secret 绑定企业微信机器人': 'Connect a WeCom bot with Bot ID and Secret',
|
||
'使用 AppID 和 AppSecret 绑定 QQ 机器人': 'Connect a QQ bot with AppID and AppSecret',
|
||
'使用 Manifest 和双 Token 接入 Slack 机器人': 'Connect a Slack bot with a manifest and two tokens',
|
||
'使用 Bot Token 接入 Telegram 机器人': 'Connect a Telegram bot with a Bot Token',
|
||
'使用 Bot Token 接入 Discord 机器人': 'Connect a Discord bot with a Bot Token',
|
||
'取消绑定': 'Cancel setup',
|
||
'取消接入': 'Cancel setup',
|
||
'二维码由腾讯微信 iLink 服务签发。用手机微信扫描并确认后,账号凭据会直接写入 Harness Host,浏览器不会收到 bot_token。': 'The QR code is issued by Tencent WeChat iLink. After you scan and confirm, account credentials are written directly to the Harness Host and are never exposed to the browser.',
|
||
'扫码账号必须已加入企业/组织。如果钉钉提示尚未加入组织,请在提示页创建组织,或换用已加入组织的账号。': 'The DingTalk account must belong to an organization. If prompted, create an organization or use an account that already belongs to one.',
|
||
'请在手机上核对并确认授权。部分账号会额外显示一个配对数字,页面会在需要时提示输入。': 'Review and confirm authorization on your phone. Some accounts may also require a pairing number.',
|
||
'授权由钉钉官方页面完成。扫码账号必须已加入一个企业/组织并有权创建机器人;创建成功后,应用凭据会直接写入 Harness Host。': 'Authorization is completed on DingTalk’s official page. The account must belong to an organization and be allowed to create bots. Credentials are written directly to the Harness Host.',
|
||
'扫码由腾讯官方页面完成,不需要手动填写 AppID 或 AppSecret。扫码成功后,机器人会自动连接 DeepSeek Harness。': 'Scanning is completed on Tencent’s official page. No AppID or AppSecret is required, and the bot connects automatically.',
|
||
'扫码由腾讯官方页面完成,不需要手动填写 Bot ID 或 Secret。创建成功后,机器人会自动连接 DeepSeek Harness。': 'Scanning is completed on Tencent’s official page. No Bot ID or Secret is required, and the bot connects automatically.',
|
||
'腾讯页面会创建或绑定一个 QQ 机器人,并把连接凭据安全交给本机 Harness Host。': 'Tencent will create or connect a QQ bot and securely deliver its credentials to the local Harness Host.',
|
||
'企业微信官方页面会创建一个智能机器人,并把连接凭据安全交给本机 Harness Host。': 'WeCom will create an AI bot and securely deliver its credentials to the local Harness Host.',
|
||
'从此 Harness 移除这个微信账号?': 'Remove this WeChat account from Harness?',
|
||
'这会停止消息连接,并删除本机保存的 bot_token、账号配置和会话映射。其他微信账号不受影响。': 'This stops the message connection and removes the locally stored bot_token, account configuration, and session mappings. Other WeChat accounts are not affected.',
|
||
'此操作会停止这个机器人的连接,并删除保存在本机的接入配置和凭据。飞书开放平台中的应用不会被自动删除,其他机器人也不受影响。': 'This stops the bot connection and removes the locally stored configuration and credentials. The app in Feishu Open Platform is not deleted, and other bots are not affected.',
|
||
'这会停止消息连接,并删除本机保存的应用凭据、机器人配置及会话映射。钉钉开放平台中的机器人不会被自动删除。': 'This stops the message connection and removes the locally stored app credentials, bot configuration, and session mappings. The bot in DingTalk Open Platform is not deleted.',
|
||
'这会停止消息连接,并删除本机保存的应用凭据、机器人配置及会话映射。企业微信平台中的机器人不会被自动删除。': 'This stops the message connection and removes the locally stored app credentials, bot configuration, and session mappings. The bot in WeCom is not deleted.',
|
||
'这会停止消息连接,并删除本机保存的应用凭据、机器人配置及会话映射。腾讯平台中的机器人不会被自动删除。': 'This stops the message connection and removes the locally stored app credentials, bot configuration, and session mappings. The bot on Tencent’s platform is not deleted.',
|
||
'这会停止消息连接,并删除本机保存的 WhatsApp 关联设备和会话映射。': 'This stops the message connection and removes the locally stored WhatsApp linked device and session mappings.',
|
||
'正在读取飞书机器人列表': 'Loading Feishu bots',
|
||
'正在读取飞书连接状态…': 'Loading Feishu connection status…',
|
||
'正在读取微信连接状态…': 'Loading WeChat connection status…',
|
||
'正在读取钉钉连接状态…': 'Loading DingTalk connection status…',
|
||
'通过扫码把钉钉机器人接入 DeepSeek Harness': 'Connect a DingTalk bot to DeepSeek Harness by QR code',
|
||
'钉钉服务没有返回扫码绑定进度': 'DingTalk did not return QR setup progress',
|
||
'钉钉扫码服务没有返回有效的绑定任务': 'DingTalk did not return a valid setup attempt',
|
||
'钉钉 Stream 长连接运行正常': 'DingTalk Stream connection is healthy',
|
||
'钉钉服务没有返回有效的机器人列表': 'DingTalk did not return a valid bot list',
|
||
'${totals.connected} / ${totals.configured} 在线': '${totals.connected} / ${totals.configured} online',
|
||
'用于把钉钉机器人接入 DeepSeek Harness 的一次性二维码': 'One-time QR code for connecting a DingTalk bot to DeepSeek Harness',
|
||
'二维码已过期\\n请重新生成': 'QR code expired\\nGenerate a new one',
|
||
'机器人已创建,正在建立消息连接': 'Bot created. Starting the message connection',
|
||
'钉钉扫码服务没有返回安全的二维码': 'DingTalk did not return a secure QR code',
|
||
'钉钉二维码已生成,请使用钉钉 App 扫描。': 'DingTalk QR code generated. Scan it with the DingTalk app.',
|
||
'钉钉机器人凭据已绑定。': 'DingTalk bot credentials connected.',
|
||
'已取消钉钉机器人接入。': 'DingTalk bot setup cancelled.',
|
||
'钉钉机器人及本机凭据已移除。': 'DingTalk bot and local credentials removed.',
|
||
'飞书服务没有返回二维码信息': 'Feishu did not return QR code information',
|
||
'飞书服务返回的二维码信息不完整': 'Feishu returned incomplete QR code information',
|
||
'飞书服务返回了无效的机器人状态': 'Feishu returned an invalid bot status',
|
||
'飞书服务返回的机器人缺少 botId': 'The Feishu bot is missing botId',
|
||
'飞书服务没有返回连接状态': 'Feishu did not return connection status',
|
||
'飞书服务没有返回创建进度': 'Feishu did not return creation progress',
|
||
'飞书服务返回了未知的创建状态': 'Feishu returned an unknown creation status',
|
||
'已接入 ${totals.configured} 个机器人,其中 ${totals.connected} 个在线': '${totals.connected} of ${totals.configured} bots online',
|
||
'尚未接入机器人': 'No bot connected yet',
|
||
'用于新增 DeepSeek Harness 飞书机器人的一次性授权二维码': 'One-time authorization QR code for adding a Feishu bot to DeepSeek Harness',
|
||
'请刷新后重新扫码': 'Refresh and scan again',
|
||
'${connected ? "检查连接" : "重试连接"}${bot.name}': '${connected ? "Check connection" : "Reconnect"} ${bot.name}',
|
||
'无法读取飞书机器人': 'Could not load Feishu bots',
|
||
'授权二维码已生成,请使用飞书扫码。': 'Authorization QR code generated. Scan it with Feishu.',
|
||
'飞书机器人凭据已绑定。': 'Feishu bot credentials connected.',
|
||
'已取消添加机器人。': 'Adding the bot was cancelled.',
|
||
'${newBot.bot.name}已连接,可以在飞书中开始聊天。': '${newBot.bot.name} is connected and ready to chat in Feishu.',
|
||
'${bot.name}操作失败,请查看机器人状态。': '${bot.name} operation failed. Check the bot status.',
|
||
'${bot.name}已从此 DeepSeek Harness 移除;飞书开放平台中的应用未被删除。': '${bot.name} was removed from this DeepSeek Harness. The app in Feishu Open Platform was not deleted.',
|
||
'无法读取连接状态': 'Could not load connection status',
|
||
'QQ 服务没有返回扫码绑定进度': 'QQ did not return QR setup progress',
|
||
'QQ 扫码服务没有返回有效的绑定任务': 'QQ did not return a valid setup attempt',
|
||
'QQ WebSocket 长连接运行正常': 'QQ WebSocket connection is healthy',
|
||
'QQ 连接未就绪,插件会自动重试。': 'The QQ connection is not ready; the plugin will retry automatically.',
|
||
'QQ 连接未就绪,插件会自动重试': 'The QQ connection is not ready; the plugin will retry automatically',
|
||
'QQ 连接当前离线': 'The QQ connection is currently offline',
|
||
'QQ 服务没有返回有效的机器人列表': 'QQ did not return a valid bot list',
|
||
'尚未绑定 QQ 机器人': 'No QQ bot connected yet',
|
||
'用于绑定 QQ 机器人的一次性二维码': 'One-time QR code for connecting a QQ bot',
|
||
'${channel}${connectionSummary}运行正常': '${channel}${connectionSummary} is healthy',
|
||
'${channel} 服务没有返回有效的机器人列表': '${channel} did not return a valid bot list',
|
||
'使用 Bot Token 接入 ${channel} 机器人': 'Connect a ${channel} bot with a Bot Token',
|
||
'${model.totals.connected} / ${model.totals.configured} 在线': '${model.totals.connected}/${model.totals.configured} online',
|
||
' Bot API 长轮询': ' Bot API long polling',
|
||
'企业微信服务没有返回扫码绑定进度': 'WeCom did not return QR setup progress',
|
||
'企业微信扫码服务没有返回有效的绑定任务': 'WeCom did not return a valid setup attempt',
|
||
'企业微信 WebSocket 长连接运行正常': 'WeCom WebSocket connection is healthy',
|
||
'企业微信服务没有返回有效的机器人列表': 'WeCom did not return a valid bot list',
|
||
'尚未绑定企业微信机器人': 'No WeCom bot connected yet',
|
||
'用于绑定企业微信机器人的一次性二维码': 'One-time QR code for connecting a WeCom bot',
|
||
'微信扫码服务没有返回有效的绑定任务': 'WeChat did not return a valid setup attempt',
|
||
'微信绑定没有完成': 'WeChat setup did not complete',
|
||
'微信连接正常': 'WeChat connection is healthy',
|
||
'微信连接未就绪': 'WeChat connection is not ready',
|
||
'当前模型不支持图片,请用 /models 查看可用模型,再用 /model <序号> 切换后重发。': 'The current model does not support images. Use /models to list models, then /model <number> to switch and resend.',
|
||
'图片超过宿主允许的大小,请压缩后重试。': 'The image exceeds the Host size limit. Compress it and try again.',
|
||
'图片分辨率过高,请压缩后重试。': 'The image resolution is too high. Compress it and try again.',
|
||
'图片内容无效或格式不受支持,请重新发送。': 'The image is invalid or unsupported. Send it again.',
|
||
'未能读取图片内容,请重新发送。': 'The image could not be read. Send it again.',
|
||
'图片格式与实际内容不一致,请重新发送。': 'The declared image format does not match its content. Send it again.',
|
||
'一次发送的图片数量超过宿主限制,请减少后重试。': 'The message exceeds the Host image-count limit. Remove some images and try again.',
|
||
'图片总大小超过宿主限制,请减少图片或压缩后重试。': 'The images exceed the Host total-size limit. Remove or compress some images and try again.',
|
||
'图片下载地址发生了重定向,暂时无法读取。': 'The image download redirected and cannot be read.',
|
||
'图片超过 5 MB,请压缩后重试。': 'The image exceeds 5 MB. Compress it and try again.',
|
||
'一次发送的图片总大小过大,请减少图片数量或压缩后重试。': 'The images are too large in total. Remove or compress some images and try again.',
|
||
'图片下载失败,请重新发送后再试。': 'The image download failed. Send it again.',
|
||
'暂不支持该图片格式,请发送 JPEG、PNG、WebP 或 GIF 图片。': 'This image format is unsupported. Send a JPEG, PNG, WebP, or GIF image.',
|
||
'消息处理失败,请稍后重试。': 'Message processing failed. Try again later.',
|
||
'微信服务没有返回有效的账号列表': 'WeChat did not return a valid account list',
|
||
'尚未绑定微信': 'No WeChat account connected yet',
|
||
'用于把微信机器人绑定到 DeepSeek Harness 的一次性二维码': 'One-time QR code for connecting a WeChat bot to DeepSeek Harness',
|
||
'保持本页打开,等待消息长轮询变为在线': 'Keep this page open until long polling is online',
|
||
'微信二维码已生成,请使用手机微信扫描。': 'WeChat QR code generated. Scan it with WeChat on your phone.',
|
||
'移除失败:${presentError(error).message}': 'Removal failed: ${presentError(error).message}',
|
||
'无法读取微信状态': 'Could not load WeChat status',
|
||
'WhatsApp 服务没有返回扫码进度': 'WhatsApp did not return QR setup progress',
|
||
'WhatsApp 服务没有返回有效的扫码任务': 'WhatsApp did not return a valid setup attempt',
|
||
'WhatsApp 服务没有返回有效的机器人列表': 'WhatsApp did not return a valid account list',
|
||
'用于关联 WhatsApp 设备的一次性二维码': 'One-time QR code for linking a WhatsApp device',
|
||
'用户': 'User',
|
||
'微信用户 ID': 'WeChat user ID',
|
||
'填写接收消息的用户 ID': 'Enter the recipient user ID',
|
||
'私聊': 'Direct message',
|
||
'群聊': 'Group',
|
||
'群 Chat ID': 'Group Chat ID',
|
||
'用户 ID': 'User ID',
|
||
'填写钉钉用户 ID': 'Enter the DingTalk user ID',
|
||
'群 Open Conversation ID': 'Group Open Conversation ID',
|
||
'填写企业微信用户 ID': 'Enter the WeCom user ID',
|
||
'填写群 chatid': 'Enter the group chatid',
|
||
'单聊': 'Direct message',
|
||
'用户 Open ID': 'User Open ID',
|
||
'填写 user_openid': 'Enter the user_openid',
|
||
'群 Open ID': 'Group Open ID',
|
||
'填写 group_openid': 'Enter the group_openid',
|
||
'会话': 'Conversation',
|
||
'线程': 'Thread',
|
||
'Thread 时间戳': 'Thread timestamp',
|
||
'聊天': 'Chat',
|
||
'话题': 'Topic',
|
||
'频道或私信': 'Channel or DM',
|
||
'填写可发消息的 Channel ID': 'Enter a Channel ID the bot can message',
|
||
'用户 JID': 'User JID',
|
||
'群 JID': 'Group JID',
|
||
'请求失败,请稍后重试。': 'Request failed. Try again later.',
|
||
'当前浏览器不支持自动复制,请手动选择复制。': 'Automatic copy is unavailable. Select and copy the value manually.',
|
||
'目标保存失败,请检查后重试。': 'Could not save the target. Check it and try again.',
|
||
'无法生成未占用的 Target ID,请重试。': 'Could not generate an unused Target ID. Try again.',
|
||
'编辑投递目标': 'Edit delivery target',
|
||
'新建投递目标': 'New delivery target',
|
||
'已从会话自动填入目标信息;确认后再保存。': 'Target details were filled from the conversation. Review them before saving.',
|
||
'请手动填写从对应平台取得的原生标识。': 'Enter the native identifier from the platform manually.',
|
||
'例如 daily-report': 'For example, daily-report',
|
||
'使用大小写字母、数字、点、下划线、冒号、@ 或连字符。': 'Use letters, numbers, dots, underscores, colons, @, or hyphens.',
|
||
'显示名称(可选)': 'Display name (optional)',
|
||
'例如 每日汇报群': 'For example, Daily reports',
|
||
'目标类型': 'Target type',
|
||
'保存目标': 'Save target',
|
||
'请先完成投递目标读取': 'Wait for delivery targets to finish loading',
|
||
'从已聊过的会话选择': 'Choose from conversations',
|
||
'已聊会话': 'Conversation',
|
||
'从会话选择targetID': 'Select a targetID from conversations',
|
||
'选择后会自动填写目标信息和调用别名,确认后再保存。': 'Selecting a conversation fills the target details and call alias. Review them before saving.',
|
||
'正在刷新…': 'Refreshing…',
|
||
'刷新': 'Refresh',
|
||
'正在读取已聊会话…': 'Loading known conversations…',
|
||
'无法读取已聊会话,请稍后重试。': 'Could not load known conversations. Try again later.',
|
||
'还没有可选择的会话': 'No conversations to choose from',
|
||
'先在对应平台与机器人聊一条消息,再刷新。': 'Send the bot a message on the platform, then refresh.',
|
||
'已添加': 'Added',
|
||
'手动填写(高级)': 'Enter manually (advanced)',
|
||
'测试消息已发送,请到目标会话确认。': 'Test message sent. Confirm it in the target conversation.',
|
||
'测试发送失败,请稍后重试。': 'Test delivery failed. Try again later.',
|
||
'已复制调用参数': 'Call parameters copied',
|
||
'复制失败。': 'Copy failed.',
|
||
'删除失败,请稍后重试。': 'Could not delete the target. Try again later.',
|
||
'复制调用参数': 'Copy call parameters',
|
||
'机器人离线时不可发送测试消息': 'Test delivery is unavailable while the bot is offline',
|
||
'测试投递目标': 'Test delivery target',
|
||
'测试': 'Test',
|
||
'编辑': 'Edit',
|
||
'删除': 'Delete',
|
||
'删除 ': 'Delete ',
|
||
'?使用这个 targetId 的外部调用将返回 unknown-target。': '? External calls using this targetId will return unknown-target.',
|
||
'正在删除…': 'Deleting…',
|
||
'确认删除': 'Delete target',
|
||
'投递目标设置暂不可用。': 'Delivery target settings are unavailable.',
|
||
'无法读取投递目标,请稍后重试。': 'Could not load delivery targets. Try again later.',
|
||
'← 返回机器人列表': '← Back to bots',
|
||
'使用文档': 'User guide',
|
||
'打开主动投递使用文档': 'Open the proactive delivery guide',
|
||
'当前渠道暂不支持投递目标。': 'Delivery targets are not supported for this channel.',
|
||
'已复制 Bot ID': 'Bot ID copied',
|
||
'复制': 'Copy',
|
||
'投递目标': 'Delivery targets',
|
||
'机器人当前离线;仍可配置目标,恢复连接后再测试。': 'The bot is offline. You can still configure targets and test them after reconnection.',
|
||
'新建目标': 'New target',
|
||
'正在读取投递目标…': 'Loading delivery targets…',
|
||
'尚未配置投递目标': 'No delivery targets yet',
|
||
'点击“新建目标”可从已聊过的会话选择,也可手动填写。': 'Select New target to choose a conversation or enter the details manually.',
|
||
});
|
||
|
||
export const en = EN;
|
||
export const zh = Object.freeze(Object.fromEntries(
|
||
Object.keys(EN).map((key) => [key, key === '$locale' ? 'zh' : key]),
|
||
));
|
||
|
||
let translate = (key) => key;
|
||
|
||
export function setImTranslator(next) {
|
||
translate = typeof next === 'function' ? next : (key) => key;
|
||
}
|
||
|
||
export function isEnglish() {
|
||
return translate('$locale') === 'en';
|
||
}
|
||
|
||
function channelName(value) {
|
||
return localizeText(value);
|
||
}
|
||
|
||
function translateDynamic(text) {
|
||
const guidanceLimit = /^增强提示词不得超过 (\d+) 个字符。$/.exec(text);
|
||
if (guidanceLimit) return `Guidance must not exceed ${guidanceLimit[1]} characters.`;
|
||
let match = /^(\d+) \/ (\d+) 在线$/.exec(text);
|
||
if (match) return `${match[1]}/${match[2]} online`;
|
||
match = /^已接入 (\d+) 个机器人,其中 (\d+) 个在线$/.exec(text);
|
||
if (match) return `${match[2]} of ${match[1]} bots online`;
|
||
match = /^正在读取\s*(.+?)\s*机器人状态…$/.exec(text);
|
||
if (match) return `Loading ${channelName(match[1])} bot status…`;
|
||
match = /^无法读取\s*(.+?)\s*机器人状态$/.exec(text);
|
||
if (match) return `Could not load ${channelName(match[1])} bot status`;
|
||
match = /^尚未接入\s*(.+?)\s*机器人$/.exec(text);
|
||
if (match) return `No ${channelName(match[1])} bot connected yet`;
|
||
match = /^已接入的\s*(.+?)\s*机器人$/.exec(text);
|
||
if (match) return `Connected ${channelName(match[1])} bots`;
|
||
match = /^手动接入(.+)机器人$/.exec(text);
|
||
if (match) return `Connect ${channelName(match[1])} bot manually`;
|
||
match = /^(.+) 设置$/.exec(text);
|
||
if (match) return `${channelName(match[1])} settings`;
|
||
match = /^从 DeepSeek Harness 移除“(.+)”?$/.exec(text);
|
||
if (match) return `Remove “${match[1]}” from DeepSeek Harness?`;
|
||
match = /^从 DeepSeek Harness 移除(.+)$/.exec(text);
|
||
if (match) return `Remove ${match[1]} from DeepSeek Harness`;
|
||
match = /^(.+)的飞书授权流程$/.exec(text);
|
||
if (match) return `Feishu authorization flow for ${match[1]}`;
|
||
match = /^用于为(.+)补全权限与回调的一次性授权二维码$/.exec(text);
|
||
if (match) return `One-time QR code for completing permissions and the callback for ${match[1]}`;
|
||
match = /^用于为(.+)开通群消息权限的一次性授权二维码$/.exec(text);
|
||
if (match) return `One-time QR code for granting group-message permission to ${match[1]}`;
|
||
match = /^正在为「(.+)」补全权限与回调$/.exec(text);
|
||
if (match) return `Completing permissions and the callback for “${match[1]}”`;
|
||
match = /^正在为「(.+)」开通群消息权限$/.exec(text);
|
||
if (match) return `Granting group-message permission to “${match[1]}”`;
|
||
match = /^为(.+)补全权限与回调$/.exec(text);
|
||
if (match) return `Complete permissions and the callback for ${match[1]}`;
|
||
match = /^(.+)的权限补全二维码已生成,请使用飞书扫码。$/.exec(text);
|
||
if (match) return `Permission-completion QR code generated for ${match[1]}. Scan it with Feishu.`;
|
||
match = /^(.+)的群消息权限二维码已生成,请使用飞书确认。$/.exec(text);
|
||
if (match) return `Group-message permission QR code generated for ${match[1]}. Confirm it with Feishu.`;
|
||
match = /^(.+)的权限与回调已补全。$/.exec(text);
|
||
if (match) return `Permissions and the callback completed for ${match[1]}.`;
|
||
match = /^(.+)已开通群消息权限,并启用“响应所有群消息”。$/.exec(text);
|
||
if (match) return `${match[1]} now has group-message permission and “Respond to all group messages” is enabled.`;
|
||
match = /^(检查连接|重试连接)(.+)$/.exec(text);
|
||
if (match) return `${localizeText(match[1])} ${match[2]}`;
|
||
match = /^移除(.+)$/.exec(text);
|
||
if (match) return `Remove ${match[1]}`;
|
||
match = /^这会停止消息连接,并删除本机保存的 (.+)、机器人配置及会话映射。(.+)中的机器人不会被自动删除。$/.exec(text);
|
||
if (match) {
|
||
return `This stops the message connection and removes the locally stored ${localizeText(match[1])}, bot configuration, and session mappings. The bot in ${localizeText(match[2])} is not deleted.`;
|
||
}
|
||
match = /^二维码剩余 (.+)$/.exec(text);
|
||
if (match) return `QR code expires in ${match[1]}`;
|
||
match = /^最近一条消息处理失败:(.+)$/.exec(text);
|
||
if (match) return `Latest message failed: ${localizeText(match[1])}`;
|
||
match = /^图片下载失败(HTTP (.+)),请重新发送后再试。$/.exec(text);
|
||
if (match) return `The image download failed (HTTP ${match[1]}). Send it again.`;
|
||
match = /^一次最多只能处理 (\d+) 张图片。$/.exec(text);
|
||
if (match) return `A message can contain at most ${match[1]} images.`;
|
||
match = /^状态刷新失败:(.+)$/.exec(text);
|
||
if (match) return `Status refresh failed: ${match[1]}`;
|
||
match = /^状态自动刷新失败:(.+)$/.exec(text);
|
||
if (match) return `Automatic status refresh failed: ${match[1]}`;
|
||
match = /^操作失败:(.+)$/.exec(text);
|
||
if (match) return `Operation failed: ${match[1]}`;
|
||
match = /^连接检查失败:(.+)$/.exec(text);
|
||
if (match) return `Connection check failed: ${match[1]}`;
|
||
match = /^移除失败:(.+)$/.exec(text);
|
||
if (match) return `Removal failed: ${match[1]}`;
|
||
|
||
const phrases = [
|
||
['企业微信', 'WeCom'], ['DeepSeek Harness', 'DeepSeek Harness'],
|
||
['WhatsApp', 'WhatsApp'], ['Telegram', 'Telegram'], ['Discord', 'Discord'],
|
||
['Slack', 'Slack'], ['飞书', 'Feishu'], ['钉钉', 'DingTalk'], ['微信', 'WeChat'],
|
||
['机器人', 'bot'], ['账号', 'account'], ['应用', 'app'], ['凭据', 'credentials'],
|
||
['服务返回了无法识别的响应', 'service returned an unrecognized response'],
|
||
['服务没有返回有效的机器人列表', 'service did not return a valid bot list'],
|
||
['操作失败,请稍后重试', 'operation failed; try again later'],
|
||
['操作失败', 'operation failed'], ['连接尚未就绪', 'connection is not ready'],
|
||
['没有接入完成', 'was not connected'], ['没有绑定完成', 'was not connected'],
|
||
['设置页缺少 RPC 连接', 'settings are missing an RPC connection'],
|
||
['设置', 'settings'], ['连接检查完成', 'connection check completed'],
|
||
['仍未连接,插件会继续自动重试', 'is still offline; the plugin will keep retrying'],
|
||
['已重新连接', 'reconnected'], ['移除失败,请重试', 'could not be removed; try again'],
|
||
['已连接,可以开始聊天', 'is connected and ready to chat'],
|
||
['已连接,可以开始发送消息', 'is connected and ready for messages'],
|
||
['服务请求失败', 'service request failed'], ['连接遇到问题', 'connection encountered a problem'],
|
||
['正在读取', 'Loading '], ['连接状态', 'connection status'], ['二维码', 'QR code'],
|
||
];
|
||
let output = text;
|
||
for (const [source, target] of phrases) output = output.replaceAll(source, target);
|
||
return output;
|
||
}
|
||
|
||
export function localizeText(value) {
|
||
if (typeof value !== 'string') return value;
|
||
const exact = translate(value);
|
||
if (exact !== value || !isEnglish()) return exact;
|
||
return translateDynamic(value);
|
||
}
|
||
|
||
const LOCALIZED_PROPS = Object.freeze([
|
||
'aria-label',
|
||
'alt',
|
||
'placeholder',
|
||
'title',
|
||
]);
|
||
|
||
function localizeChild(child) {
|
||
if (typeof child === 'string') return localizeText(child);
|
||
if (Array.isArray(child)) return child.map(localizeChild);
|
||
return child;
|
||
}
|
||
|
||
export function h(type, props, ...children) {
|
||
let localizedProps = props;
|
||
if (props) {
|
||
for (const key of LOCALIZED_PROPS) {
|
||
if (typeof props[key] === 'string') {
|
||
localizedProps = localizedProps === props ? { ...props } : localizedProps;
|
||
localizedProps[key] = localizeText(props[key]);
|
||
}
|
||
}
|
||
}
|
||
return React.createElement(type, localizedProps, ...children.map(localizeChild));
|
||
}
|