Files
KimiCodeSwitch/src/i18n/zh.ts
T
KimiSwitch Dev 38a11666ac feat(dashboard): 最近请求缓存命中列 + 中文模式人民币计价 + 价格解析记忆化
- 最近请求表新增缓存命中率列(缓存读取/总输入)
- useCurrency:中文界面费用按最新 USD→CNY 汇率显示 ¥,英文保持 $(open.er-api.com,缓存 12h,失败兜底 7.2)
- match_price 记忆化缓存:O(记录数×5910) → O(模型种类×5910),扫描从秒级降到百毫秒级
- 仪表盘右上角显示加载耗时/数据量(get_summary 往返埋点);Rust 侧分段计时
2026-08-02 00:18:19 +08:00

445 lines
16 KiB
TypeScript
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.
export const zhTranslations = {
// App / global
appTitle: "Kimi Switch",
loading: "加载中...",
loadTimeout: "加载时间较长,如果一直卡住,请尝试重新启动应用。",
loadFailed: "加载失败:",
retry: "重试",
saveConfig: "保存配置",
reloadConfig: "读取配置",
openConfigDir: "打开配置目录",
unsavedConfirm: "有未保存修改,确定要重新读取配置吗?",
validationNoApiKey: "缺少 API Key",
validationNoBaseUrl: "缺少 Base URL",
validationNoModels: "未配置模型",
validationBlankModels: "存在未填写 model id 的模型:{aliases}",
saveValidationConfirm:
"以下供应商尚未完成配置,仍要保存吗?\n\n{details}\n\n(点击「确定」仍会保存到 config.toml;点击「取消」可继续编辑)",
providerNotFound: "供应商不存在",
backToList: "返回列表",
syncToOmp: "同步到 OMP",
syncedToOmp: "已同步到 OMP:",
ompOverwriteConfirm: "OMP 中已存在供应商「{existing}」,是否替换为「{name}」?",
deleteProviderConfirm: "确定删除供应商 {name}?",
// Provider list
providers: "供应商",
dashboard: "用量仪表盘",
sessions: "会话管理",
addProvider: "添加供应商",
noProviders: "暂无供应商",
addFirstProvider: "添加第一个供应商",
noUrl: "无 URL",
modelCount: "{count} 个模型",
ompActive: "OMP 活跃",
defaultModel: "默认: {name}",
edit: "编辑",
delete: "删除",
copyProvider: "复制供应商",
testConnectivity: "测试连通性",
testing: "测试中...",
connectivityOk: "{name} 连通正常({latency}ms)",
connectivitySlow: "{name} 连通较慢({latency}ms)",
connectivityFail: "{name} 无法连通:{error}",
copiedProvider: "已复制为 {name}",
// Provider edit
editProvider: "编辑供应商",
back: "返回",
basicInfo: "基本信息",
modelMapping: "模型映射",
configJson: "配置 JSON",
providerName: "供应商名称",
note: "备注",
notePlaceholder: "例如:公司专用账号",
officialUrl: "官网链接",
managedProvider: "托管供应商(无需凭证)",
kimiOAuthLogin: "Kimi 授权登录",
kimiOAuthOpenPage: "打开授权页",
kimiOAuthCopyCode: "复制授权码",
kimiOAuthCodeCopied: "已复制",
kimiOAuthWaiting: "请在打开的页面中输入授权码,等待授权中…",
kimiOAuthSuccess: "授权成功,已写入 Kimi 登录凭据",
kimiOAuthExpired: "授权码已过期,请重新开始",
kimiOAuthDenied: "授权被拒绝",
kimiOAuthTimeout: "授权超时,请重新开始",
kimiOAuthRetry: "重新开始",
kimiOAuthCancel: "取消",
kimiOAuthNetworkError: "网络错误,正在重试…",
apiSettings: "API 设置",
apiFormat: "API 格式",
authField: "认证字段",
apiKey: "API Key",
getApiKeyLink: "获取 API Key",
show: "显示",
hide: "隐藏",
requestUrl: "请求地址",
fullUrl: "完整 URL",
baseUrlHint: "填写兼容 {type} API 的服务端点地址,不要以斜杠结尾",
envPairs: "Env 键值对",
addEnv: "+ 添加",
modelMappingDesc: "显示名称只影响 /model 菜单;1M 只是给 Kimi Code 的上下文能力声明。",
oneClickSetup: "一键设置",
fetchModels: "获取模型列表",
fetchingModels: "获取中...",
discoveredModels: "发现 {count} 个模型",
addSelected: "添加选中的",
alreadyAdded: "已添加",
displayName: "显示名称",
actualModel: "实际请求模型",
contextSize: "上下文长度",
supports1M: "声明支持 1M",
default: "默认",
operation: "操作",
isDefault: "已默认",
setDefault: "设为默认",
deleteModelConfirm: "确定删除模型 {alias}?",
noModelMappings: "暂无模型映射",
addModelMapping: "+ 添加模型映射",
readOnlyPreview: "可编辑 JSON",
apply: "应用",
invalidJson: "JSON 格式错误:{message}",
clickToSelectIcon: "点击选择图标",
clickToChangeIcon: "点击更换图标",
selectIcon: "选择图标",
clearIcon: "清除图标",
iconPickerSearch: "搜索图标",
iconPickerSearchPlaceholder: "输入图标名称...",
iconPickerNoResults: "未找到匹配的图标",
// Agent / target
target: "目标",
targetKimi: "Kimi Code",
targetOmp: "OMP",
targetQwen: "Qwen Code",
agent: "智能体",
agentKimiCode: "Kimi Code",
agentPi: "Pi",
activate: "启用",
activated: "已启用",
disabled: "已停用",
switchTo: "切换使用",
inUse: "使用中",
switchReloadHint: "切换供应商后,请在 Kimi Code 中执行 /reload 以生效。",
reloadCopiedHint: "已切换供应商,/reload 已复制到剪贴板,请在 Kimi Code 中粘贴执行。",
unsavedChanges: "未保存修改",
qwenActivateNotImplemented: "Qwen Code 启用功能将在后续实现。",
agentSettings: "全局配置",
enableThinking: "启用思考",
thinkingLevel: "思考等级",
thinkingKeep: "保留思考内容",
thinkingLow: "低",
thinkingMedium: "中",
thinkingHigh: "高",
thinkingMax: "最大",
thinkingContextHint: "启用思考会占用更多上下文,请确保模型上下文长度和预留空间足够。",
loopControlSettings: "循环控制",
maxRetriesPerStep: "单步重试次数",
reservedContextSize: "上下文预留大小",
backgroundSettings: "后台任务",
maxRunningTasks: "最大并发数",
keepAliveOnExit: "退出时保持运行",
permissionRules: "权限规则",
permissionDecision: "处置",
permissionPattern: "模式",
permissionAllow: "允许",
permissionDeny: "拒绝",
permissionAsk: "询问",
addRule: "+ 添加规则",
addCommonRules: "添加常用规则",
hooks: "生命周期钩子",
hookEvent: "事件",
hookMatcher: "匹配器",
hookCommand: "命令",
hookTimeout: "超时",
addHook: "+ 添加钩子",
importConfig: "导入当前配置",
importConfigConfirm: "导入会覆盖当前未保存的修改,是否继续?",
importConfigFailed: "导入失败:{message}",
capabilities: "能力标签",
fetchEnableThinking: "为获取的模型启用思考",
capThinking: "思考",
capAlwaysThinking: "始终思考",
capImageIn: "图像输入",
capVideoIn: "视频输入",
capToolUse: "工具调用",
customCapabilities: "其他能力(逗号分隔)",
// Sessions
sessionsTitle: "会话管理",
sessionsSubtitle: "按工作区查看、预览、归档或删除 Kimi Code 会话。归档不会删除数据。",
workspaces: "工作区",
workspaceIsolatedHint: "会话按工作区隔离存储",
allWorkspaces: "全部工作区",
emptyWorkspace: "空",
deleteWorkspace: "删除工作区",
noSessions: "暂无会话",
statusActive: "活跃",
statusArchived: "已归档",
statusAll: "全部",
selectAll: "全选",
deselectAll: "取消全选",
selectedCount: "已选 {n} 项",
archive: "归档",
unarchive: "取消归档",
sessionTitle: "会话",
workspace: "工作区",
status: "状态",
size: "大小",
updated: "更新时间",
actions: "操作",
sessionsInView: "共 {n} 个会话",
isolatedToWorkspace: "当前工作区",
openPreview: "打开预览",
scanning: "扫描中…",
refresh: "刷新",
refreshing: "刷新中…",
loadStats: "加载 {ms} ms · 数据 {kb} KB",
refreshed: "已刷新",
cancel: "取消",
confirmDeleteTitle: "永久删除会话?",
confirmDeleteSession: "删除后无法恢复。若只是暂时不用,请改用归档。",
confirmBulkTitle: "批量永久删除?",
confirmBulkDelete: "将永久删除 {n} 个会话,此操作无法撤销。",
confirmDeleteWorkspaceTitle: "删除空工作区?",
confirmDeleteWorkspace: "仅允许删除没有任何会话的工作区。",
deleteForever: "永久删除",
previewTitle: "会话预览",
previewHint: "仅展示角色与截断后的文本,不会暴露密钥或工具原始输出。",
previewEmpty: "没有可预览的消息",
previewTruncated: "预览已截断",
roleUser: "用户",
roleAssistant: "助手",
roleSystem: "系统",
// Heatmap
noData: "暂无数据",
heatLess: "少",
heatMore: "多",
requests: "请求",
cacheHitRate: "缓存命中率",
// Daily detail modal
dayDetail: "每日用量详情",
close: "关闭",
totalTokens: "总 Token",
cost: "费用",
modelDistribution: "模型用量分布",
providerDistribution: "供应商用量分布",
modalEscHint: "按 Esc 或点击外部关闭",
doubleClickHint: "双击查看详情",
// Languages
language: "语言",
zh: "中文",
en: "English",
// Theme & Settings
themeLight: "浅色",
themeDark: "深色",
themeAuto: "跟随系统",
settings: "设置",
settingsTitle: "设置",
settingsAppearance: "外观",
settingsUpdates: "更新",
settingsAbout: "关于",
checkUpdate: "检查更新",
checking: "检查中…",
upToDate: "已是最新版本",
updateAvailable: "有新版本可用",
currentVersion: "当前版本",
latestVersion: "最新版本",
downloadUpdate: "下载更新",
downloading: "下载中…",
downloadComplete: "下载完成,点击安装",
install: "安装",
updateCheckFailed: "检查更新失败",
lastChecked: "上次检查",
appDescription: "Windows 桌面端 LLM 供应商配置管理器",
referenceProject: "引用项目",
// Validation errors
emptyProviderName: "供应商名称为空",
duplicateProviderName: "重复的供应商名称:{0}",
missingCredentials: "供应商「{0}」缺少凭证(api_key 或环境变量键)",
ambiguousCredentials: "供应商「{0}」同时设置了直接凭证和 Env 凭证,只允许一种",
missingVertexProject: "Vertex 供应商「{0}」缺少 GOOGLE_CLOUD_PROJECT 或 GOOGLE_CLOUD_LOCATION",
emptyModelAlias: "模型别名为空",
duplicateModelAlias: "重复的模型别名:{0}",
unknownModelProvider: "模型「{0}」引用了未知供应商「{1}」",
emptyModelId: "模型「{0}」的模型 ID 为空",
invalidMaxContextSize: "模型「{0}」的 max_context_size 无效",
// Dashboard — ranges / status
rangeToday: "今天",
range7d: "7 天",
range30d: "30 天",
rangeAll: "全部",
dashLoadFailed: "加载失败",
// Dashboard — KPI labels
kpiRequests: "请求数",
kpiInputOther: "非缓存输入",
kpiOutput: "输出",
kpiCacheRead: "缓存读",
kpiCacheCreation: "缓存创建",
kpiCacheHit: "缓存命中",
kpiCost: "预估费用",
// Dashboard — cards
cardHeatmap: "全年热力图",
cardHeatmapSub: "按 Token 量着色",
cardDailyTrend: "用量趋势",
cardDailyTrendSubCapped: "近 30 天 · 共 {n} 天",
tabModelTrend: "模型用量趋势",
tabProviderTrend: "供应商模型用量趋势",
tabDailyTrend: "每日用量趋势",
providerUnknown: "未知供应商",
cardDailyTrendSub: "共 {n} 天",
cardModelUsage: "模型用量",
cardModelUsageSub: "{n} 个模型",
cardRecent: "最近请求",
cardRecentCapped: "显示前 {n} / {m} 条",
cardRecentCount: "{n} 条",
// Dashboard — table columns / units
colModel: "模型",
colTokens: "Token",
colCacheHit: "缓存命中",
colTime: "时间",
colInput: "输入",
colOutput: "输出",
colCacheRead: "缓存读",
unitTimes: "次",
estimate: "估算",
collapse: "收起",
expandAll: "展开全部 ({n})",
// Dashboard — pagination
paginationPage: "第 {x} / {y} 页",
paginationRange: "{x}–{y} 条",
paginationPerPage: "每页 {n} 条",
pageFirst: "首页",
pagePrev: "上一页",
pageNext: "下一页",
pageLast: "末页",
// Dashboard — footer / attribution
footerScanned: "扫描 {n} 个文件 · {m} 条记录",
attributionPorted: "仪表盘与会话管理功能基于",
attributionSuffix: "(MIT,© JochenYang)",
modelDataSourcePrefix: "新增模型与价格参考来自于",
// Sessions — preview
previewCollapseChars: "收起 · {n} 字符",
previewExpandChars: "展开全文 · {n} 字符",
// Provider presets
presetPickerTitle: "选择预设供应商",
presetSearchPlaceholder: "搜索预设供应商...",
presetSortOriginal: "原始",
presetSortAlpha: "A-Z",
presetNoResults: "没有匹配的预设",
presetCustomConfig: "+ 自定义配置",
presetFooterHint: "预设只是一键填表,后续可继续修改所有字段。",
presetCategoryOfficial: "官方",
presetCategoryCnOfficial: "国产",
presetCategoryThirdParty: "第三方",
presetCategoryAggregator: "聚合",
presetNameAnthropic: "Anthropic 官方",
presetNameKimiCoding: "Kimi For Coding",
presetNameMoonshot: "Moonshot 平台",
presetNameDeepseek: "DeepSeek",
presetNameZhipuApi: "智谱 GLM(按量)",
presetNameZhipuCoding: "智谱 GLM Coding Plan",
presetNameZaiApi: "z.ai(按量)",
presetNameZaiCoding: "z.ai Coding Plan",
presetNameBailian: "阿里百炼",
presetNameMinimax: "MiniMax",
presetNameMinimaxTokenPlan: "MiniMax Token Plan",
presetNameStepfun: "阶跃星辰",
presetNameStepfunPlan: "阶跃星辰 Step Plan",
presetNameSiliconflow: "硅基流动",
presetNameNovita: "Novita AI",
presetNameOpenrouter: "OpenRouter",
presetNameTokenRhythm: "基元律动",
presetNameOpenai: "OpenAI 官方",
presetNameGoogleGenai: "Google AI Studio",
presetNameVolcengine: "火山方舟",
presetNameOpencodeGo: "OpenCode Go",
presetNameOpencodeZen: "OpenCode Zen",
// Provider usage
usageBalance: "余额",
usageUsed: "已使用",
usageRemaining: "剩余",
usageRefresh: "刷新",
usageRetry: "重试",
usageQueryFailed: "查询失败",
usageNetworkError: "网络异常",
usageInvalidKey: "API Key 无效",
usageResetIn: "{time} 后重置",
usageResetDone: "已重置",
usageLoading: "查询中…",
usageQueryOk: "查询成功",
// Usage config panel (cc-switch style)
usageConfigTitle: "配置用量查询 - {name}",
usageConfigBtn: "配置用量查询",
usageEnable: "启用用量查询",
usageTemplate: "查询模板",
usageTemplateAuto: "自动检测",
usageTemplateNewapi: "NewAPI 中转站",
usageAutoDetectHint: "自动使用供应商的 API Key 和 Base URL 查询余额 / 套餐",
usageNewapiHint: "查询 NewAPI / OneAPI 中转站的账号余额(需网页后台 Access Token,不是 sk- 推理 Key)",
usageOAuthManagedHint: "官方 OAuth 托管:自动使用 Kimi Code 登录凭据查询订阅用量",
usageDetectedKinds: "检测到的查询类型",
usageNoKinds: "未识别(可切换到 NewAPI 模板手动配置)",
usageBaseUrl: "查询地址 (Base URL)",
usageAccessToken: "Access Token",
usageAccessTokenPlaceholder: "网页后台生成的 Access Token",
usageAccessTokenHint: "在 NewAPI 站点网页后台「个人设置 → Access Token」生成,不是 sk- 开头的推理 Key",
usageUserId: "User ID",
usageUserIdPlaceholder: "NewAPI 用户 ID(数字)",
usageUserIdHint: "网页后台「个人中心」页面的用户 ID,用于 New-Api-User 请求头",
usageAutoInterval: "自动查询间隔(分钟)",
usageAutoIntervalHint: "0 表示不自动查询,仅在打开页面或手动刷新时查询",
usageTimeout: "超时时间(秒)",
usageTimeoutHint: "0 表示使用默认值(8 秒)",
usageSupportedVars: "支持的变量",
usageBack: "返回",
usageNoKindsHint: "未识别此供应商的自动查询类型,请切换到 NewAPI 模板手动配置,或添加自定义查询脚本(即将支持)",
usageSwitchToNewapi: "切换到 NewAPI 模板",
usageUnsupportedProvider: "此供应商暂不支持自动查询",
usageTier5h: "5小时",
usageTierWeekly: "7天",
usageErrNoKey: "未配置 API Key",
usageErrDisabled: "用量查询已在配置面板中停用",
usageErrLoginExpired: "Kimi Code 登录已过期且自动续期失败,请重新运行 `kimi login`",
usageErrNoOauth: "未找到 Kimi Code 登录凭据,请先运行 `kimi login`",
usageErrNewapiCreds: "NewAPI 模板需要填写 Access Token 和 User ID",
usageTestQuery: "测试查询",
usageUpdatedAgo: "{time}前",
usageMinAgo: "{n} 分钟前",
usageHourAgo: "{n} 小时前",
usageDayAgo: "{n} 天前",
// Billing mode (套餐 / 按量)
billingTabSubscription: "套餐",
billingTabPayAsYouGo: "按量",
billingTabAll: "全部",
billingBadgeSubscription: "套餐",
billingBadgePayAsYouGo: "按量",
// Usage trend line chart
trendLineTitle: "用量趋势",
trendLineSub: "最近 {n} 天",
trendLineLegendTokens: "Token 用量",
trendLineLegendCacheHit: "缓存命中率",
trendLineLegendRequests: "请求数",
trendLineShowRequests: "显示请求数",
trendLineTooltip: "{date}\nToken: {tokens}\n命中率: {cache}\n请求: {req}",
trendLineNoData: "暂无数据",
} as const;
export type TranslationKey = keyof typeof zhTranslations;