| { |
| "language": { |
| "label": "Language", |
| "english": "English", |
| "chinese": "中文" |
| }, |
| "nav": { |
| "accounts": { |
| "label": "Account Management", |
| "desc": "Manage the DeepSeek account pool" |
| }, |
| "proxies": { |
| "label": "Proxy IPs", |
| "desc": "Manage outbound proxy nodes for accounts" |
| }, |
| "test": { |
| "label": "API Test", |
| "desc": "Test API connectivity and responses" |
| }, |
| "history": { |
| "label": "Responses", |
| "desc": "Browse server-side upstream response records" |
| }, |
| "import": { |
| "label": "Batch Import", |
| "desc": "Bulk import account configuration" |
| }, |
| "vercel": { |
| "label": "Vercel Sync", |
| "desc": "Sync configuration to Vercel" |
| }, |
| "settings": { |
| "label": "Settings", |
| "desc": "Edit runtime and security settings online" |
| } |
| }, |
| "sidebar": { |
| "onlineAdminConsole": "Online Admin Console", |
| "systemStatus": "System Status", |
| "statusOnline": "Online", |
| "accounts": "Accounts", |
| "keys": "Keys", |
| "signOut": "Sign out", |
| "version": "Version", |
| "updateAvailable": "Update available: {latest}" |
| }, |
| "auth": { |
| "expired": "Authentication expired. Please sign in again.", |
| "checking": "Checking authentication status..." |
| }, |
| "errors": { |
| "fetchConfig": "Failed to fetch configuration: {error}" |
| }, |
| "actions": { |
| "cancel": "Cancel", |
| "add": "Add", |
| "delete": "Delete", |
| "copy": "Copy", |
| "generate": "Generate", |
| "test": "Refresh token", |
| "testing": "Refreshing...", |
| "loading": "Loading..." |
| }, |
| "messages": { |
| "deleted": "Deleted successfully", |
| "deleteFailed": "Delete failed", |
| "failedToAdd": "Failed to add", |
| "networkError": "Network error.", |
| "requestFailed": "Request failed.", |
| "generationStopped": "Generation stopped.", |
| "invalidJson": "Invalid JSON format.", |
| "importFailed": "Import failed.", |
| "copyFailed": "Copy failed." |
| }, |
| "landing": { |
| "adminConsole": "Admin Console", |
| "apiStatus": "API Status", |
| "features": { |
| "compatibility": { |
| "title": "Full Compatibility", |
| "desc": "OpenAI & Claude format support" |
| }, |
| "loadBalancing": { |
| "title": "Load Balancing", |
| "desc": "Smart rotation with stable throughput" |
| }, |
| "reasoning": { |
| "title": "Deep Reasoning", |
| "desc": "Expose reasoning traces when enabled" |
| }, |
| "search": { |
| "title": "Web Search", |
| "desc": "Integrated native web search" |
| } |
| } |
| }, |
| "accountManager": { |
| "addKeySuccess": "API key added successfully.", |
| "updateKeySuccess": "API key updated successfully.", |
| "addAccountSuccess": "Account added successfully.", |
| "updateAccountSuccess": "Account metadata updated successfully.", |
| "requiredFields": "Password and email/mobile are required.", |
| "deleteKeyConfirm": "Are you sure you want to delete this API key?", |
| "deleteAccountConfirm": "Are you sure you want to delete this account?", |
| "invalidIdentifier": "Invalid account identifier. Operation aborted.", |
| "testAllConfirm": "Refresh all account tokens and verify login?", |
| "testAllCompleted": "Completed: {success}/{total} refreshed", |
| "testFailed": "Test failed: {error}", |
| "available": "Available", |
| "inUse": "In use", |
| "totalPool": "Total pool", |
| "accountsUnit": "accounts", |
| "threadsUnit": "threads", |
| "apiKeysTitle": "API Keys", |
| "apiKeysDesc": "Manage the API access key pool. Click the pencil icon on each row to edit name and remark.", |
| "addKey": "Add key", |
| "editKeyTitle": "Edit key", |
| "editAccountTitle": "Edit account", |
| "copied": "Copied", |
| "copyFailed": "Copy failed", |
| "copyKeyTitle": "Copy key", |
| "deleteKeyTitle": "Delete key", |
| "noApiKeys": "No API keys found.", |
| "accountsTitle": "DeepSeek Accounts", |
| "accountsDesc": "Manage the DeepSeek account pool and edit name/remark.", |
| "testAll": "Refresh all tokens", |
| "addAccount": "Add account", |
| "testingAllAccounts": "Refreshing tokens for all accounts...", |
| "sessionActive": "Session active", |
| "reauthRequired": "Retest status required", |
| "runtimeStatusUnknown": "Will be determined after sync", |
| "testStatusFailed": "Last test failed", |
| "noAccounts": "No accounts found.", |
| "modalAddKeyTitle": "Add API key", |
| "modalEditKeyTitle": "Edit API key", |
| "modalEditAccountTitle": "Edit account details", |
| "newKeyLabel": "New key value", |
| "newKeyPlaceholder": "Enter a custom API key", |
| "keyLabel": "Key value", |
| "keyReadonlyPlaceholder": "Key value cannot be changed", |
| "keyReadonlyHint": "The key value is read-only. Update the name and remark instead.", |
| "generate": "Generate", |
| "generateHint": "Click Generate to create a random key.", |
| "addKeyLoading": "Adding...", |
| "addKeyAction": "Add key", |
| "editKeyLoading": "Saving...", |
| "editKeyAction": "Save changes", |
| "editAccountHint": "Only name and remark can be changed here. The account identifier stays the same.", |
| "accountIdentifierLabel": "Account identifier", |
| "editAccountLoading": "Saving...", |
| "editAccountAction": "Save changes", |
| "modalAddAccountTitle": "Add DeepSeek account", |
| "nameOptional": "Name (optional)", |
| "namePlaceholder": "e.g. Primary Account A", |
| "remarkOptional": "Remark (optional)", |
| "remarkPlaceholder": "e.g. Team shared / test only", |
| "emailOptional": "Email (optional)", |
| "mobileOptional": "Mobile (optional)", |
| "passwordLabel": "Password", |
| "passwordPlaceholder": "Account password", |
| "addAccountLoading": "Adding...", |
| "addAccountAction": "Add account", |
| "pageInfo": "Page {current}/{total}, {count} accounts total", |
| "searchPlaceholder": "Search accounts...", |
| "searchNoResults": "No accounts match your search", |
| "sessionCount": "Sessions: {count}", |
| "deleteAllSessions": "Delete all sessions", |
| "deleteAllSessionsConfirm": "Are you sure you want to delete all sessions for this account? This action cannot be undone.", |
| "deleteAllSessionsSuccess": "Successfully deleted all sessions", |
| "accountProxyLabel": "Account proxy", |
| "proxyNone": "Direct connection", |
| "proxyBadge": "Proxy: {name}", |
| "proxyUpdateSuccess": "Account proxy updated.", |
| "envModeRiskTitle": "Environment-variable config mode detected (persistence risk)", |
| "envModeRiskDesc": "Detected DS2API_CONFIG_JSON. If DS2API_ENV_WRITEBACK is not enabled, Admin UI edits are in-memory only and may be lost after restart.", |
| "envModeWritebackPendingTitle": "Env mode + auto-persistence enabled (pending file handoff)", |
| "envModeWritebackActiveTitle": "Env mode + auto-persistence active", |
| "envModeWritebackDesc": "The app will auto-create/write the config file and transition to file-backed mode. Current persistence path: {path}" |
| }, |
| "proxyManager": { |
| "title": "Proxy IPs", |
| "desc": "Manage SOCKS egress nodes for accounts and test outbound connectivity to DeepSeek.", |
| "addProxy": "Add proxy", |
| "editProxy": "Edit proxy", |
| "deleteProxy": "Delete proxy", |
| "modalAddTitle": "Add proxy node", |
| "modalEditTitle": "Edit proxy node", |
| "modalDesc": "Supports socks5 and socks5h. Accounts will use the bound node as their outbound route.", |
| "nameLabel": "Proxy name", |
| "namePlaceholder": "Example: Hong Kong Exit A", |
| "typeLabel": "Proxy type", |
| "hostLabel": "Proxy host", |
| "hostPlaceholder": "127.0.0.1 or proxy hostname", |
| "portLabel": "Port", |
| "usernameLabel": "Username (optional)", |
| "usernamePlaceholder": "Proxy auth username", |
| "passwordLabel": "Password (optional)", |
| "passwordPlaceholder": "Proxy auth password", |
| "passwordKeepHint": "Leave blank to keep the currently stored password.", |
| "typeHelp": "socks5 resolves the target hostname locally before dialing through the proxy; socks5h forwards the hostname to the proxy for remote DNS resolution.", |
| "requiredFields": "Host and port are required.", |
| "saving": "Saving...", |
| "testing": "Testing", |
| "testAction": "Check proxy", |
| "untested": "Untested", |
| "saveAdd": "Add proxy", |
| "saveEdit": "Save changes", |
| "addSuccess": "Proxy added successfully.", |
| "updateSuccess": "Proxy updated successfully.", |
| "deleteConfirm": "Delete proxy {name}? Accounts bound to it will fall back to direct connection.", |
| "noProxies": "No proxy nodes yet.", |
| "authEnabled": "Auth enabled", |
| "testSuccessShort": "Reachable {time}ms", |
| "testFailedShort": "Test failed", |
| "totalProxies": "Total proxies", |
| "socks5hCount": "socks5h nodes", |
| "authProxyCount": "Authenticated nodes" |
| }, |
| "apiTester": { |
| "defaultMessage": "Hello, please introduce yourself in one sentence.", |
| "models": { |
| "flash": "v4 Flash (thinking on by default)", |
| "pro": "v4 Pro (thinking on by default)", |
| "flashSearch": "v4 Flash (with search)", |
| "proSearch": "v4 Pro (with search)", |
| "vision": "v4 Vision (thinking on by default)", |
| "generic": "Compatible model", |
| "noThinking": "thinking forced off" |
| }, |
| "missingApiKey": "Please provide an API key.", |
| "requestFailed": "Request failed.", |
| "networkError": "Network error: {error}", |
| "requestSuccess": "{account}: Request successful ({time}ms)", |
| "testSuccess": "{account}: Token refresh successful ({time}ms)", |
| "config": "Configuration", |
| "modelLabel": "Model", |
| "modelPickerHint": "Use the dropdown to pick a model. The list scrolls automatically.", |
| "loadingModels": "Loading models...", |
| "loadingModelsHint": "Fetching the available model list from /v1/models.", |
| "noModels": "No models available", |
| "noModelsHint": "The /v1/models endpoint did not return any usable models. Check the backend configuration or API status.", |
| "noModelsMessagePlaceholder": "No models are available right now, so the tester cannot send a request.", |
| "streamMode": "Streaming", |
| "accountSelector": "Account", |
| "autoRandom": "🤖 Auto / Random", |
| "apiKeyOptional": "API Key (optional)", |
| "apiKeyDefault": "Default: {preview}", |
| "apiKeyPlaceholder": "Enter a custom key", |
| "modeManaged": "Managed key mode (uses account pool).", |
| "modeDirect": "Direct token mode (requires a valid DeepSeek token).", |
| "attachmentAccountHint": "Attached files are bound to account {account}. Sending will reuse the same account.", |
| "fileAccountConflict": "Attached files came from different accounts. Clear them and upload again under one account.", |
| "fileAccountMismatch": "The selected account does not match the attachment account. Switch to the bound account or clear the attachments and try again.", |
| "statusError": "Error", |
| "reasoningTrace": "Reasoning Trace", |
| "generating": "Generating response...", |
| "enterMessage": "Enter a message...", |
| "adminConsoleLabel": "DeepSeek admin console" |
| }, |
| "chatHistory": { |
| "loading": "Loading conversation history...", |
| "loadFailed": "Failed to load conversation history.", |
| "retentionTitle": "Retention", |
| "retentionDesc": "The server keeps only the latest N DeepSeek upstream response records across OpenAI Chat, OpenAI Responses, Claude, and Gemini direct interfaces.", |
| "off": "OFF", |
| "refresh": "Refresh", |
| "clearAll": "Clear all", |
| "clearSuccess": "Conversation history cleared.", |
| "clearFailed": "Failed to clear conversation history.", |
| "deleteSuccess": "Conversation deleted.", |
| "deleteFailed": "Failed to delete conversation.", |
| "updateLimitFailed": "Failed to update retention limit.", |
| "disabledSuccess": "Conversation history saving disabled.", |
| "limitUpdated": "Retention limit updated to {limit}", |
| "listTitle": "History", |
| "detailTitle": "Details", |
| "viewModeList": "List mode", |
| "viewModeMerged": "Merged mode", |
| "emptyTitle": "No conversation history yet", |
| "emptyDesc": "When a supported interface talks to DeepSeek upstream and receives a response, the server saves the result here automatically.", |
| "untitled": "Untitled conversation", |
| "noPreview": "No preview available.", |
| "selectPrompt": "Select a record on the left to view details.", |
| "mergedInput": "Final message sent to DeepSeek", |
| "emptyMergedPrompt": "No merged prompt is available.", |
| "copyHistory": "Copy HISTORY", |
| "downloadHistory": "Download HISTORY", |
| "copyMerged": "Copy merged prompt", |
| "downloadMerged": "Download merged prompt", |
| "copySuccess": "Copied successfully.", |
| "copyFailed": "Copy failed.", |
| "downloadSuccess": "Downloaded successfully.", |
| "downloadFailed": "Download failed.", |
| "expand": "Expand", |
| "collapse": "Collapse", |
| "reasoningTrace": "Reasoning Trace", |
| "failedOutput": "The request failed and no assistant output is available.", |
| "emptyAssistantOutput": "No assistant output is available.", |
| "emptyUserInput": "No user input is available.", |
| "confirmClearTitle": "Clear all records?", |
| "confirmClearDesc": "This deletes every server-side conversation record and cannot be undone.", |
| "confirmClearAction": "Clear all", |
| "metaTitle": "Metadata", |
| "metaAccount": "Account", |
| "metaElapsed": "Elapsed", |
| "metaSurface": "Surface", |
| "metaModel": "Model", |
| "metaStatusCode": "Status code", |
| "metaStream": "Output mode", |
| "metaCaller": "Caller fingerprint", |
| "metaTime": "Completed at", |
| "metaUnknown": "Unknown", |
| "backToTop": "Back to top", |
| "backToBottom": "Jump to bottom", |
| "streamMode": "Streaming", |
| "nonStreamMode": "Non-streaming", |
| "status": { |
| "streaming": "Streaming", |
| "success": "Success", |
| "error": "Error", |
| "stopped": "Stopped" |
| }, |
| "role": { |
| "user": "User", |
| "assistant": "Assistant", |
| "tool": "Tool", |
| "system": "System" |
| } |
| }, |
| "batchImport": { |
| "templates": { |
| "full": { |
| "name": "Full configuration template", |
| "desc": "Loaded from config.example.json with keys, accounts, and defaults" |
| }, |
| "emailOnly": { |
| "name": "Email-only accounts", |
| "desc": "Batch import accounts using email login" |
| }, |
| "mobileOnly": { |
| "name": "Mobile-only accounts", |
| "desc": "Batch import accounts using mobile login" |
| }, |
| "keysOnly": { |
| "name": "API keys only", |
| "desc": "Add API access keys only" |
| } |
| }, |
| "enterJson": "Please provide JSON configuration content.", |
| "importSuccess": "Import successful: {keys} keys, {accounts} accounts", |
| "templateLoaded": "Template loaded: {name}", |
| "currentConfigLoaded": "Current configuration loaded.", |
| "fetchConfigFailed": "Failed to fetch configuration.", |
| "copySuccess": "Base64 configuration copied to clipboard.", |
| "quickTemplates": "Quick Templates", |
| "dataExport": "Data Export", |
| "dataExportDesc": "Copy the Base64-encoded configuration for Vercel environment variables.", |
| "copyBase64": "Copy Base64 config", |
| "copied": "Copied", |
| "variableName": "Variable name", |
| "jsonEditor": "JSON Editor", |
| "loadCurrentConfig": "Load current config", |
| "applyConfig": "Apply config", |
| "importing": "Importing...", |
| "importComplete": "Import complete", |
| "importSummary": "Imported {keys} API keys and updated {accounts} accounts." |
| }, |
| "settings": { |
| "loadFailed": "Failed to load settings.", |
| "nonJsonResponse": "Unexpected non-JSON response from server (status: {status}).", |
| "save": "Save settings", |
| "saving": "Saving...", |
| "saveSuccess": "Settings saved and hot reloaded.", |
| "saveFailed": "Failed to save settings.", |
| "securityTitle": "Security", |
| "jwtExpireHours": "JWT expiry (hours)", |
| "newPassword": "New admin password", |
| "newPasswordPlaceholder": "Enter new password (min 4 chars)", |
| "updatePassword": "Update password", |
| "updating": "Updating...", |
| "passwordTooShort": "Password must be at least 4 characters.", |
| "passwordUpdated": "Password updated. Please sign in again.", |
| "passwordUpdateFailed": "Failed to update password.", |
| "runtimeTitle": "Runtime", |
| "accountMaxInflight": "Per-account max inflight", |
| "accountMaxQueue": "Account max queue size", |
| "globalMaxInflight": "Global max inflight", |
| "tokenRefreshIntervalHours": "Managed token refresh interval (hours)", |
| "behaviorTitle": "Behavior", |
| "responsesTTL": "Responses store TTL (seconds)", |
| "embeddingsProvider": "Embeddings provider", |
| "thinkingInjectionEnabled": "Thinking format injection", |
| "thinkingInjectionDesc": "Append a structured <think> checklist to the latest user message before prompt assembly.", |
| "thinkingInjectionPrompt": "Thinking format prompt", |
| "thinkingInjectionPromptHelp": "Leave empty to use the built-in default prompt shown as the input placeholder.", |
| "currentInputFileTitle": "Independent Split", |
| "currentInputFileEnabled": "Independent split (by size)", |
| "currentInputFileDesc": "Enabled by default. Once the character threshold is reached, upload the full context as a DS2API_HISTORY.txt context file.", |
| "currentInputFileMinChars": "Current input threshold (characters)", |
| "currentInputFileHelp": "Default is 0, which uses independent split for any non-empty input.", |
| "modelTitle": "Model mapping", |
| "modelAliases": "Global model aliases (JSON)", |
| "autoDeleteTitle": "Session Cleanup Policy", |
| "autoDeleteDesc": "Choose how DeepSeek remote chat records are cleaned up after each request completes.", |
| "autoDeleteMode": "Deletion mode", |
| "autoDeleteNone": "Do not delete", |
| "autoDeleteSingle": "Delete current session", |
| "autoDeleteAll": "Delete all sessions", |
| "autoDeleteNoneDesc": "Keep the remote session after the request completes.", |
| "autoDeleteSingleDesc": "Delete only the remote session created by this request.", |
| "autoDeleteAllDesc": "Delete every remote session for the account after the request completes.", |
| "autoDeleteWarning": "This mode deletes remote chat records. Use with caution.", |
| "backupTitle": "Backup & Restore", |
| "loadExport": "Load current export", |
| "downloadExport": "Download backup file", |
| "importModeMerge": "Merge import (default)", |
| "importModeReplace": "Replace all import", |
| "chooseImportFile": "Choose import file", |
| "importNow": "Import now", |
| "importing": "Importing...", |
| "importPlaceholder": "Paste config JSON to import", |
| "importEmpty": "Please input import JSON.", |
| "importInvalidJson": "Import JSON is invalid.", |
| "importFailed": "Import failed.", |
| "importSuccess": "Config imported (mode: {mode}).", |
| "importFileLoaded": "Import file content loaded.", |
| "importFileReadFailed": "Failed to read import file.", |
| "exportFailed": "Export failed.", |
| "exportLoaded": "Current export loaded.", |
| "exportDownloaded": "Backup file download started.", |
| "exportJson": "Export JSON", |
| "invalidJsonField": "{field} is not a valid JSON object.", |
| "defaultPasswordWarning": "You are using the default admin password \"admin\". Please change it.", |
| "vercelSyncHint": "Configuration changed. For Vercel deployments, sync manually in Vercel Sync and redeploy.", |
| "autoFetchPaused": "Auto loading paused after {count} failures: {error}", |
| "retryLoad": "Retry now" |
| }, |
| "login": { |
| "welcome": "Welcome back", |
| "subtitle": "Enter your admin key to continue", |
| "adminKeyLabel": "Admin key", |
| "adminKeyPlaceholder": "Enter your admin key...", |
| "rememberSession": "Remember this session", |
| "signIn": "Sign in", |
| "secureConnection": "Secure connection", |
| "adminPortal": "DS2API admin portal", |
| "signInFailed": "Sign-in failed.", |
| "networkError": "Network error: {error}" |
| }, |
| "vercel": { |
| "tokenRequired": "Vercel access token is required.", |
| "projectRequired": "Project ID is required.", |
| "syncFailed": "Sync failed.", |
| "networkError": "Network error.", |
| "title": "Vercel Deployment", |
| "description": "Sync the current keys and accounts directly to Vercel environment variables.", |
| "tokenLabel": "Vercel Access Token", |
| "getToken": "Get token", |
| "tokenPlaceholderPreconfig": "Using preconfigured token", |
| "tokenPlaceholder": "Enter Vercel access token", |
| "projectIdLabel": "Project ID", |
| "projectIdHint": "Find it in Project Settings → General.", |
| "teamIdLabel": "Team ID", |
| "optional": "optional", |
| "saveCredentials": "Remember Vercel credentials", |
| "saveCredentialsHint": "Save the token, project ID, and team ID for the next sync.", |
| "syncing": "Syncing...", |
| "syncRedeploy": "Sync & redeploy", |
| "redeployHint": "This triggers a Vercel redeploy and usually takes 30–60 seconds.", |
| "syncSucceeded": "Sync succeeded", |
| "syncFailedLabel": "Sync failed", |
| "openDeployment": "Open deployment", |
| "statusSynced": "Synced", |
| "statusNotSynced": "Not synced", |
| "statusNeverSynced": "Never synced", |
| "lastSyncTime": "Last sync: {time}", |
| "draftDiffers": "Frontend draft differs from env config. Click Sync & redeploy.", |
| "pollPaused": "Status polling paused after {count} failures.", |
| "manualRefresh": "Refresh manually", |
| "howItWorks": "How it works", |
| "steps": { |
| "one": "The current configuration (keys and accounts) is exported as JSON.", |
| "two": "The JSON is Base64-encoded for safe formatting.", |
| "three": "Update the env var in Vercel:", |
| "four": "Trigger a redeploy to apply the updated environment variables." |
| } |
| } |
| } |
|
|