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: "网络错误,正在重试…", kimiOAuthRegionLabel: "登录区域", kimiOAuthRegionCn: "中国大陆 (auth.kimi.com)", kimiOAuthRegionGlobal: "国际版 (auth.kimi.ai)", kimiOAuthStart: "开始登录", apiSettings: "API 设置", apiFormat: "API 格式", apiFormatUnknown: "未知格式({type},原样保留)", 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: "高", thinkingContextHint: "启用思考会占用更多上下文,请确保模型上下文长度和预留空间足够。", loopControlSettings: "循环控制", maxAttemptsPerStep: "单步最大尝试次数", reservedContextSize: "上下文预留大小", backgroundSettings: "后台任务", maxRunningTasks: "最大并发数", keepAliveOnExit: "退出时保持运行", permissionRules: "权限规则", permissionDecision: "处置", permissionPattern: "模式", permissionAllow: "允许", permissionDeny: "拒绝", permissionAsk: "询问", permissionDangerousGuard: "危险命令防护", permissionDangerousGuardDesc: "开启(默认)时:Manual/YOLO 模式下,危险命令(rm -rf、shutdown、dd of= 等)和无法静态分析的命令会强制询问;自动(永不询问)模式自 kimi-code 0.41.0 起不再拦截。关闭后回归旧行为。环境变量 KIMI_CODE_DANGEROUS_COMMAND_GUARD 会覆盖本配置", addRule: "+ 添加规则", addCommonRules: "添加常用规则", hooks: "生命周期钩子", hookEvent: "事件", hookMatcher: "匹配器", hookCommand: "命令", hookTimeout: "超时", addHook: "+ 添加钩子", importConfig: "导入当前配置", importConfigConfirm: "导入会覆盖当前未保存的修改,是否继续?", importConfigFailed: "导入失败:{message}", capabilities: "能力标签", fetchEnableThinking: "为获取的模型启用思考", capThinking: "思考", capAlwaysThinking: "始终思考", capImageIn: "图像输入", capImageInHint: "文本推理模型实际需要搭配 plugin-kimi-eyes:kimi-eyes 插件才能识图", 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: "每日用量详情", dayDetailNoData: "「{date}」当日无用量数据", 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 供应商配置管理器", settingsWebsite: "官方网站", kimiEyesSite: "Kimi Eyes 插件站", 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: "今天", rangeYesterday: "昨天", 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: "供应商模型用量趋势", tabModelTotals: "模型用量统计", 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: "估算", subagentModel: "子代理模型", 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天", usageTierMonthly: "30天", 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: "暂无数据", // Advanced settings page (WebUI quick open + experimental flags + secondary model) subagentSettings: "高级设置", experimentalFlags: "实验功能开关", experimentalFlagsHint: "开关写入 config.toml 的 [experimental] 节;环境变量优先级更高,被锁定的开关无法在此修改", flagToolSelect: "工具选择", flagToolSelectDesc: "启用实验性工具选择功能", flagTower: "Tower 模式", flagTowerDesc: "启用 Tower 多智能体协同模式(/tower 命令切换)", flagSubagentFork: "子代理 Fork 上下文", flagSubagentForkDesc: "Agent/AgentSwarm 工具可携带主代理会话快照启动子代理(fork 参数)", flagWaitFor: "WaitFor 工具", flagWaitForDesc: "代理可在当前回合内等待后台任务完成,而无需结束回合再被唤醒", flagAutoSessionTitle: "自动会话标题", flagAutoSessionTitleDesc: "通过托管 chat_title 工具自动生成会话标题", flagNotifyUser: "NotifyUser 工具", flagNotifyUserDesc: "实验性 Updates 面板:分页展示主代理与子代理的进度消息(默认关闭)", flagDefaultOn: "默认开启", lockedByEnv: "被环境变量锁定", masterEnvOnHint: "KIMI_CODE_EXPERIMENTAL_FLAG 已设置:未显式配置的实验项将被强制开启;config.toml 中的显式配置优先生效", secondaryModelSection: "子代理模型(次主力模型)", secondaryModelLabel: "次主力模型", secondaryModelUnset: "未配置", secondaryModelInheritedContext: "继承上下文长度", secondaryModelInheritedEffort: "继承思考模式", secondaryModelInheritedHint: "子代理直接绑定所选模型,继承其上下文长度与思考设置,无需单独配置补丁", secondaryModelHint: "子代理默认绑定的第二份模型配置;未配置时子代理继承主模型;仅保存模型引用,子代理继承该模型的全部设置", secondaryModelPriorityHint: "优先级(v2):工具 model 参数(池别名或 primary)> default_model > 继承主模型;(v1 legacy):工具参数 > model_preference > model > 继承主模型", // Subagent model pool (secondary_model v2 keys) secondaryPoolUpgrade: "升级为模型池", secondaryPoolUpgradeDesc: "为旧式配置补写 default_model,与 model 双写一致;之后可继续添加多个池条目", secondaryPoolAddLabel: "添加池条目", secondaryPoolAddPlaceholder: "选择要加入模型池的模型…", secondaryPoolRemove: "移除", secondaryPoolDescPlaceholder: "该模型的子代理路由描述…", secondaryPoolDescHint: "描述会渲染进主 Agent 的工具描述(Agent/AgentSwarm),直接影响主模型挑选子代理模型的路由质量", secondaryPoolForce: "强制使用默认模型", secondaryPoolForceDesc: "开启后所有子代理固定使用默认模型;force 与模型池条目互斥,条目将被移除", secondaryPoolForceOn: "force 已开启:子代理固定使用「{alias}」", secondaryPoolForceConfirm: "开启 force 将移除模型池中的所有条目,只保留默认模型。确定继续?", secondaryModelClear: "不再配置", secondaryModelForceBadge: "force 已开启:子代理固定使用该模型", secondaryPoolErrorPrimaryReserved: "「{alias}」是保留别名,不能用作模型池条目", secondaryPoolErrorDefaultRequired: "存在模型池条目时 default_model 必填", secondaryPoolErrorDefaultNotInPool: "默认模型「{alias}」不在模型池中", secondaryPoolErrorAliasNotInModels: "模型「{alias}」未在 [models] 中注册", secondaryPoolErrorForceRequiresDefault: "开启 force 前必须设置默认模型", secondaryPoolErrorForceExcludesModels: "force 与模型池条目互斥", // Kimi Code WebUI quick open webuiSection: "Kimi Code WebUI", webuiDesc: "以独立窗口在应用内打开新版 Web 界面,也可以选择在系统浏览器打开(kimi-code 0.33+ 内置 code-app;需要 kimi 命令在 PATH 中)。", openWebUIEmbedded: "在应用内打开", openWebUIBrowser: "在浏览器打开", webuiOpening: "打开中...", // Plugin marketplace pluginMarketplace: "插件市场", pluginMarketplaceSubtitle: "浏览并安装 Kimi Code 插件:官方、社区插件均可安装,支持更新与启用/禁用管理。", pluginSearchPlaceholder: "搜索插件名称、描述、关键词或 ID…", pluginSectionInstalled: "已安装", pluginSectionOfficial: "官方", pluginSectionCommunity: "社区", pluginCustomInstall: "自定义安装", pluginUpdateAvailable: "有更新", pluginCapabilityRequired: "需在 kimi-code 内安装(/plugins)", pluginInstall: "安装", pluginUpdate: "更新", pluginEnable: "启用", pluginDisable: "禁用", pluginRemove: "移除", pluginInstalling: "安装中…", pluginUpdating: "更新中…", pluginToggling: "切换中…", pluginRemoving: "移除中…", pluginTrustTitle: "安装第三方插件?", pluginTrustDesc: "该插件来自 {source}。插件可贡献 MCP 工具、hooks 与命令,并可能访问你的会话和文件。请仅安装你信任的来源。", pluginTrustInstall: "信任并安装", pluginRemoveTitle: "移除插件?", pluginRemoveConfirm: "确定移除「{name}」?移除后请在 kimi-code 中 /reload 或开新会话生效。", pluginInstalledMsg: "「{name}」已安装。请在 kimi-code 中 /reload 或开新会话生效。", pluginUpdatedMsg: "「{name}」已更新。请在 kimi-code 中 /reload 或开新会话生效。", pluginEnabledMsg: "「{name}」已启用。请在 kimi-code 中 /reload 或开新会话生效。", pluginDisabledMsg: "「{name}」已禁用。请在 kimi-code 中 /reload 或开新会话生效。", pluginRemovedMsg: "「{name}」已移除。请在 kimi-code 中 /reload 或开新会话生效。", pluginCopyReload: "复制 /reload", pluginReloadCopied: "已复制", pluginCacheNotice: "显示缓存数据(获取于 {time})", pluginCatalogFailed: "插件目录加载失败,已改用本地已安装列表", pluginInstalledListFailed: "已安装插件列表加载失败", pluginEmptyResults: "没有匹配的插件", pluginNoPlugins: "暂无插件", pluginHomepage: "主页", } as const; export type TranslationKey = keyof typeof zhTranslations;