opencode-provider-switch/frontend/src/i18n/locales/en.json

337 lines
13 KiB
JSON

{
"app": {
"eyebrow": "ocswitch desktop",
"brand": "ocswitch desktop",
"title": "Native control panel",
"subtitle": "{{version}} · {{shell}} shell · {{path}}",
"loadingConfig": "loading config",
"dev": "dev"
},
"tray": {
"appTitle": "ocswitch",
"appTooltip": "ocswitch desktop",
"proxyChecking": "Proxy: checking...",
"proxyStatusHint": "Current proxy status",
"proxyUnavailable": "Proxy: unavailable",
"proxyRunning": "Proxy: running (%s)",
"proxyStopped": "Proxy: stopped (%s)",
"openWindow": "Open window",
"openWindowHint": "Show desktop window",
"hideWindow": "Hide window",
"hideWindowHint": "Hide desktop window",
"startProxy": "Start proxy",
"startProxyHint": "Start local proxy",
"stopProxy": "Stop proxy",
"stopProxyHint": "Stop local proxy",
"quit": "Quit",
"quitHint": "Exit application"
},
"nav": {
"overview": { "title": "Overview", "description": "Status, actions, and environment" },
"providers": { "title": "Providers", "description": "Manage upstream endpoints" },
"aliases": { "title": "Aliases", "description": "Route models across targets" },
"log": { "title": "Log", "description": "Business routing, alias decisions, and failover chain" },
"network": { "title": "Network", "description": "Request metadata except LLM input and output content" },
"sync": { "title": "Sync", "description": "OpenCode sync and doctor" },
"settings": { "title": "Settings", "description": "Theme, language, desktop behavior" }
},
"actions": {
"refresh": "Refresh",
"runDoctor": "Run doctor",
"startProxy": "Start proxy",
"stopProxy": "Stop proxy",
"save": "Save",
"reset": "Reset",
"preview": "Preview",
"apply": "Apply sync",
"edit": "Edit",
"delete": "Delete",
"enable": "Enable",
"disable": "Disable",
"import": "Import providers",
"bind": "Bind target",
"unbind": "Unbind",
"newProvider": "New provider",
"newAlias": "New alias",
"close": "Close",
"cancel": "Cancel",
"confirm": "Confirm",
"exportConfig": "Export config",
"importConfig": "Import config"
},
"confirm": {
"deleteProviderTitle": "Delete provider",
"deleteAliasTitle": "Delete alias",
"unbindTargetTitle": "Unbind target"
},
"status": {
"proxyRunning": "Proxy running",
"proxyIdle": "Proxy idle",
"enabled": "Enabled",
"disabled": "Disabled",
"yes": "Yes",
"no": "No"
},
"messages": {
"refreshing": "Refreshing...",
"fresh": "Fresh",
"saving": "Saving...",
"saved": "Saved",
"running": "Running...",
"applying": "Applying...",
"previewing": "Previewing...",
"importing": "Importing providers...",
"loading": "Loading...",
"noData": "No data yet.",
"warningsSuffix": "Warnings: {{warnings}}",
"proxyStarted": "Proxy started",
"proxyStopped": "Proxy stopped",
"doctorOk": "Doctor OK",
"previewChanges": "Preview shows changes",
"previewNoChanges": "Preview shows no changes",
"syncApplied": "Sync applied",
"syncUpToDate": "Already up to date",
"confirmDeleteProvider": "Delete provider {{id}}? This cannot be undone.",
"confirmDeleteAlias": "Delete alias {{alias}}? This cannot be undone.",
"confirmUnbindTarget": "Unbind {{provider}}/{{model}} from {{alias}}?"
},
"overview": {
"title": "Overview",
"subtitle": "See the current desktop state and run common actions without leaving this screen.",
"actionsTitle": "Actions",
"statsTitle": "System snapshot",
"environmentTitle": "Environment",
"environmentSubtitle": "Only runtime and desktop app details stay here.",
"doctorTitle": "Doctor summary",
"debugTitle": "Debug details",
"debugSummary": "Show raw overview JSON",
"providers": "Providers",
"aliases": "Aliases",
"routableAliases": "Routable aliases",
"proxy": "Proxy",
"version": "Version",
"shell": "Shell",
"configPath": "Config path",
"startedAt": "Started at",
"lastError": "Last error",
"doctorReady": "Doctor has not run yet. Use it to inspect config and OpenCode wiring.",
"doctorIssues": "{{count}} issue(s) found",
"doctorHealthy": "No known issues"
},
"providers": {
"title": "Providers",
"subtitle": "Edit upstream providers with a fixed editor and a scrollable list.",
"listTitle": "Provider list",
"formCreateTitle": "Create provider",
"formEditTitle": "Edit provider {{id}}",
"importTitle": "Import from OpenCode",
"search": "Search providers",
"searchPlaceholder": "Filter by id, name, or URL",
"filter": "Status filter",
"filterAll": "All",
"filterEnabled": "Enabled",
"filterDisabled": "Disabled",
"listCount": "{{shown}} shown / {{total}} total",
"detailHint": "Select one row to inspect and edit it on the right.",
"selectTitle": "Select a provider",
"selectHint": "The left list is optimized for density. Pick one row to inspect or edit details here.",
"empty": "No providers configured yet.",
"emptyHint": "Create one manually or import providers from your OpenCode config.",
"noMatches": "No providers match the current filters.",
"noMatchesHint": "Try a broader search term or switch the status filter.",
"id": "Provider id",
"name": "Display name",
"baseUrl": "Base URL",
"apiKey": "API key",
"headers": "Headers",
"models": "Models",
"sourcePath": "Import path",
"saveDisabled": "Save as disabled",
"skipModels": "Skip /v1/models discovery",
"clearHeaders": "Clear saved headers before update",
"overwrite": "Overwrite existing providers",
"apiKeyMasked": "API key",
"apiKeyNotSet": "not set",
"cardBaseUrl": "URL",
"cardModels": "Models",
"cardApiKey": "API key",
"detailBasicsTitle": "Basics",
"detailTogglesTitle": "Behavior",
"headersNone": "none",
"modelsNone": "none",
"modelsCount": "{{count}} models",
"sourceLabel": "Source",
"placeholderId": "su8",
"placeholderName": "SU8",
"placeholderBaseUrl": "https://example.com/v1",
"placeholderApiKey": "Leave blank to keep existing key when editing",
"placeholderHeaders": "X-Token=abc\nX-Workspace=my-team",
"placeholderSourcePath": "Leave blank to use global OpenCode config",
"statusSaved": "Saved provider {{id}}",
"statusEditing": "Editing provider {{id}}. Leave API key blank to keep the current value.",
"statusEnabling": "Enabling provider {{id}}...",
"statusDisabling": "Disabling provider {{id}}...",
"statusEnabled": "Enabled provider {{id}}",
"statusDisabled": "Disabled provider {{id}}",
"statusDeleting": "Deleting provider {{id}}...",
"statusDeleted": "Deleted provider {{id}}",
"statusImportDone": "Import done: imported={{imported}}, skipped={{skipped}}"
},
"aliases": {
"title": "Aliases",
"subtitle": "Separate alias editing from target binding so routing stays readable.",
"listTitle": "Alias list",
"formCreateTitle": "Create alias",
"formEditTitle": "Edit alias {{alias}}",
"bindTitle": "Bind target",
"search": "Search aliases",
"searchPlaceholder": "Filter by alias, display name, provider, or model",
"listCount": "{{shown}} shown / {{total}} total",
"detailHint": "Select one row to inspect alias settings and targets on the right.",
"selectTitle": "Select an alias",
"selectHint": "The left list stays compact so you can scan more routes per screen. Pick one row to inspect or edit details here.",
"empty": "No aliases configured yet.",
"emptyHint": "Create an alias first, then bind provider/model targets to it.",
"noMatches": "No aliases match the current filters.",
"noMatchesHint": "Try a different search term or create a new alias route.",
"alias": "Alias",
"displayName": "Display name",
"aliasForBinding": "Alias for binding",
"providerId": "Provider id",
"model": "Model",
"createDisabled": "Create or keep disabled",
"targetDisabled": "Add target disabled",
"placeholderAlias": "gpt-5.4",
"placeholderDisplayName": "GPT 5.4",
"placeholderAliasBinding": "Existing alias or new alias",
"placeholderProviderId": "su8",
"placeholderModel": "gpt-5.4",
"targets": "Targets",
"targetsCount": "{{count}} targets",
"routable": "{{available}}/{{total}} routable",
"cardRoute": "Route",
"cardTargets": "Targets",
"cardPrimary": "Primary",
"detailBasicsTitle": "Alias details",
"detailTargetsHint": "Manage routable provider/model targets for this alias.",
"statusSaved": "Saved alias {{alias}}",
"statusEditing": "Editing alias {{alias}}",
"statusDeleting": "Deleting alias {{alias}}...",
"statusDeleted": "Deleted alias {{alias}}",
"statusBinding": "Binding target...",
"statusBound": "Bound {{provider}}/{{model}} to {{alias}}",
"statusRemoving": "Removing {{provider}}/{{model}} from {{alias}}...",
"statusRemoved": "Removed {{provider}}/{{model}} from {{alias}}",
"statusEnabling": "Enabling {{provider}}/{{model}} on {{alias}}...",
"statusDisabling": "Disabling {{provider}}/{{model}} on {{alias}}...",
"statusEnabled": "Enabled {{provider}}/{{model}} on {{alias}}",
"statusDisabled": "Disabled {{provider}}/{{model}} on {{alias}}",
"noTargets": "No targets bound."
},
"sync": {
"title": "Sync",
"subtitle": "Preview and apply OpenCode sync without leaving the desktop shell.",
"syncTitle": "OpenCode sync",
"doctorTitle": "Doctor report",
"targetPath": "Target path",
"model": "model",
"smallModel": "small_model",
"placeholderTargetPath": "Use default OpenCode config",
"placeholderModel": "ocswitch/<alias>",
"outputTitle": "Last output",
"doctorHint": "Run doctor to inspect config and OpenCode wiring.",
"issuesTitle": "Issues",
"noIssues": "No issues reported.",
"debugTitle": "Raw doctor JSON",
"debugSummary": "Show doctor output"
},
"log": {
"title": "Request log",
"subtitle": "Inspect alias routing, final target, and failover chain for each request.",
"count": "{{count}} requests",
"empty": "No proxied requests yet.",
"emptyHint": "Start the proxy and send a request to populate the timeline.",
"success": "Success",
"failed": "Failed",
"failover": "Failover",
"detailTitle": "Business detail",
"detailSubtitle": "This panel focuses on alias-level routing semantics.",
"alias": "Alias",
"finalRoute": "Final route",
"status": "Status",
"totalTime": "Total time",
"startedAt": "Started at",
"firstByte": "First byte",
"stream": "Stream",
"chainTitle": "Attempt chain",
"attemptLabel": "Attempt {{attempt}}",
"provider": "Provider",
"model": "Model"
},
"network": {
"title": "Network detail",
"subtitle": "Inspect URL, timing, status, headers, and params without exposing model IO content.",
"count": "{{count}} requests",
"detailTitle": "Network inspector",
"detailSubtitle": "Each attempt shows technical metadata captured around the upstream call.",
"url": "URL",
"firstByte": "TTFB",
"totalTime": "Total time",
"statusCode": "Status code",
"requestHeaders": "Client request headers",
"requestParams": "Client request params",
"responseHeaders": "Upstream response headers",
"responseBody": "Upstream response body",
"attemptTitle": "Attempt {{attempt}} · {{provider}} / {{model}}"
},
"settings": {
"title": "Settings",
"subtitle": "Persist desktop behavior, theme preference, and language preference.",
"appearanceTitle": "Appearance",
"languageTitle": "Language",
"behaviorTitle": "Desktop behavior",
"timeoutTitle": "Proxy timeouts",
"configTitle": "Config file",
"importTitle": "Import mode",
"importModeText": "Import text",
"importModeFile": "Import file",
"importText": "Config text",
"importFile": "Config file",
"importPlaceholder": "Paste full ocswitch config JSON",
"fileEmpty": "No file selected yet.",
"exportDone": "Exported config {{path}}",
"importDone": "Imported config {{path}}",
"fileLoaded": "Loaded file {{name}}",
"importEmpty": "Provide config content first.",
"aboutTitle": "About",
"aboutSubtitle": "Read-only environment details for the current desktop shell.",
"theme": "Theme",
"language": "Language",
"languageLabel": "Preferred language",
"themeSystem": "System",
"themeLight": "Light",
"themeDark": "Dark",
"languageSystem": "System",
"languageEnglish": "English",
"languageChinese": "Simplified Chinese",
"resolvedTheme": "Resolved theme",
"resolvedLanguage": "Resolved language",
"launchAtLogin": "Launch at login",
"autoStartProxy": "Start proxy on app launch",
"connectTimeout": "Connect timeout (ms)",
"responseHeaderTimeout": "Response header timeout (ms)",
"firstByteTimeout": "First byte timeout (ms)",
"requestReadTimeout": "Client request read timeout (ms)",
"streamIdleTimeout": "Stream idle timeout (ms)",
"timeoutHint": "Saved values apply to the next proxy start.",
"timeoutRunningHint": "The proxy is currently running. Saved values apply only after you restart it.",
"saveTimeouts": "Save proxy timeouts",
"minimizeToTray": "Minimize to tray / close to background",
"notifications": "Native notifications"
},
"errors": {
"invalidHeaderFormat": "Invalid header \"{{line}}\". Use KEY=VALUE.",
"invalidHeaderName": "Invalid header \"{{line}}\". Header name must not be empty."
}
}