dsh-im-ops/plugin-src/client/i18n.js
oliver e8e58924ca Polish access-grant UI: no sticky typeahead overlay, flatter group cards (4.9.1-ops.8).
Suggestions only open while focused and hide exact matches; nested group admins/members drop extra frames; pending and actions show group names.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-05 17:20:53 +08:00

1067 lines
91 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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',
"群聊 · ": "Group · ",
"。记得点保存。": ". Remember to save.",
"已加入群授权:": "Added group access for: ",
"加入群:": "Add to group: ",
"已在群:": "Already in group: ",
"填写便于识别的群名称": "Enter a readable group name",
"群名称": "Group name",
"未知群": "Unknown group",
"无法读取访问授权,请返回刷新后重试。": "Could not load the access grant. Go back, refresh, and try again.",
"正在读取分级访问设置…": "Loading graded access settings…",
"加本群": "Add to group",
"已在本群": "Already in group",
"加私聊": "Add to DMs",
"已在私聊": "Already in DMs",
"已加入本群授权,记得点保存。": "Added to this group. Remember to save.",
"已加入私聊授权,记得点保存。": "Added to DM access. Remember to save.",
"暂无联系人。有人私聊或 @ 机器人后会出现在此。": "No contacts yet. They appear here after someone DMs or @mentions the bot.",
"仅记录私聊机器人,或在群里 @ 机器人的人。电话是唯一授权键,可一键加入私聊/本群授权。": "Only people who DM the bot or @mention it in a group are recorded. Phone is the sole auth key; use one-click to grant DM or group access.",
"WhatsApp 按电话号码授权:全局管理员管私聊;群管理员只批本群。成员不可跨群、有群权也不自动获得私聊权。": "WhatsApp authorizes by phone number: global admins manage DMs; group admins approve only their group. Members do not cross groups, and group access does not grant DMs.",
"保存分级访问设置": "Save graded access settings",
"保存访问与会话设置": "Save access and session settings",
"全局管理员": "Global admins",
"分级访问设置已保存。": "Graded access settings saved.",
"审批失败。": "Approval failed.",
"尚无已知群。可在下方粘贴群 JID(…@g.us),或等群内有人 @ 机器人后自动出现。": "No known groups yet. Paste a group JID (…@g.us) below, or wait until someone @mentions the bot in a group.",
"已批准申请。": "Request approved.",
"已拒绝申请。": "Request denied.",
"当前渠道仍使用旧版访问设置。": "This channel still uses the legacy access settings.",
"待审批": "Pending approval",
"待补电话": "Phone pending",
"批准": "Approve",
"拒绝": "Deny",
"按发言人拆分(推荐)": "Split by speaker (recommended)",
"整群共享一个 Session": "Share one session for the whole group",
"新增管理员": "Add admin",
"暂无待批申请": "No pending requests",
"暂无联系人。私聊或群内触发后会出现在此,便于补齐电话与昵称。": "No contacts yet. People who DM or trigger the bot in a group appear here so you can fill in phones and names.",
"最近联系人(自动沉淀)": "Recent contacts (auto-collected)",
"服务没有返回已保存的访问授权。": "The service did not return the saved access grant.",
"未命名": "Unnamed",
"未配置时,本群申请回落给全局管理员审批(仍只授予本群权)。": "When unset, this group's requests fall back to global admins (still grants only this group).",
"本群授权成员": "Group members",
"本群管理员": "Group admins",
"查看群会话策略说明": "View group session policy details",
"添加群": "Add group",
"添加群 JID": "Add group JID",
"电话": "Phone",
"私聊授权用户": "DM members",
"绑定账号自动为全局管理员,至少保留一位。": "The linked account is a global admin automatically. Keep at least one.",
"绑定账号(全局管理员)": "Linked account (global admin)",
"缺少可用于审批的全局管理员电话。": "No global admin phone is available for approval.",
"群 JID 格式无效。": "Invalid group JID.",
"群会话策略": "Group session policy",
"群内 Session 绑定": "In-group session binding",
"群备注名": "Group display name",
"群授权": "Group grants",
"访问与群会话设置已保存。": "Access and group session settings saved.",
"访问授权保存失败,请稍后重试。": "Could not save the access grant. Try again later.",
"访问授权暂不可用。": "Access grant settings are currently unavailable.",
"运维默认按发言人拆分 Session,避免同群多人互相打断;可选改回整群共享 Session。": "Ops defaults to one session per speaker so group members do not interrupt each other. You can switch back to one shared group session.",
"(电话未解析,请先在联系人中确认)": "(Phone unresolved — confirm it in contacts first)",
'查看访问权限说明': '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.',
'会话标识': 'Chat ID',
'查看群聊会话标识字段说明': 'View group chat ID field details',
'查看私聊会话标识字段说明': 'View direct chat ID field details',
'该字段不是每个渠道都能提供。会话标识用于区分不同的群组或私聊,飞书群聊会带上群 ID。当前消息没有会话标识时,即使已选择该字段,<dsh_im_source> 中也会省略 chatId。': 'This field is not available on every channel. The chat ID distinguishes different groups or direct chats, and Feishu group chats include the group ID. If the current message has no chat ID, <dsh_im_source> omits chatId even when the field is selected.',
'话题标识': 'Topic ID',
'查看群聊话题标识字段说明': 'View group topic ID field details',
'查看私聊话题标识字段说明': 'View direct topic ID field details',
'该字段不是每个渠道都能提供。飞书话题群的消息会带上话题 ID,用于区分同一群组内的不同话题;当前消息不在话题中时,即使已选择该字段,<dsh_im_source> 中也会省略 threadId。': 'This field is not available on every channel. Messages in a Feishu topic chat carry the topic ID, which distinguishes different topics inside the same group. If the current message is not inside a topic, <dsh_im_source> omits threadId 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 eight 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.',
'机器人已保存,但连接未就绪': 'The bot was saved, but the connection is not ready',
'查看已保存的机器人': 'View saved bot',
'测试消息已发送,请到对应机器人会话中确认。': '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: ${localizeText(match[1])} (reference: ${match[2]})`;
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));
}