import type { TranslationKey } from "./zh"; export const enTranslations: Record = { // 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}", 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)", apiSettings: "API Settings", apiFormat: "API Format", authField: "Auth Field", apiKey: "API Key", getApiKeyLink: "Get API Key", 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", thinkingMax: "Max", thinkingContextHint: "Thinking uses more context. Ensure the model context length and reserved size are sufficient.", loopControlSettings: "Loop Control", maxRetriesPerStep: "Max retries per step", reservedContextSize: "Reserved context size", backgroundSettings: "Background Tasks", maxRunningTasks: "Max running tasks", keepAliveOnExit: "Keep alive on exit", permissionRules: "Permission Rules", permissionDecision: "Decision", permissionPattern: "Pattern", permissionAllow: "Allow", permissionDeny: "Deny", permissionAsk: "Ask", 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", 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", 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…", 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", // Heatmap noData: "No data", heatLess: "Less", heatMore: "More", requests: "Requests", cacheHitRate: "Cache hit rate", // Daily detail modal dayDetail: "Daily usage detail", 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", appDescription: "Windows desktop LLM provider config manager", 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", 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", 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.", 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", dashboardAttribution: "Dashboard ported from", sessionsAttribution: "Session manager ported from", attributionSuffix: "(MIT, © JochenYang)", // 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", 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", 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)", 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", usageTierWeekly: "Weekly", 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", };