/** * dsh-notifier — 客户端文案字典(复用官方 dsh-client-locale)。 * * 双语平衡:`zh` 为 key 源;`en` 必须覆盖全部 key(编译期锁平衡)。 * 不进字典:console 日志、宿主端错误消息(跨端契约原文匹配「版本冲突」保持)、 * 通知 kind 动态数据、toast.ps1 宿主端 PowerShell 固定文案(维护者拍板保留并文档明示) * (官方原则:数据不翻译)。 */ /** 简体中文字典(key 源)。 */ export declare const zh: { readonly evtAsk: "审批等待"; readonly evtQuestion: "向你提问"; readonly evtTaskDone: "任务完成"; readonly evtSubagentDone: "子任务完成"; readonly evtTaskError: "任务出错"; readonly evtTurnEnd: "轮次完成"; readonly evtTurnEndHint: "轮次完成每轮都触发、非常频繁,默认关闭;开启后可能与任务完成通知相邻;若同时投递多个频道,各频道会分别提醒(仍受节流与路由约束)。"; readonly chSystemNotify: "系统通知"; readonly chBrowserNotify: "浏览器通知"; readonly chWhenVisible: "页面可见时也弹"; readonly chPopup: "弹窗"; readonly chSound: "声音"; readonly chStateOn: "启用"; readonly chStateSound: "仅声音"; readonly chStateOff: "已停用"; readonly chSoundFollow: "跟随系统默认"; readonly chSoundFollowHint: "系统卡:Windows 用系统通知音 / macOS Glass / Linux 自播默认事件音;浏览器卡:交给操作系统发声(不 silent)。"; readonly chSoundTone: "音色"; readonly chSoundPreview: "试听"; readonly chSoundOnlyNote: "弹窗已关、声音开启:本频道只响不弹(不打扰界面)。"; readonly chPopupSoundOffNote: "弹窗与声音都已关闭:本频道不会有任何提醒(要停用请用卡头开关,它是唯一的「发不发」判据)。"; readonly toneDing: "叮(Ding)"; readonly toneBell: "铃(Bell)"; readonly toneChime: "钟琴(Chime)"; readonly tonePop: "啵(Pop)"; readonly sysPlatformWin: "宿主平台 Windows:系统提示音走 toast 系统音;选音色后经 SoundPlayer 播放内置 wav(近似映射,与系统设置音可不同)。"; readonly sysPlatformMac: "宿主平台 macOS:系统提示音经 osascript/NSSound(Glass/Tink/Sosumi/Pop 近似映射),受系统「允许通知声音」设置约束。"; readonly sysPlatformLinux: "宿主平台 Linux:不依赖桌面守护进程的发声支持——声音由插件自播,按 paplay → pw-play → aplay → ffplay 依次回退且首个成功即停;主题事件音缺失时改用运行时合成的提示音。只命中 paplay/pw-play 时,没有声音服务的宿主听不到声音(两种情形都仍需宿主有音频设备)。"; readonly sysPlatformOther: "系统提示音随宿主平台尽力而为;此处试听为浏览器本地合成,仅作听感参考。"; readonly kAsk: "审批等待"; readonly kQuestion: "向你提问"; readonly kDone: "任务完成"; readonly kSubagentDone: "子任务完成"; readonly kError: "任务出错"; readonly kTurnEnd: "轮次完成"; readonly kTest: "测试"; readonly lanAccessHint: "(若为局域网直连访问,通知服务仅允许回环调用而被拒:请用 dsh-lan-proxy 的 https://<局域网IP>:3443 或 ssh -L 3080:127.0.0.1:3080 隧道访问后刷新)"; readonly settingsLoading: "通知:加载中…"; readonly settingsUnavailable: "设置服务不可用"; readonly loadFail: "设置加载失败:{msg}{hint}"; readonly unchanged: "未修改"; readonly savedOk: "已保存"; readonly conflictReloadFail: "冲突恢复失败:未能拉取最新配置,请重试保存"; readonly saveFail: "保存失败:{msg}"; readonly saveTimeout: "保存超时:网络请求未在 15 秒内完成,请重试"; readonly conflictTitle: "配置已在其他窗口被修改:"; readonly conflictChannels: "频道配置已在其他窗口被修改:"; readonly conflictLoadLatest: "加载最新(放弃我的修改)"; readonly conflictOverwrite: "保留我的修改并覆盖"; readonly conflictIgnore: "忽略"; readonly conflictLoadedLatest: "已加载最新配置"; readonly testSent: "测试通知已发送(服务端未释放句柄 {n} 条)"; readonly testFail: "发送测试通知失败:{msg}{hint}"; readonly testRequestFail: "测试请求失败:{msg}{hint}"; readonly cleared: "已清空 {n} 条通知记录"; readonly clearFail: "清空失败:{msg}{hint}"; readonly historyRetention: "历史保留天数(0=不按天清理)"; readonly dndEnable: "启用免打扰"; readonly dndStart: "开始时间"; readonly dndEnd: "结束时间"; readonly dndStillLabel: "免打扰仍提醒"; readonly allowDisabledHint: "事件未启用"; readonly allowFollowEnabled: "跟随已启用事件"; readonly allowResetDefault: "恢复默认(审批/提问/出错)"; readonly dndAddWindow: "添加时段"; readonly dndRemoveWindow: "删除该时段"; readonly dndWindow: "时段 {n}"; readonly dndEmptyHint: "暂无时段:免打扰不会拦截任何通知"; readonly dndLimitHint: "最多 5 个时段"; readonly dndPreviewHit: "当前 {now} 落在 {start}–{end} 内"; readonly dndPreviewMiss: "当前 {now} 不在免打扰时段内"; readonly dndPreviewOff: "免打扰未启用"; readonly dndPreviewNote: "按本机时间推算,仅供参考;实际是否拦截以服务端裁决与通知记录为准"; readonly settingsSvcDown: "设置服务不可用:当前无法保存配置(settings 服务未挂载)。插件通知功能不受影响,但更改将被拒绝。"; readonly httpDegraded: "当前为局域网 HTTP 访问(非安全上下文),浏览器禁止系统级弹窗,已启用「页面内横幅 + 提示音 + 标题提醒」降级通道。如需系统弹窗,请改用 dsh-lan-proxy 的 https://<局域网IP>:3443 或 localhost 隧道访问(如 ssh -L 3080:127.0.0.1:3080)后刷新页面。"; readonly permGranted: "浏览器通知权限:已授权 ✓"; readonly permDenied: "浏览器通知权限:已拒绝。未授权时不会弹浏览器系统通知;页面隐藏时只更新标题,页面可见且通知策略允许时显示页内横幅。请在浏览器站点设置中允许本页通知。"; readonly permDefault: "浏览器通知权限:未授权。未授权时不会弹浏览器系统通知;页面隐藏时只更新标题,页面可见且通知策略允许时显示页内横幅。可点击下方按钮请求授权。"; readonly iosUnsupported: "当前设备不支持系统级通知(如 iOS Safari 普通标签页无 Web Notifications)。可用通道:页面可见时的横幅 + 提示音(需保持页面打开),或经 dsh-lan-proxy 的 https://<局域网IP>:3443 访问并「添加到主屏幕」后获得 PWA 级通知能力。"; readonly clearConfirm: "确认清理记录?"; readonly clearLabel: "清理记录"; readonly requestPerm: "请求通知权限"; readonly permRequested: "权限请求完成"; readonly sendTest: "发送测试通知"; readonly refresh: "刷新"; readonly historyTitle: "通知记录(最近 10 条)"; readonly historyEmpty: "暂无通知记录(点「发送测试通知」可生成一条)"; readonly historySuppressed: "免打扰拦截未发出"; readonly chStatusOk: "已投递"; readonly chStatusFailed: "投递失败"; readonly chStatusSkipped: "未发出"; readonly reasonDetailLabel: "来自宿主原文"; readonly reasonLegacy: "升级前的记录"; readonly reasonUnknown: "原因未知(未能识别这条记录)"; readonly reasonSkipConfig: "弹窗与声音都已关闭,本次没有可投递的内容"; readonly reasonSkipEnvironment: "本机没有可用的通知通道(缺系统通知工具或音频播放器),本次未发出"; readonly reasonSystemPopupFailed: "系统通知命令执行失败({bin})"; readonly reasonSystemSoundFailed: "提示音播放命令执行失败({bin})"; readonly reasonSystemToastScriptMissing: "插件自带的 Windows 通知脚本缺失(打包缺陷),本次未发出"; readonly reasonSystemToneUnwritable: "系统提示音无法写入临时目录,本次未发声"; readonly soundWarnPlaybackFailed: "提示音播放命令执行失败({bin},弹窗已发送)"; readonly soundWarnToneUnwritable: "提示音未能准备(临时文件写不进去,本次仅弹窗成功)"; readonly soundWarnNoPlayback: "提示音无法执行(缺少可用播放器或音频素材,本次仅弹窗成功)"; readonly reasonBarkRequestFailed: "Bark 请求失败(网络或超时)"; readonly reasonBarkHttp: "Bark 服务返回 HTTP {status}"; readonly reasonBarkRejected: "Bark 拒绝这次推送(业务码 {code})"; readonly reasonBarkBodyUnreadable: "Bark 响应体读取失败(推送可能已经发出)"; readonly reasonWebhookTemplateInvalid: "Webhook 模板渲染失败(模板不是合法 JSON)"; readonly reasonWebhookRequestFailed: "Webhook 请求失败(网络或超时)"; readonly reasonWebhookHttp: "Webhook 目标返回 HTTP {status}"; readonly reasonUnknownTarget: "未知的投递目标类型({kind})"; readonly reasonChannelThrew: "投递出口内部错误"; readonly reasonThrottled: "距上一条不足 1 秒,本次未投递(结论见上一条记录)"; readonly reasonDispatchCanceled: "插件卸载时这条还在排队,未投递"; readonly secEvents: "通知事件"; readonly secChannels: "通知频道"; readonly secDedup: "参数上限"; readonly tabLabel: "通知中心"; readonly save: "保存"; readonly saving: "保存中…"; readonly saveChannels: "保存频道"; readonly channelsDomainHint: "仅保存频道改动,不影响事件/参数等未保存修改"; readonly chTest: "发送测试"; readonly chTestDraft: "用未保存配置测试"; readonly chTestDraftTitle: "用当前未保存的草稿实测(不保存、不落盘)"; readonly chTestDraftBadge: "未存"; readonly dryRunTag: "草稿测试·未落盘"; readonly dryRunPending: "草稿测试中…"; readonly dryRunGoSave: "去保存"; readonly dryRunDiscard: "放弃草稿"; readonly dryRunNote: "草稿实测:只测当前草稿,不保存、不记历史与状态;浏览器通道不真弹,以本行结论为准;重复点击会重复外发;超时中断后对方若实际收到,不会出现在历史与状态里。"; readonly chLastOk: "最近投递成功"; readonly chLastFail: "最近投递失败"; readonly chNeverSent: "尚未投递"; readonly chSkippedSeeHistory: "(详情见通知记录)"; readonly chAdvanced: "高级参数"; readonly chDelete: "删除"; readonly chDeleteConfirm: "确认删除?再次点击执行"; readonly chAddBark: "添加 Bark 推送"; readonly chBarkName: "显示名称"; readonly chBarkNamePlaceholder: "如:我的 iPhone"; readonly chBarkBaseUrl: "服务器地址"; readonly chBarkBaseUrlHint: "Bark 服务器地址(http/https),如 https://api.day.app 或自建地址"; readonly chBarkDeviceKey: "Device Key"; readonly chBarkDeviceKeyPlaceholder: "粘贴 Bark App 里的 Device Key"; readonly chBarkDeviceKeyHint: "Bark App 内查看;留空即不修改已保存的值,输入新值将替换"; readonly chBarkSound: "铃声 sound"; readonly chBarkGroup: "分组 group"; readonly chBarkGroupHint: "同组通知在手机上折叠展示"; readonly chBarkIcon: "图标 icon"; readonly chBarkIconHint: "图片 URL,需手机网络可访问;iOS 17+ 支持 SVG;留空用 Bark 默认图标"; readonly chBarkUrl: "跳转 url"; readonly chBarkBadge: "角标 badge"; readonly chBarkLevel: "默认紧急度 level"; readonly chBarkLevelHint: "实例级紧急度(缺省按事件强度自动映射);下方「按类型紧急度映射」命中时优先于本项"; readonly chLevelAuto: "按事件强度自动映射"; readonly chLevelsHint: "按事件类型指定 Bark 紧急度,优先于「默认紧急度」与自动映射;未配置的类型走默认"; readonly chLevelsKindPlaceholder: "如 question"; readonly chLevelsAdd: "添加映射"; readonly chLevelsRemove: "移除"; readonly chLevelsEmpty: "未配置按类型映射(全部事件走默认紧急度)"; readonly chLevelsUnknown: "未知事件类型(可能不生效,请确认拼写)"; readonly kindsTitle: "通知类型"; readonly kindsHint: "其他插件注册的通知类型需你确认后才会投递"; readonly kindAllow: "允许"; readonly kindDeny: "拒绝"; readonly kindsEmpty: "没有待处理的通知类型"; readonly testChannelOk: "测试已受理(投递结果见「通知记录」)"; readonly kindConfirmOk: "已更新通知类型确认状态"; readonly kindConfirmFail: "确认失败:{msg}"; readonly chNewBarkName: "Bark 推送"; readonly secHistory: "通知记录"; readonly evtSwitch: "事件开关:{name}"; readonly chToggleOn: "启用频道:"; readonly chToggleOff: "停用频道:"; readonly chTypeBuiltin: "内置"; readonly kindRevoke: "撤销允许"; readonly routeCap: "投递到"; readonly routeDefaultState: "跟随默认 · 全部启用频道"; readonly routeDefaultStateTitle: "未自定义路由:投递到全部已启用频道(随频道启停动态变化)"; readonly routeCustomState: "自定义 · {n} 频道 · 恢复默认"; readonly routeCustomStateTitle: "已自定义路由(冻结快照);点击恢复跟随默认"; readonly routeStaleChip: "已删除"; readonly routeStaleTitle: "该频道已删除,路由条目残留;投递时自动跳过(残留条目不会自动移除)"; readonly routeDisabledHint: "频道未启用:先在上方「通知频道」启用后才能配置投递"; readonly dirtySome: "有 {n} 处未保存修改"; readonly dirtyDomains: "事件与频道均有未保存修改"; readonly dirtyChannels: "频道有未保存修改"; readonly routeExpandHint: "展开投递"; readonly discardChanges: "放弃更改"; readonly discardOk: "已放弃未保存修改"; readonly secretShow: "显示"; readonly secretHide: "隐藏"; readonly kindRouteHint: "允许后可像内置事件一样配置投递频道"; readonly chAddWebhook: "添加 Webhook(安卓 / 自建)"; readonly chNewWebhookName: "Webhook 推送"; readonly whPreset: "预设"; readonly whPresetNtfy: "ntfy(ntfy.sh 或自建)"; readonly whPresetGotify: "Gotify"; readonly whPresetCustom: "自建推送网关"; readonly whPresetHint: "预设填充认证方式与消息模板;ntfy 发往服务根地址(旧 topic URL 自动兼容改写)"; readonly whUrl: "目标 URL"; readonly whUrlPlaceholder: "https://ntfy.sh/(topic 写进模板)"; readonly whUrlHint: "POST JSON;ntfy 发往服务根地址、模板内填真实 topic,旧 topic URL 自动兼容(末段明确时改写为根地址),自托管前缀根地址原样保留;仅允许 http(s) 且 URL 不得内嵌凭据;ntfy 主题名建议带随机后缀防遍历"; readonly whAuth: "认证"; readonly whAuthNone: "无"; readonly whAuthBearer: "Bearer Token(Authorization 头)"; readonly whAuthBasic: "Basic 用户名/密码"; readonly whAuthHeader: "自定义请求头"; readonly whAuthHint: "Bearer 模式只填裸 token(不含 Bearer 前缀,插件自动添加);自定义请求头的值则原样发送;凭据仅走请求头、不拼 URL,仅在本机保存且掩码回显;留空保持已保存凭据"; readonly whAuthToken: "裸 token(不含 Bearer 前缀)"; readonly whAuthUsername: "用户名"; readonly whAuthPassword: "密码"; readonly whAuthHeaderName: "请求头名(如 X-Gotify-Key)"; readonly whAuthHeaderValue: "原样发送的请求头值"; readonly whTimeout: "投递超时"; readonly whTimeoutHint: "秒 · 1–60(超限按边界取值,默认 10);超时与失败均落记录,不自动重试"; readonly whTemplate: "消息模板(JSON body,占位符点击插入)"; readonly whTemplateHint: "ntfy 发往服务根地址、模板内须填真实 topic;{{priority}} 由服务端按频道映射渲染(ntfy 数字:info→3 / success→2 / warning→4 / failure→5;gotify 沿用既有映射);文本占位符 JSON-aware 转义,{{ts}} 数字直出"; readonly whTemplateFailHint: "模板非法或渲染失败按该频道投递失败落记录,不阻断其他频道"; readonly whTplRestore: "恢复预设模板"; readonly diagHostLine: "宿主能力自检:{verdict} · 弹窗 {popup} · 声音 {sound}"; readonly diagVerdictOk: "可用"; readonly diagVerdictDegraded: "降级可用"; readonly diagVerdictUnreachable: "不可用"; readonly diagVerdictUnknown: "无法判定"; readonly diagDimPopup: "弹窗"; readonly diagDimSound: "声音"; readonly diagUnknownLine: "以下维度无法判定:{dimensions}"; readonly diagRemediationTitle: "处置建议"; readonly diagRemediationUnknown: "宿主给出了一条本版本客户端不认识的处置建议,请升级插件后重试"; readonly diagRemHostNoDbusSession: "宿主没有 D-Bus 会话总线:系统弹窗需要桌面会话(图形登录)或由 dbus-launch 提供的会话总线"; readonly diagRemHostPopupNoDaemon: "宿主有 notify-send 但没有通知守护进程:安装并启动一个桌面通知服务(如 dunst、mako)后弹窗才可见"; readonly diagRemHostNoNotifySend: "宿主缺少 notify-send:安装提供它的通知工具(Debian/Ubuntu 上是 libnotify-bin,Fedora/Arch 上是 libnotify)后弹窗才可见"; readonly diagRemHostNoSoundServerAndPlayer: "宿主没有探测到任何可用播放器:安装 {packages}({packagemanager})后可自播默认事件音(dnf 系上 ffmpeg 来自 RPM Fusion)"; readonly diagRemHostNoSoundServerAndPlayerNoPkg: "宿主没有探测到任何可用播放器:安装一个不依赖声音服务的播放器(如 alsa-utils 或 ffmpeg)后可自播默认事件音"; readonly diagRemHostOnlySoundServerPlayers: "宿主只探测到依赖声音服务的播放器(paplay / pw-play):安装 {packages}({packagemanager})后可直连 ALSA 自播默认事件音(dnf 系上 ffmpeg 来自 RPM Fusion)"; readonly diagRemHostOnlySoundServerPlayersNoPkg: "宿主只探测到依赖声音服务的播放器(paplay / pw-play):安装一个不依赖声音服务的播放器(如 alsa-utils 或 ffmpeg)后可直连 ALSA 自播默认事件音"; readonly diagRemHostNoPlayer: "宿主有声音服务但缺少播放器:安装对应播放器后可自播默认事件音"; readonly diagRemHostNoToneFile: "宿主缺少默认事件音色文件:补齐该平台的音色资源后可自播默认事件音(Linux 上主题缺失会改用合成提示音,不再走这条建议)"; readonly diagRemHostManagedByOthers: "弹窗与发声都已由宿主上的其他组件接管:本插件的系统通道在这台机器上会静默跳过,请改用浏览器通知或移动端推送"; readonly diagDetailsLabel: "探测明细与来源"; readonly diagSourceHost: "来源:宿主能力自检(GET /api/dsh-notifier/diagnostics,服务端所在机器)"; readonly diagSourceBrowser: "来源:本页浏览器本地判定"; readonly diagCheckedLabel: "已探测"; readonly diagPlayersLabel: "候选播放器"; readonly diagToneFileLabel: "音色文件"; readonly diagToneFileYes: "已就位"; readonly diagToneFileNo: "缺失"; readonly diagNone: "无"; readonly diagCheckedNotifySend: "notify-send 命令"; readonly diagCheckedDbusNameOwner: "D-Bus 名称所有者"; readonly diagCheckedDbusActivatable: "D-Bus 可激活服务"; readonly diagCheckedSessionBus: "会话总线"; readonly diagCheckedPlayers: "播放器候选"; readonly diagCheckedToneFile: "音色文件"; readonly diagBrowserLine: "本页浏览器:弹窗 {popup} · 声音 {sound}"; readonly diagBrowserNoNotificationApi: "此浏览器没有通知 API,系统级弹窗不可用"; readonly diagBrowserInsecureContext: "非安全上下文(明文 HTTP),浏览器禁止系统级弹窗"; readonly diagBrowserPermissionDenied: "未授权时不会弹浏览器系统通知;页面隐藏时只更新标题,页面可见且通知策略允许时显示页内横幅。权限已被拒绝,请在浏览器站点设置中允许"; readonly diagBrowserPermissionDefault: "未授权时不会弹浏览器系统通知;页面隐藏时只更新标题,页面可见且通知策略允许时显示页内横幅。权限尚未请求,可点「请求通知权限」授权"; readonly diagBrowserAudioNeverUnlocked: "音频尚未解锁:页面还没有过用户点击,点击页面后即可自播"; readonly diagBrowserAudioAutoSuspended: "音频上下文被浏览器挂起:曾经解锁过,或本次恢复被浏览器拒绝,下次用户交互时会再尝试"; readonly diagBrowserAudioClosed: "音频上下文已关闭,本页生命周期内无法再自播提示音"; readonly diagBrowserAudioUnsupported: "此浏览器不支持 Web Audio,插件无法自播提示音"; }; /** 字典 key 并集(LocaleNamespaceMap 声明合并用)。 */ export type NotifierLocaleKey = keyof typeof zh; /** 英文词典:必须与 zh key 完整对齐。 */ export declare const en: Record; export declare const KIND_KEYS: Record;