import type { SupportedLocale } from "./types.ts"; export interface LocaleStrings { readonly locale: SupportedLocale; readonly on: string; readonly running: string; readonly off: string; readonly overdue: string; readonly next: string; readonly planned: string; readonly late: string; readonly once: string; tasks(count: number): string; runningCount(count: number): string; overdueCount(count: number): string; pausedCount(count: number): string; every(value: string): string; } const ZH_CN: LocaleStrings = { locale: "zh-CN", on: "已启用", running: "执行中", off: "已暂停", overdue: "已到期", next: "下次", planned: "计划", late: "延迟", once: "一次性", tasks: (count) => `${count} 个任务`, runningCount: (count) => `${count} 个执行中`, overdueCount: (count) => `${count} 个已到期`, pausedCount: (count) => `${count} 个已暂停`, every: (value) => `每${value}`, }; const EN_US: LocaleStrings = { locale: "en-US", on: "ON", running: "running", off: "OFF", overdue: "overdue", next: "next", planned: "planned", late: "late", once: "once", tasks: (count) => `${count} task${count === 1 ? "" : "s"}`, runningCount: (count) => `${count} running`, overdueCount: (count) => `${count} overdue`, pausedCount: (count) => `${count} paused`, every: (value) => `every ${value}`, }; /** * 根据请求值和系统 locale 解析插件语言. * * @param requested 显式语言配置, 支持 auto、zh-CN 和 en-US * @param detectedLocale 系统检测到的 locale, 主要用于测试 * @returns 实际使用的语言 */ export function resolveLocale(requested?: string, detectedLocale?: string): SupportedLocale { const value = requested?.trim().toLowerCase(); if (value === "zh" || value === "zh-cn" || value === "zh_hans") return "zh-CN"; if (value === "en" || value === "en-us" || value === "en_gb" || value === "en-gb") return "en-US"; const detected = (detectedLocale ?? Intl.DateTimeFormat().resolvedOptions().locale).toLowerCase(); return detected.startsWith("zh") ? "zh-CN" : "en-US"; } /** * 返回指定语言的固定文案. * * @param locale 实际使用的语言 * @returns 固定文案集合 */ export function getLocaleStrings(locale: SupportedLocale): LocaleStrings { return locale === "zh-CN" ? ZH_CN : EN_US; }