Release / Version consistency (push) Canceled after 0s
Release / Build (macos-latest) (push) Canceled after 0s
Release / Build (ubuntu-latest) (push) Canceled after 0s
Release / Build (windows-latest) (push) Canceled after 0s
Release / Attach macOS install script (push) Canceled after 0s
659 lines
28 KiB
TypeScript
659 lines
28 KiB
TypeScript
import type { TranslationKey } from "./zh";
|
||
|
||
export const enTranslations: Record<TranslationKey, string> = {
|
||
// App / global
|
||
appTitle: "Kimi Switch",
|
||
loading: "Loading...",
|
||
loadTimeout: "Loading is taking a while. Try restarting the app if it stays stuck.",
|
||
loadFailed: "Failed to load:",
|
||
retry: "Retry",
|
||
saveConfig: "Save Config",
|
||
reloadConfig: "Reload Config",
|
||
openConfigDir: "Open Config Dir",
|
||
unsavedConfirm: "You have unsaved changes. Are you sure you want to reload?",
|
||
validationNoApiKey: "Missing API key",
|
||
validationNoBaseUrl: "Missing base URL",
|
||
validationNoModels: "No models configured",
|
||
validationBlankModels: "Model entries with empty model id: {aliases}",
|
||
saveValidationConfirm:
|
||
"The following providers are not fully configured. Save anyway?\n\n{details}\n\n(Click OK to save to config.toml as-is; click Cancel to keep editing.)",
|
||
providerNotFound: "Provider not found",
|
||
backToList: "Back to list",
|
||
syncToOmp: "Sync to OMP",
|
||
syncedToOmp: "Synced to OMP: ",
|
||
ompOverwriteConfirm: "OMP already has provider \"{existing}\". Replace with \"{name}\"?",
|
||
deleteProviderConfirm: "Delete provider {name}?",
|
||
|
||
// Provider list
|
||
providers: "Providers",
|
||
dashboard: "Dashboard",
|
||
sessions: "Sessions",
|
||
addProvider: "Add Provider",
|
||
noProviders: "No providers yet",
|
||
addFirstProvider: "Add first provider",
|
||
noUrl: "No URL",
|
||
modelCount: "{count} models",
|
||
ompActive: "OMP Active",
|
||
defaultModel: "Default: {name}",
|
||
edit: "Edit",
|
||
delete: "Delete",
|
||
copyProvider: "Duplicate provider",
|
||
testConnectivity: "Test connectivity",
|
||
testing: "Testing...",
|
||
connectivityOk: "{name} reachable ({latency}ms)",
|
||
connectivitySlow: "{name} reachable but slow ({latency}ms)",
|
||
connectivityFail: "{name} unreachable: {error}",
|
||
// Health check (ProviderList toolbar button + per-row status dot)
|
||
healthCheck: "Health check",
|
||
healthCheckHint:
|
||
"Probe every enabled provider's inference endpoint and billing query in parallel",
|
||
healthCheckRunning: "Checking…",
|
||
healthSummary: "{ok} OK / {fail} failed",
|
||
healthProbeOk: "Endpoint OK ({latency}ms)",
|
||
healthProbeUnsupported: "Endpoint exposes no model list (404)",
|
||
healthProbeFail: "Endpoint failed: {error}",
|
||
healthUsageOk: "Billing OK",
|
||
healthUsageFail: "Billing failed: {error}",
|
||
healthNotChecked: "Not checked",
|
||
healthRequestFailed: "Health check request failed: {error}",
|
||
healthErrNoBaseUrl: "Missing base URL",
|
||
healthErrNoKey: "No API key configured",
|
||
healthErrAuth: "Authentication failed",
|
||
healthErrNotFound: "Endpoint not found",
|
||
healthErrTimeout: "Connection timed out",
|
||
healthErrUnreachable: "Cannot connect (DNS failure or connection refused)",
|
||
healthErrBadJson: "Response is not valid JSON",
|
||
copiedProvider: "Duplicated as {name}",
|
||
|
||
// Provider edit
|
||
editProvider: "Edit Provider",
|
||
back: "Back",
|
||
basicInfo: "Basic Info",
|
||
modelMapping: "Model Mapping",
|
||
configJson: "Config JSON",
|
||
providerName: "Provider Name",
|
||
note: "Note",
|
||
notePlaceholder: "e.g. company account",
|
||
officialUrl: "Official URL",
|
||
managedProvider: "Managed provider (no credentials needed)",
|
||
kimiOAuthLogin: "Sign in with Kimi",
|
||
kimiOAuthOpenPage: "Open authorization page",
|
||
kimiOAuthCopyCode: "Copy code",
|
||
kimiOAuthCodeCopied: "Copied",
|
||
kimiOAuthWaiting: "Enter the code on the page that opens, waiting for authorization…",
|
||
kimiOAuthSuccess: "Authorized — credentials written for Kimi login",
|
||
kimiOAuthExpired: "Code expired, please start over",
|
||
kimiOAuthDenied: "Authorization denied",
|
||
kimiOAuthTimeout: "Authorization timed out, please start over",
|
||
kimiOAuthRetry: "Restart",
|
||
kimiOAuthCancel: "Cancel",
|
||
kimiOAuthNetworkError: "Network error, retrying…",
|
||
kimiOAuthRegionLabel: "Sign-in region",
|
||
kimiOAuthRegionCn: "Mainland China (auth.kimi.com)",
|
||
kimiOAuthRegionGlobal: "International (auth.kimi.ai)",
|
||
kimiOAuthStart: "Start sign-in",
|
||
apiSettings: "API Settings",
|
||
apiFormat: "API Format",
|
||
apiFormatUnknown: "Unknown format ({type}, kept verbatim)",
|
||
authField: "Auth Field",
|
||
apiKey: "API Key",
|
||
getApiKeyLink: "Get API Key",
|
||
apiKeySource: "Credential source",
|
||
apiKeySourceDirect: "Enter key",
|
||
apiKeySourceEnv: "Environment variable",
|
||
apiKeyEnvName: "Variable name",
|
||
apiKeyEnvHint:
|
||
"Only the variable name (api_key_env) is written; Kimi Code reads the secret from its environment. The two sources are mutually exclusive, so switching clears the other.",
|
||
show: "Show",
|
||
hide: "Hide",
|
||
requestUrl: "Request URL",
|
||
fullUrl: "Full URL",
|
||
baseUrlHint: "Enter a {type} API-compatible endpoint without a trailing slash.",
|
||
envPairs: "Env pairs",
|
||
addEnv: "+ Add",
|
||
modelMappingDesc: "Display name only affects the /model menu; 1M declares context capability for Kimi Code.",
|
||
oneClickSetup: "One-click setup",
|
||
fetchModels: "Fetch models",
|
||
fetchingModels: "Fetching...",
|
||
discoveredModels: "Discovered {count} models",
|
||
addSelected: "Add selected",
|
||
alreadyAdded: "Added",
|
||
displayName: "Display name",
|
||
actualModel: "Actual model",
|
||
contextSize: "Context size",
|
||
supports1M: "Supports 1M",
|
||
default: "Default",
|
||
operation: "Operation",
|
||
isDefault: "Default",
|
||
setDefault: "Set default",
|
||
deleteModelConfirm: "Delete model {alias}?",
|
||
noModelMappings: "No model mappings",
|
||
addModelMapping: "+ Add model mapping",
|
||
readOnlyPreview: "Editable JSON",
|
||
apply: "Apply",
|
||
invalidJson: "Invalid JSON: {message}",
|
||
clickToSelectIcon: "Click to select icon",
|
||
clickToChangeIcon: "Click to change icon",
|
||
selectIcon: "Select icon",
|
||
clearIcon: "Clear icon",
|
||
iconPickerSearch: "Search icons",
|
||
iconPickerSearchPlaceholder: "Type an icon name...",
|
||
iconPickerNoResults: "No matching icons found",
|
||
|
||
// Agent / target
|
||
target: "Target",
|
||
targetKimi: "Kimi Code",
|
||
targetOmp: "OMP",
|
||
targetQwen: "Qwen Code",
|
||
agent: "Agent",
|
||
agentKimiCode: "Kimi Code",
|
||
agentPi: "Pi",
|
||
activate: "Activate",
|
||
activated: "Activated",
|
||
disabled: "Disabled",
|
||
switchTo: "Switch to",
|
||
inUse: "In use",
|
||
switchReloadHint: "After switching providers, run /reload in Kimi Code to apply the change.",
|
||
reloadCopiedHint: "Provider switched. /reload copied to clipboard; paste it in Kimi Code.",
|
||
unsavedChanges: "Unsaved changes",
|
||
qwenActivateNotImplemented: "Qwen Code activation will be implemented in a follow-up.",
|
||
agentSettings: "Global Settings",
|
||
enableThinking: "Enable thinking",
|
||
thinkingLevel: "Thinking level",
|
||
thinkingKeep: "Keep thinking content",
|
||
thinkingLow: "Low",
|
||
thinkingMedium: "Medium",
|
||
thinkingHigh: "High",
|
||
thinkingContextHint: "Thinking uses more context. Ensure the model context length and reserved size are sufficient.",
|
||
loopControlSettings: "Loop Control",
|
||
maxAttemptsPerStep: "Max attempts per step",
|
||
reservedContextSize: "Reserved context size",
|
||
compactionMaxAttempts: "Max compaction attempts",
|
||
compactionMaxAttemptsHint:
|
||
"Retry limit after a failed context compaction. Empty or 0 leaves the key out of the config (upstream default 5).",
|
||
backgroundSettings: "Background Tasks",
|
||
maxRunningTasks: "Max running tasks",
|
||
keepAliveOnExit: "Keep alive on exit",
|
||
watchSettings: "File Watching",
|
||
watchEnabled: "Enable file watching",
|
||
watchEnabledDesc:
|
||
"Watch config files and the workspace for changes (configurable since kimi-code 2.0.1, off by default since 2.0.2). The KIMI_CODE_WATCH environment variable overrides this setting.",
|
||
permissionRules: "Permission Rules",
|
||
permissionDecision: "Decision",
|
||
permissionPattern: "Pattern",
|
||
permissionAllow: "Allow",
|
||
permissionDeny: "Deny",
|
||
permissionAsk: "Ask",
|
||
permissionDangerousGuard: "Dangerous Command Guard",
|
||
permissionDangerousGuardDesc:
|
||
"When on (default): Manual/YOLO modes force a prompt for dangerous commands (rm -rf, shutdown, dd of=, ...) and commands that cannot be statically analyzed; Auto (never-ask) mode no longer intercepts them since kimi-code 0.41.0. Turning it off restores the previous behavior. Env KIMI_CODE_DANGEROUS_COMMAND_GUARD overrides this config",
|
||
addRule: "+ Add rule",
|
||
addCommonRules: "Add common rules",
|
||
hooks: "Lifecycle Hooks",
|
||
hookEvent: "Event",
|
||
hookMatcher: "Matcher",
|
||
hookCommand: "Command",
|
||
hookTimeout: "Timeout",
|
||
addHook: "+ Add hook",
|
||
importConfig: "Import current config",
|
||
importConfigConfirm: "Importing will overwrite unsaved changes. Continue?",
|
||
importConfigFailed: "Import failed: {message}",
|
||
capabilities: "Capabilities",
|
||
fetchEnableThinking: "Enable thinking for fetched models",
|
||
capThinking: "Thinking",
|
||
capAlwaysThinking: "Always Thinking",
|
||
capImageIn: "Image Input",
|
||
capImageInHint: "Text models actually need the plugin-kimi-eyes:kimi-eyes plugin for image recognition",
|
||
capVideoIn: "Video Input",
|
||
capToolUse: "Tool Use",
|
||
customCapabilities: "Other capabilities (comma-separated)",
|
||
|
||
// Sessions
|
||
sessionsTitle: "Sessions",
|
||
sessionsSubtitle:
|
||
"Browse, preview, archive, or delete Kimi Code sessions by workspace. Archiving keeps data on disk.",
|
||
workspaces: "Workspaces",
|
||
workspaceIsolatedHint: "Sessions are isolated per workspace",
|
||
allWorkspaces: "All workspaces",
|
||
emptyWorkspace: "Empty",
|
||
deleteWorkspace: "Delete workspace",
|
||
noSessions: "No sessions",
|
||
statusActive: "Active",
|
||
statusArchived: "Archived",
|
||
statusAll: "All",
|
||
selectAll: "Select all",
|
||
deselectAll: "Deselect all",
|
||
invertSelection: "Invert selection",
|
||
selectedCount: "{n} selected",
|
||
archive: "Archive",
|
||
unarchive: "Unarchive",
|
||
sessionTitle: "Session",
|
||
workspace: "Workspace",
|
||
status: "Status",
|
||
size: "Size",
|
||
updated: "Updated",
|
||
actions: "Actions",
|
||
sessionsInView: "{n} sessions",
|
||
isolatedToWorkspace: "this workspace only",
|
||
openPreview: "Open preview",
|
||
scanning: "Scanning…",
|
||
refresh: "Refresh",
|
||
refreshing: "Refreshing…",
|
||
loadStats: "Loaded in {ms} ms · {kb} KB payload",
|
||
refreshed: "Refreshed",
|
||
cancel: "Cancel",
|
||
confirmDeleteTitle: "Delete session forever?",
|
||
confirmDeleteSession:
|
||
"This cannot be undone. Prefer archive if you only want it out of the way.",
|
||
confirmBulkTitle: "Delete selected forever?",
|
||
confirmBulkDelete: "Permanently delete {n} sessions. This cannot be undone.",
|
||
confirmDeleteWorkspaceTitle: "Delete empty workspace?",
|
||
confirmDeleteWorkspace: "Only workspaces with no sessions can be removed.",
|
||
deleteForever: "Delete forever",
|
||
previewTitle: "Session preview",
|
||
previewHint:
|
||
"Roles and truncated text only — secrets and raw tool dumps are omitted.",
|
||
previewEmpty: "No previewable messages",
|
||
previewTruncated: "Preview truncated",
|
||
roleUser: "User",
|
||
roleAssistant: "Assistant",
|
||
roleSystem: "System",
|
||
sessionsArchiveAll: "Archive old sessions",
|
||
archiveAllTitle: "Archive old sessions",
|
||
archiveAllDesc:
|
||
"Archives every active session whose last activity is older than the selected date. Files are kept and usage stats stay intact.",
|
||
archiveOptionMonth: "Older than 1 month",
|
||
archiveOptionHalfMonth: "Older than 15 days",
|
||
archiveOptionWeek: "Older than 1 week",
|
||
archiveOptionCustom: "Specific date",
|
||
archiveAllConfirm: "Archive every active session last active before {date}. Continue?",
|
||
archiveAllRunning: "Archiving…",
|
||
archiveAllDone: "Archived {archived} sessions, skipped {skipped}",
|
||
archiveAllFailed: "Archive failed",
|
||
archiveAllEmpty: "No sessions match",
|
||
|
||
// Heatmap
|
||
noData: "No data",
|
||
heatLess: "Less",
|
||
heatMore: "More",
|
||
requests: "Requests",
|
||
cacheHitRate: "Cache hit rate",
|
||
|
||
// Daily detail modal
|
||
dayDetail: "Daily usage detail",
|
||
dayDetailNoData: "No usage data for {date}",
|
||
close: "Close",
|
||
totalTokens: "Total tokens",
|
||
cost: "Cost",
|
||
modelDistribution: "Model distribution",
|
||
providerDistribution: "Provider distribution",
|
||
modalEscHint: "Press Esc or click outside to close",
|
||
doubleClickHint: "Double-click for details",
|
||
|
||
// Languages
|
||
language: "Language",
|
||
zh: "中文",
|
||
en: "English",
|
||
|
||
// Theme & Settings
|
||
themeLight: "Light",
|
||
themeDark: "Dark",
|
||
themeAuto: "Auto",
|
||
settings: "Settings",
|
||
settingsTitle: "Settings",
|
||
settingsAppearance: "Appearance",
|
||
settingsUpdates: "Updates",
|
||
settingsAbout: "About",
|
||
checkUpdate: "Check for updates",
|
||
checking: "Checking…",
|
||
upToDate: "You're up to date",
|
||
updateAvailable: "Update available",
|
||
currentVersion: "Current version",
|
||
latestVersion: "Latest version",
|
||
downloadUpdate: "Download update",
|
||
downloading: "Downloading…",
|
||
downloadComplete: "Download complete, click to install",
|
||
install: "Install",
|
||
updateCheckFailed: "Update check failed",
|
||
lastChecked: "Last checked",
|
||
// Kimi Code version tracking
|
||
kimiCodeSection: "Kimi Code version",
|
||
kimiCodeInstalled: "Installed",
|
||
kimiCodeLatest: "Latest",
|
||
kimiCodeStatusLabel: "Compatibility",
|
||
kimiCodeStatusCurrent: "Supported",
|
||
kimiCodeStatusOutdated: "Update KimiSwitch recommended",
|
||
kimiCodeStatusPartial: "Partially compatible",
|
||
kimiCodeStatusUnknown: "Unknown version",
|
||
kimiCodeStatusNotInstalled: "Not installed",
|
||
kimiCodeCheck: "Check",
|
||
kimiCodeOpenReleases: "Open releases",
|
||
appDescription: "Windows desktop LLM provider config manager",
|
||
settingsWebsite: "Official website",
|
||
kimiEyesSite: "Kimi Eyes plugin site",
|
||
referenceProject: "Reference project",
|
||
|
||
// Validation errors
|
||
emptyProviderName: "Provider name is empty",
|
||
duplicateProviderName: "Duplicate provider name: {0}",
|
||
missingCredentials: "Provider '{0}' is missing credentials (api_key or env key)",
|
||
ambiguousCredentials: "Provider '{0}' has both direct and env credentials; only one source is allowed",
|
||
missingVertexProject: "Vertex provider '{0}' is missing GOOGLE_CLOUD_PROJECT or GOOGLE_CLOUD_LOCATION",
|
||
emptyModelAlias: "Model alias is empty",
|
||
duplicateModelAlias: "Duplicate model alias: {0}",
|
||
unknownModelProvider: "Model '{0}' references unknown provider '{1}'",
|
||
emptyModelId: "Model '{0}' has an empty model ID",
|
||
invalidMaxContextSize: "Model '{0}' has an invalid max_context_size",
|
||
|
||
// Dashboard — ranges / status
|
||
rangeToday: "Today",
|
||
rangeYesterday: "Yesterday",
|
||
range7d: "7d",
|
||
range30d: "30d",
|
||
rangeAll: "All",
|
||
dashLoadFailed: "Failed to load",
|
||
|
||
// Dashboard — KPI labels
|
||
kpiRequests: "Requests",
|
||
kpiInputOther: "Non-cached input",
|
||
kpiOutput: "Output",
|
||
kpiCacheRead: "Cache read",
|
||
kpiCacheCreation: "Cache creation",
|
||
kpiCacheHit: "Cache hit",
|
||
kpiCost: "Est. cost",
|
||
|
||
// Dashboard — cards
|
||
cardHeatmap: "Full-year heatmap",
|
||
cardHeatmapSub: "Coloured by token volume",
|
||
cardDailyTrend: "Usage trend",
|
||
cardDailyTrendSubCapped: "Last 30 days · {n} days total",
|
||
tabModelTrend: "Model usage trend",
|
||
tabProviderTrend: "Provider–model usage trend",
|
||
tabModelTotals: "Model usage totals",
|
||
tabDailyTrend: "Daily usage trend",
|
||
providerUnknown: "Unknown provider",
|
||
cardDailyTrendSub: "{n} days",
|
||
cardModelUsage: "Model usage",
|
||
cardModelUsageSub: "{n} models",
|
||
cardRecent: "Recent requests",
|
||
cardRecentCapped: "Showing first {n} / {m}",
|
||
cardRecentCount: "{n} entries",
|
||
|
||
// Dashboard — table columns / units
|
||
colModel: "Model",
|
||
colTokens: "Tokens",
|
||
colCacheHit: "Cache hit",
|
||
colTime: "Time",
|
||
colInput: "Input",
|
||
colOutput: "Output",
|
||
colCacheRead: "Cache read",
|
||
unitTimes: "requests",
|
||
estimate: "est.",
|
||
subagentModel: "Subagent model",
|
||
collapse: "Collapse",
|
||
expandAll: "Expand all ({n})",
|
||
|
||
// Dashboard — pagination
|
||
paginationPage: "Page {x} / {y}",
|
||
paginationRange: "{x}–{y}",
|
||
paginationPerPage: "{n} per page",
|
||
pageFirst: "First",
|
||
pagePrev: "Previous",
|
||
pageNext: "Next",
|
||
pageLast: "Last",
|
||
|
||
// Dashboard — footer / attribution
|
||
footerScanned: "Scanned {n} files · {m} records",
|
||
attributionPorted: "Dashboard & session manager ported from",
|
||
attributionSuffix: "(MIT, © JochenYang)",
|
||
modelDataSourcePrefix: "Model & pricing data referenced from",
|
||
|
||
// Sessions — preview
|
||
previewCollapseChars: "Collapse · {n} chars",
|
||
previewExpandChars: "Expand · {n} chars",
|
||
|
||
// Provider presets
|
||
presetPickerTitle: "Choose a provider preset",
|
||
presetSearchPlaceholder: "Search presets...",
|
||
presetSortOriginal: "Default",
|
||
presetSortAlpha: "A-Z",
|
||
presetNoResults: "No matching presets",
|
||
presetCustomConfig: "+ Custom configuration",
|
||
presetFooterHint: "Presets only pre-fill the form; every field stays editable afterwards.",
|
||
presetCategoryOfficial: "Official",
|
||
presetCategoryCnOfficial: "China",
|
||
presetCategoryThirdParty: "Third-party",
|
||
presetCategoryAggregator: "Aggregator",
|
||
presetNameAnthropic: "Anthropic",
|
||
presetNameKimiCoding: "Kimi For Coding",
|
||
presetNameMoonshot: "Moonshot Platform",
|
||
presetNameDeepseek: "DeepSeek",
|
||
presetNameZhipuApi: "Zhipu GLM (Pay-as-you-go)",
|
||
presetNameZhipuCoding: "Zhipu GLM Coding Plan",
|
||
presetNameZaiApi: "z.ai (Pay-as-you-go)",
|
||
presetNameZaiCoding: "z.ai Coding Plan",
|
||
presetNameBailian: "Alibaba Bailian",
|
||
presetNameMinimax: "MiniMax",
|
||
presetNameMinimaxTokenPlan: "MiniMax Token Plan",
|
||
presetNameStepfun: "StepFun",
|
||
presetNameStepfunPlan: "StepFun Plan",
|
||
presetNameSiliconflow: "SiliconFlow",
|
||
presetNameNovita: "Novita AI",
|
||
presetNameOpenrouter: "OpenRouter",
|
||
presetNameTokenRhythm: "TokenRhythm",
|
||
presetNameOpenai: "OpenAI",
|
||
presetNameGoogleGenai: "Google AI Studio",
|
||
presetNameVolcengine: "Volcengine Ark",
|
||
presetNameOpencodeGo: "OpenCode Go",
|
||
presetNameOpencodeZen: "OpenCode Zen",
|
||
|
||
// Provider usage
|
||
usageBalance: "Balance",
|
||
usageUsed: "used",
|
||
usageRemaining: "left",
|
||
usageRefresh: "Refresh",
|
||
usageRetry: "Retry",
|
||
usageQueryFailed: "Query failed",
|
||
usageNetworkError: "Network error",
|
||
usageInvalidKey: "Invalid API key",
|
||
usageResetIn: "resets in {time}",
|
||
usageResetDone: "reset",
|
||
usageLoading: "Querying…",
|
||
usageQueryOk: "Query succeeded",
|
||
// Usage config panel (cc-switch style)
|
||
usageConfigTitle: "Configure Usage Query - {name}",
|
||
usageConfigBtn: "Configure usage query",
|
||
usageEnable: "Enable usage query",
|
||
usageTemplate: "Query template",
|
||
usageTemplateAuto: "Auto-detect",
|
||
usageTemplateNewapi: "NewAPI gateway",
|
||
usageTemplateSub2api: "Sub2API gateway",
|
||
usageAutoDetectHint: "Query balance / plan with the provider's API Key and Base URL",
|
||
usageNewapiHint: "Query a NewAPI / OneAPI gateway balance (requires a web-console Access Token, not the sk- inference key)",
|
||
usageSub2apiHint: "Query a Sub2API (Wei-Shaw/sub2api) gateway balance / quota (GET /v1/usage). Reuses the inference sk- API key — no extra credentials; the query URL is optionally overridable",
|
||
usageOAuthManagedHint: "Official OAuth managed: queries the subscription with your Kimi Code login credentials",
|
||
usageDetectedKinds: "Detected query kinds",
|
||
usageNoKinds: "Not detected (switch to the NewAPI template to configure manually)",
|
||
usageBaseUrl: "Query URL (Base URL)",
|
||
usageAccessToken: "Access Token",
|
||
usageAccessTokenPlaceholder: "Access Token from the web console",
|
||
usageAccessTokenHint: "Generated in the NewAPI web console (Personal Settings → Access Token) — NOT the sk- inference key",
|
||
usageUserId: "User ID",
|
||
usageUserIdPlaceholder: "NewAPI user id (numeric)",
|
||
usageUserIdHint: "User id from the web console profile page, sent as the New-Api-User header",
|
||
usageAutoInterval: "Auto query interval (minutes)",
|
||
usageAutoIntervalHint: "0 = query only on page open or manual refresh",
|
||
usageTimeout: "Timeout (seconds)",
|
||
usageTimeoutHint: "0 = use the default (8 seconds)",
|
||
usageSupportedVars: "Supported variables",
|
||
usageBack: "Back",
|
||
usageNoKindsHint: "No auto-detected query type for this provider. Switch to the NewAPI template to configure manually, or add a custom query script (coming soon).",
|
||
usageSwitchToNewapi: "Switch to NewAPI template",
|
||
usageUnsupportedProvider: "This provider is not supported by auto query",
|
||
usageTier5h: "5-hour",
|
||
usageTierDaily: "Daily",
|
||
usageTierWeekly: "Weekly",
|
||
usageTierMonthly: "Monthly",
|
||
usageTierMonthCode: "Monthly (code)",
|
||
usageTierBoosterWallet: "Booster",
|
||
usageThreshold: "Alert threshold",
|
||
usageThresholdHint: "Highlight any window that reaches this percentage; 0 = off",
|
||
usageThresholdAlert: "Threshold reached",
|
||
usageErrNoKey: "No API key configured",
|
||
usageErrDisabled: "Usage query is disabled in the config panel",
|
||
usageErrLoginExpired: "Kimi Code login expired and auto-refresh failed; run `kimi login` again",
|
||
usageErrNoOauth: "No Kimi Code OAuth credentials found; run `kimi login` first",
|
||
usageErrNewapiCreds: "The NewAPI template requires Access Token and User ID",
|
||
usageTestQuery: "Test query",
|
||
usageUpdatedAgo: "{time} ago",
|
||
usageMinAgo: "{n} min ago",
|
||
usageHourAgo: "{n} h ago",
|
||
usageDayAgo: "{n} d ago",
|
||
|
||
// Billing mode (subscription / pay-as-you-go)
|
||
billingTabSubscription: "Subscription",
|
||
billingTabPayAsYouGo: "Pay-as-you-go",
|
||
billingTabAll: "All",
|
||
billingBadgeSubscription: "Plan",
|
||
billingBadgePayAsYouGo: "PAYG",
|
||
|
||
// Usage trend line chart
|
||
trendLineTitle: "Usage Trend",
|
||
trendLineSub: "last {n} days",
|
||
trendLineLegendTokens: "Token usage",
|
||
trendLineLegendCacheHit: "Cache hit rate",
|
||
trendLineLegendRequests: "Requests",
|
||
trendLineShowRequests: "Show requests",
|
||
trendLineTooltip: "{date}\nTokens: {tokens}\nCache hit: {cache}\nRequests: {req}",
|
||
trendLineNoData: "No data",
|
||
|
||
// Advanced settings page (WebUI quick open + experimental flags + secondary model)
|
||
subagentSettings: "Advanced Settings",
|
||
experimentalFlags: "Experimental Features",
|
||
experimentalFlagsHint:
|
||
"Toggles are written to the [experimental] section of config.toml; env vars take precedence and locked toggles cannot be changed here",
|
||
flagToolSelect: "Tool Select",
|
||
flagToolSelectDesc: "Enable the experimental tool selection feature",
|
||
flagTower: "Tower Mode",
|
||
flagTowerDesc: "Enable tower mode: coordinate multiple agents on a shared objective (/tower command)",
|
||
flagSubagentFork: "Subagent Fork Context",
|
||
flagSubagentForkDesc: "Agent/AgentSwarm tools can start a subagent with a snapshot of the calling agent's history (fork parameter)",
|
||
flagWaitFor: "WaitFor Tool",
|
||
flagWaitForDesc: "The agent can wait for background tasks to finish within the current turn",
|
||
flagNotifyUser: "NotifyUser tool",
|
||
flagNotifyUserDesc: "Experimental Updates panel: paginated progress messages from the main agent and subagents (off by default)",
|
||
flagDefaultOn: "On by default",
|
||
lockedByEnv: "Locked by env var",
|
||
masterEnvOnHint:
|
||
"KIMI_CODE_EXPERIMENTAL_FLAG is set: flags without an explicit [experimental] entry are forced on; explicit entries in config.toml still win",
|
||
secondaryModelSection: "Subagent Model (Secondary Model)",
|
||
secondaryModelLabel: "Secondary model",
|
||
secondaryModelUnset: "Not configured",
|
||
secondaryModelInheritedContext: "Inherited context",
|
||
secondaryModelInheritedEffort: "Inherited effort",
|
||
secondaryModelInheritedHint:
|
||
"Subagents bind the selected model directly and inherit its context size and effort — no patch needed",
|
||
secondaryModelHint:
|
||
"Second model config bound to subagents by default; when unset, subagents inherit the primary model. Only the model reference is stored; subagents inherit all of that model's settings",
|
||
secondaryModelPriorityHint:
|
||
"Priority (v2): tool model param (pool alias or primary) > default_model > inherit primary; (v1 legacy): tool param > model_preference > model > inherit primary",
|
||
|
||
// Subagent model pool (secondary_model v2 keys)
|
||
secondaryPoolUpgrade: "Upgrade to model pool",
|
||
secondaryPoolUpgradeDesc:
|
||
"Writes default_model in sync with model (dual-write for both engines); more pool entries can be added afterwards",
|
||
secondaryPoolAddLabel: "Add pool entry",
|
||
secondaryPoolAddPlaceholder: "Select a model to add to the pool…",
|
||
secondaryPoolRemove: "Remove",
|
||
secondaryPoolDescPlaceholder: "Subagent routing description for this model…",
|
||
secondaryPoolDescHint:
|
||
"The description is rendered into the main agent's tool description (Agent/AgentSwarm) and directly affects how well the main model routes to subagent models",
|
||
secondaryPoolForce: "Force default model",
|
||
secondaryPoolForceDesc:
|
||
"When enabled, all subagents are forced onto the default model; force excludes pool entries, which are removed",
|
||
secondaryPoolForceOn: "Force is on: subagents always use \"{alias}\"",
|
||
secondaryPoolForceConfirm:
|
||
"Enabling force removes every pool entry, keeping only the default model. Continue?",
|
||
secondaryModelClear: "Clear subagent config",
|
||
secondaryModelForceBadge: "Force on: subagents always use this model",
|
||
secondaryPoolErrorPrimaryReserved:
|
||
"\"{alias}\" is a reserved alias and cannot be a pool entry",
|
||
secondaryPoolErrorDefaultRequired: "default_model is required when pool entries exist",
|
||
secondaryPoolErrorDefaultNotInPool: "Default model \"{alias}\" is not in the pool",
|
||
secondaryPoolErrorAliasNotInModels: "Model \"{alias}\" is not registered in [models]",
|
||
secondaryPoolErrorForceRequiresDefault:
|
||
"A default model is required before enabling force",
|
||
secondaryPoolErrorForceExcludesModels:
|
||
"force is mutually exclusive with pool entries",
|
||
|
||
// Kimi Code WebUI quick open
|
||
webuiSection: "Kimi Code WebUI",
|
||
webuiDesc:
|
||
"Open the new Web UI in an independent in-app window, or in your system browser (built into kimi-code 0.33+). Requires the kimi CLI on PATH.",
|
||
openWebUIEmbedded: "Open in App",
|
||
openWebUIBrowser: "Open in Browser",
|
||
webuiOpening: "Opening...",
|
||
|
||
// models.dev reference data (context / capabilities / pricing)
|
||
modelsDataSection: "Model Reference Data (models.dev)",
|
||
modelsDataDesc:
|
||
"Model context limits, capability flags, and pricing come from an online models.dev snapshot. Syncing applies new models immediately — no app update needed.",
|
||
modelsDataSourceSynced: "Online sync",
|
||
modelsDataSourceBuiltin: "Bundled with release",
|
||
modelsDataStats: "{date} · {models} models / {providers} providers",
|
||
modelsDataSyncNow: "Sync Now",
|
||
modelsDataSyncing: "Syncing...",
|
||
modelsDataSyncOk: "Synced — model parameters and pricing refreshed",
|
||
modelsDataSyncFailed: "Sync failed",
|
||
modelsDataRestore: "Restore Built-in Data",
|
||
modelsDataRestoreConfirm:
|
||
"Delete the local synced copy and fall back to the snapshot bundled with this release? You can sync again at any time.",
|
||
|
||
// Plugin marketplace
|
||
pluginMarketplace: "Plugin Marketplace",
|
||
pluginMarketplaceSubtitle:
|
||
"Browse and install Kimi Code plugins — official and community, with install, update, and enable/disable management.",
|
||
pluginSearchPlaceholder: "Search by name, description, keyword, or ID…",
|
||
pluginSectionInstalled: "Installed",
|
||
pluginSectionOfficial: "Official",
|
||
pluginSectionCommunity: "Community",
|
||
pluginCustomInstall: "Custom",
|
||
pluginUpdateAvailable: "Update available",
|
||
pluginCapabilityRequired: "Install inside kimi-code (/plugins)",
|
||
pluginInstall: "Install",
|
||
pluginUpdate: "Update",
|
||
pluginEnable: "Enable",
|
||
pluginDisable: "Disable",
|
||
pluginRemove: "Remove",
|
||
pluginInstalling: "Installing…",
|
||
pluginUpdating: "Updating…",
|
||
pluginToggling: "Switching…",
|
||
pluginRemoving: "Removing…",
|
||
pluginTrustTitle: "Install third-party plugin?",
|
||
pluginTrustDesc:
|
||
"This plugin comes from {source}. Plugins can contribute MCP tools, hooks, and commands, and may access your sessions and files. Only install from sources you trust.",
|
||
pluginTrustInstall: "Trust & install",
|
||
pluginRemoveTitle: "Remove plugin?",
|
||
pluginRemoveConfirm:
|
||
"Remove \"{name}\"? Run /reload in kimi-code or start a new session afterwards to apply.",
|
||
pluginInstalledMsg:
|
||
"\"{name}\" installed. Run /reload in kimi-code or start a new session to apply.",
|
||
pluginUpdatedMsg:
|
||
"\"{name}\" updated. Run /reload in kimi-code or start a new session to apply.",
|
||
pluginEnabledMsg:
|
||
"\"{name}\" enabled. Run /reload in kimi-code or start a new session to apply.",
|
||
pluginDisabledMsg:
|
||
"\"{name}\" disabled. Run /reload in kimi-code or start a new session to apply.",
|
||
pluginRemovedMsg:
|
||
"\"{name}\" removed. Run /reload in kimi-code or start a new session to apply.",
|
||
pluginCopyReload: "Copy /reload",
|
||
pluginReloadCopied: "Copied",
|
||
pluginCacheNotice: "Showing cached data (fetched {time})",
|
||
pluginCatalogFailed:
|
||
"Failed to load the plugin catalog; showing locally installed plugins",
|
||
pluginInstalledListFailed: "Failed to load the installed plugin list",
|
||
pluginEmptyResults: "No matching plugins",
|
||
pluginNoPlugins: "No plugins available",
|
||
pluginHomepage: "Homepage",
|
||
};
|