// 极简文案:只有中文一种语言;保持 t() 调用点的 API 不变以便后续扩展。 // 缺失键时静默回落到键名本身(开发期容易发现)。 // 简单 {0} {1} 占位符替换。 const dict = { // 顶栏 / 侧栏 'app.brand': 'Time', 'nav.clock': '时钟', 'nav.alarms': '闹钟', 'nav.pomodoro': '番茄钟', 'nav.countdown': '倒计时', /** TabStrip 整条 tablist 的无障碍名称 */ 'nav.mainTabs': '主导航', 'topbar.pinOn': '已置顶', 'topbar.pinOff': '置顶', 'topbar.settings': '设置', 'topbar.floatingGroup': '浮窗小卡片', 'topbar.floatingPomodoro': '浮窗番茄钟', 'topbar.floatingClock': '浮窗时钟', 'topbar.floatingAlarms': '浮窗闹钟', 'topbar.floatingCountdown': '浮窗倒计时', // 时钟面板 'clock.subtitle': '当前时间', 'clock.nextNone': '暂无闹钟', /** {0}=时刻 {1}=剩余分钟 {2}=标签 */ 'clock.nextFmtMin': '下一个 {0} · {1} 分钟后 · {2}', /** {0}=时刻 {1}=小时 {2}=分钟 {3}=标签 */ 'clock.nextFmtHm': '下一个 {0} · {1}h {2}m 后 · {3}', 'clock.statEnabledSub': '闹钟', 'clock.pomoStateIdle': '未开始', // 闹钟 'alarms.title': '闹钟', 'alarms.empty': '暂无闹钟', 'alarms.emptyHint': '点击右上"+ 新建闹钟"开始', 'alarms.newBtn': '+ 新建闹钟', 'alarms.cancelNew': '取消新建', 'alarms.edit': '编辑', 'alarms.delete': '删除', 'alarms.confirmDelete': '确认删除', 'alarms.toggle': '启用', 'alarms.toggleAria': '启用闹钟', 'alarms.countFmt': '{0} / {1} 启用', 'alarms.untitled': '(无标题)', 'alarms.repeatOnce': '一次', 'alarms.repeatDaily': '每日', // 编辑器 'editor.newTitle': '新建闹钟', 'editor.editTitle': '编辑闹钟', 'editor.label': '标签', 'editor.labelPh': '例如:晨间起床', 'editor.time': '时间', 'editor.save': '保存', 'editor.saving': '保存中…', 'editor.cancel': '取消', 'editor.deleteBtn': '删除', 'editor.timeInvalid': '时间格式错误', 'editor.behaviorNotify': '系统通知', 'editor.behaviorSilent': '静默', 'editor.saveFailedPrefix': '保存失败:', 'editor.deleteFailedPrefix': '删除失败:', 'editor.settingsLoading': '设置尚未加载,请稍后重试。', 'editor.defaultLabel': '闹钟', 'editor.ariaSetTime': '设定闹钟时间', 'editor.ariaHours': '小时', 'editor.ariaMinutes': '分钟', 'editor.ariaSeconds': '秒', 'editor.srHours': '小时', 'editor.srMinutes': '分钟', 'editor.srSeconds': '秒', 'editor.repeat': '每日重复', 'editor.repeatOnce': '一次', 'editor.repeatDaily': '每日', // 番茄钟 'pomo.idle': '未开始', 'pomo.focus': '专注', 'pomo.shortBreak': '短休', 'pomo.longBreak': '长休', 'pomo.paused': '已暂停', 'pomo.subFocus': '保持专注', 'pomo.subBreak': '休息一下', 'pomo.start': '开始', 'pomo.pause': '暂停', 'pomo.resume': '继续', 'pomo.skip': '跳过', 'pomo.reset': '重置', 'pomo.today': '今日完成', 'pomo.todayUnit': '个番茄', 'pomo.footHint': '长休出现在每完成 4 轮之后', 'pomo.roundPill': '第 {0} 轮', 'pomo.ariaDisplay': '番茄钟显示', 'pomo.ariaIdle': '番茄钟未开始,下一阶段 {0} {1} 分钟', 'pomo.ariaRemain': '{0}{1},剩余 {2}', 'pomo.ariaPaused': '(已暂停)', // 倒计时 'countdown.title': '倒计时', 'countdown.stateIdle': '空闲', 'countdown.stateRunning': '运行中', 'countdown.statePaused': '暂停', 'countdown.ariaSetDuration': '设定时长', 'countdown.ariaHours': '小时', 'countdown.ariaMinutes': '分钟', 'countdown.ariaSeconds': '秒', 'countdown.ariaDisplay': '倒计时显示', 'countdown.srHours': '小时', 'countdown.srMinutes': '分钟', 'countdown.srSeconds': '秒', 'countdown.startBtn': '开始', 'countdown.pauseBtn': '暂停', 'countdown.resumeBtn': '继续', 'countdown.resetBtn': '重置', 'countdown.doneBtn': '完成', 'countdown.timeUp': '时间到', 'countdown.setN': '设定 {0}', 'countdown.inputEmpty': '请输入时间', 'countdown.ariaPausedFmt': '倒计时已暂停,剩余 {0}', 'countdown.ariaRunningFmt': '倒计时运行中,剩余 {0}', 'countdown.fmtHoursMinutes': '{0} 小时 {1} 分', 'countdown.fmtMinutes': '{0} 分钟', 'countdown.fmtSeconds': '{0} 秒', // 浮窗番茄钟的文案沿用 pomo.* 共享一份(id 全套启停/重置与主页一致); // 后续若浮窗需要独立文案(如"开始 / 暂停"按钮 title 这类)再拆 floating.pomo.*。 // 浮窗闹钟 'floating.alarms.next': '下一个', 'floating.alarms.empty': '暂无闹钟', 'floating.alarms.tagDefault': '闹钟', 'floating.alarms.titleFmt': '{0} · 共 {1} 个启用', 'floating.alarms.titleOnly': '{0}', 'floating.alarms.countN': '共 {0} 个启用', 'floating.alarms.diffSec': '{0} 秒后', 'floating.alarms.diffMin': '{0} 分后', 'floating.alarms.diffHM': '{0}h {1}m 后', 'floating.alarms.diffH': '{0}h 后', // 浮窗倒计时 'floating.cd.stateIdle': '空闲', 'floating.cd.stateRunning': '运行中', 'floating.cd.statePaused': '已暂停', // 浮窗时钟 'floating.clock.dateFmt': '星期{0} {1}月{2}日', 'floating.clock.weekdayChars': '日一二三四五六', // 设置面板 'settings.title': '设置', 'settings.sub': '个性化外观', 'settings.skinTitle': '外观', 'settings.skinDesc': '点击卡片即可切换整套配色,立即生效。', 'settings.windowTitle': '窗口', 'settings.alwaysOnTop': '窗口置顶', 'settings.alwaysOnTopDesc': '让主窗口悬浮在其它窗口之上', 'settings.modeDark': '暗色', 'settings.modeLight': '亮色', 'settings.aboutTitle': '关于', 'settings.aboutDeveloper': '开发者:关济寰', 'settings.aboutDeveloperAria': '访问关济寰的个人网站', 'settings.aboutOpenFailed': '无法在系统浏览器中打开链接', 'settings.foot': '所有设置都会自动保存到本地', // 通用 'common.cancel': '取消', 'toast.close': '关闭', // 错误(toast) 'error.unhandled': '未捕获的错误:{0}', 'error.unknown': '未知', 'error.script': '脚本错误:{0}', } as const; type Dict = typeof dict; export function t(key: keyof Dict, ...args: unknown[]): string { let s = (dict as Record)[key as string] ?? (key as string); if (args.length > 0) { s = s.replace(/\{(\d+)\}/g, (_m, idx) => String(args[Number(idx)] ?? '')); } return s; }