Spaces:
Paused
Paused
| export const translations = { | |
| en: { | |
| serverOnline: "Server Online", | |
| addAccount: "Add Account", | |
| toggleTheme: "Toggle theme", | |
| connectedAccounts: "Connected Accounts", | |
| connectedAccountsDesc: | |
| "Manage your AI model proxy services and usage limits.", | |
| loadingAccounts: "Loading accounts...", | |
| noAccounts: 'No accounts connected. Click "Add Account" to get started.', | |
| deleteAccount: "Delete account", | |
| removeConfirm: "Remove this account?", | |
| accountAdded: "Account added successfully!", | |
| active: "Active", | |
| expired: "Expired", | |
| rateLimited: "Rate Limited", | |
| refreshing: "Refreshing", | |
| disabled: "Disabled", | |
| freeTier: "Free Tier", | |
| totalRequests: "Total Requests", | |
| tokensUsed: "Tokens Used", | |
| windowRequests: "Requests (Window)", | |
| windowTokens: "Tokens (Window)", | |
| totalAll: "Total", | |
| windowLabel: "window", | |
| rateLimit: "Rate Limit", | |
| limitReached: "Limit Reached", | |
| used: "Used", | |
| ok: "OK", | |
| resetsAt: "Resets at", | |
| apiConfig: "API Configuration", | |
| baseProxyUrl: "Base Proxy URL", | |
| defaultModel: "Default Model", | |
| yourApiKey: "Your API Key", | |
| apiKeyHint: | |
| "Use this key to authenticate requests to the proxy. Do not share it.", | |
| copyUrl: "Copy URL", | |
| copyApiKey: "Copy API Key", | |
| anthropicSetup: "Anthropic SDK Setup", | |
| anthropicCopyAllHint: "Copy all env vars \u2014 paste into terminal or .env file", | |
| integrationExamples: "Integration Examples", | |
| copy: "Copy", | |
| addStep1: | |
| 'Complete the login in the popup window (if blocked, right-click "Add Account" and open the link in a new tab).', | |
| addStep2: | |
| 'After login, the browser will redirect to a <code class="text-xs bg-slate-100 dark:bg-bg-dark px-1.5 py-0.5 rounded">localhost:1455/auth/callback?...</code> page (it may show "unable to connect" \u2014 that\'s normal).', | |
| addStep3: | |
| 'Copy the <strong class="text-slate-700 dark:text-text-main">full URL</strong> from the address bar and paste it below.', | |
| pasteCallback: "Paste callback URL here", | |
| submit: "Submit", | |
| submitting: "Submitting...", | |
| pleasePassCallback: "Please paste the callback URL", | |
| failedStartLogin: "Failed to start login", | |
| failedExchangeCode: "Failed to exchange code", | |
| failedDeleteAccount: "Failed to delete account.", | |
| networkError: "Network error: ", | |
| copied: "Copied!", | |
| copyFailed: "Failed", | |
| refresh: "Refresh", | |
| updatedAt: "Updated at", | |
| footer: "\u00a9 2025 Codex Proxy. All rights reserved.", | |
| starOnGithub: "Star", | |
| checkForUpdates: "Check for Updates", | |
| checkingUpdates: "Checking...", | |
| upToDate: "Up to date", | |
| updateApplied: "Update complete, please restart server", | |
| fingerprintUpdated: "Fingerprint updated", | |
| fingerprintUpdating: "Updating fingerprint...", | |
| proxyUpdating: "Updating proxy...", | |
| proxyBehind: "behind", | |
| dockerUpdateHint: "Run: docker compose up -d --build", | |
| managedByDesktop: "Managed by desktop app", | |
| lastChecked: "Last checked", | |
| never: "never", | |
| commits: "commits", | |
| proxyPool: "Proxy Pool", | |
| proxyPoolDesc: "Manage upstream proxies for different accounts.", | |
| addProxy: "Add Proxy", | |
| proxyName: "Name", | |
| proxyUrl: "Proxy URL", | |
| proxyProtocol: "Protocol", | |
| proxyHost: "Host", | |
| proxyPort: "Port", | |
| proxyUsername: "Username", | |
| proxyPassword: "Password", | |
| proxyOptional: "optional", | |
| noProxies: "No proxies configured. Add one to route accounts through different IPs.", | |
| proxyActive: "Active", | |
| proxyUnreachable: "Unreachable", | |
| proxyDisabled: "Disabled", | |
| exitIp: "Exit IP", | |
| latency: "Latency", | |
| checkHealth: "Check", | |
| checkAllHealth: "Check All", | |
| enableProxy: "Enable", | |
| disableProxy: "Disable", | |
| deleteProxy: "Delete proxy", | |
| removeProxyConfirm: "Remove this proxy?", | |
| proxyAssignment: "Proxy", | |
| globalDefault: "Global Default", | |
| directNoProxy: "Direct (No Proxy)", | |
| autoRoundRobin: "Auto (Round-Robin)", | |
| healthInterval: "Health check interval", | |
| minutes: "min", | |
| }, | |
| zh: { | |
| serverOnline: "\u670d\u52a1\u8fd0\u884c\u4e2d", | |
| addAccount: "\u6dfb\u52a0\u8d26\u6237", | |
| toggleTheme: "\u5207\u6362\u4e3b\u9898", | |
| connectedAccounts: "\u5df2\u8fde\u63a5\u8d26\u6237", | |
| connectedAccountsDesc: | |
| "\u7ba1\u7406\u4f60\u7684 AI \u6a21\u578b\u4ee3\u7406\u670d\u52a1\u548c\u7528\u91cf\u9650\u5236\u3002", | |
| loadingAccounts: "\u6b63\u5728\u52a0\u8f7d\u8d26\u6237...", | |
| noAccounts: | |
| "\u6682\u65e0\u5df2\u8fde\u63a5\u7684\u8d26\u6237\u3002\u70b9\u51fb\u300c\u6dfb\u52a0\u8d26\u6237\u300d\u5f00\u59cb\u4f7f\u7528\u3002", | |
| deleteAccount: "\u5220\u9664\u8d26\u6237", | |
| removeConfirm: | |
| "\u786e\u5b9a\u8981\u79fb\u9664\u6b64\u8d26\u6237\u5417\uff1f", | |
| accountAdded: "\u8d26\u6237\u6dfb\u52a0\u6210\u529f\uff01", | |
| active: "\u6d3b\u8dc3", | |
| expired: "\u5df2\u8fc7\u671f", | |
| rateLimited: "\u5df2\u9650\u901f", | |
| refreshing: "\u5237\u65b0\u4e2d", | |
| disabled: "\u5df2\u7981\u7528", | |
| freeTier: "\u514d\u8d39\u7248", | |
| totalRequests: "\u603b\u8bf7\u6c42\u6570", | |
| tokensUsed: "Token \u7528\u91cf", | |
| windowRequests: "\u8bf7\u6c42\u6570\uff08\u7a97\u53e3\uff09", | |
| windowTokens: "Token\uff08\u7a97\u53e3\uff09", | |
| totalAll: "\u7d2f\u8ba1", | |
| windowLabel: "\u7a97\u53e3", | |
| rateLimit: "\u901f\u7387\u9650\u5236", | |
| limitReached: "\u5df2\u8fbe\u4e0a\u9650", | |
| used: "\u5df2\u4f7f\u7528", | |
| ok: "\u6b63\u5e38", | |
| resetsAt: "\u91cd\u7f6e\u65f6\u95f4", | |
| apiConfig: "API \u914d\u7f6e", | |
| baseProxyUrl: "\u4ee3\u7406 URL", | |
| defaultModel: "\u9ed8\u8ba4\u6a21\u578b", | |
| yourApiKey: "API \u5bc6\u94a5", | |
| apiKeyHint: | |
| "\u4f7f\u7528\u6b64\u5bc6\u94a5\u5411\u4ee3\u7406\u53d1\u9001\u8ba4\u8bc1\u8bf7\u6c42\uff0c\u8bf7\u52ff\u6cc4\u9732\u3002", | |
| copyUrl: "\u590d\u5236 URL", | |
| copyApiKey: "\u590d\u5236 API \u5bc6\u94a5", | |
| anthropicSetup: "Anthropic SDK \u914d\u7f6e", | |
| anthropicCopyAllHint: "\u590d\u5236\u6240\u6709\u73af\u5883\u53d8\u91cf \u2014 \u7c98\u8d34\u5230\u7ec8\u7aef\u6216 .env \u6587\u4ef6", | |
| integrationExamples: "\u96c6\u6210\u793a\u4f8b", | |
| copy: "\u590d\u5236", | |
| addStep1: | |
| "\u5728\u5f39\u51fa\u7684\u7a97\u53e3\u4e2d\u5b8c\u6210\u767b\u5f55\uff08\u5982\u5f39\u7a97\u88ab\u62e6\u622a\uff0c\u53f3\u952e\u300c\u6dfb\u52a0\u8d26\u6237\u300d\u6309\u94ae\u5728\u65b0\u6807\u7b7e\u9875\u6253\u5f00\u94fe\u63a5\uff09\u3002", | |
| addStep2: | |
| '\u767b\u5f55\u6210\u529f\u540e\uff0c\u6d4f\u89c8\u5668\u4f1a\u8df3\u8f6c\u5230 <code class="text-xs bg-slate-100 dark:bg-bg-dark px-1.5 py-0.5 rounded">localhost:1455/auth/callback?...</code> \u9875\u9762\uff08\u53ef\u80fd\u663e\u793a\u201c\u65e0\u6cd5\u8bbf\u95ee\u201d\u2014\u2014\u8fd9\u662f\u6b63\u5e38\u7684\uff09\u3002', | |
| addStep3: | |
| '\u590d\u5236\u5730\u5740\u680f\u4e2d\u7684<strong class="text-slate-700 dark:text-text-main">\u5b8c\u6574 URL</strong>\uff0c\u7c98\u8d34\u5230\u4e0b\u65b9\u8f93\u5165\u6846\u3002', | |
| pasteCallback: "\u7c98\u8d34\u56de\u8c03 URL", | |
| submit: "\u63d0\u4ea4", | |
| submitting: "\u63d0\u4ea4\u4e2d...", | |
| pleasePassCallback: "\u8bf7\u7c98\u8d34\u56de\u8c03 URL", | |
| failedStartLogin: "\u767b\u5f55\u542f\u52a8\u5931\u8d25", | |
| failedExchangeCode: "\u6388\u6743\u7801\u4ea4\u6362\u5931\u8d25", | |
| failedDeleteAccount: "\u5220\u9664\u8d26\u6237\u5931\u8d25\u3002", | |
| networkError: "\u7f51\u7edc\u9519\u8bef\uff1a", | |
| copied: "\u5df2\u590d\u5236\uff01", | |
| copyFailed: "\u5931\u8d25", | |
| refresh: "\u5237\u65b0", | |
| updatedAt: "\u66f4\u65b0\u4e8e", | |
| footer: | |
| "\u00a9 2025 Codex Proxy\u3002\u4fdd\u7559\u6240\u6709\u6743\u5229\u3002", | |
| starOnGithub: "\u6536\u85cf", | |
| checkForUpdates: "\u68c0\u67e5\u66f4\u65b0", | |
| checkingUpdates: "\u68c0\u67e5\u4e2d...", | |
| upToDate: "\u5df2\u662f\u6700\u65b0", | |
| updateApplied: "\u66f4\u65b0\u5b8c\u6210\uff0c\u8bf7\u91cd\u542f\u670d\u52a1", | |
| fingerprintUpdated: "\u6307\u7eb9\u5df2\u66f4\u65b0", | |
| fingerprintUpdating: "\u6307\u7eb9\u66f4\u65b0\u4e2d...", | |
| proxyUpdating: "\u6b63\u5728\u66f4\u65b0\u4ee3\u7406...", | |
| proxyBehind: "\u843d\u540e", | |
| dockerUpdateHint: "\u8bf7\u6267\u884c: docker compose up -d --build", | |
| managedByDesktop: "\u7531\u684c\u9762\u5e94\u7528\u7ba1\u7406", | |
| lastChecked: "\u4e0a\u6b21\u68c0\u67e5", | |
| never: "\u4ece\u672a", | |
| commits: "\u4e2a\u63d0\u4ea4", | |
| proxyPool: "\u4ee3\u7406\u6c60", | |
| proxyPoolDesc: "\u7ba1\u7406\u4e0d\u540c\u8d26\u53f7\u7684\u4e0a\u6e38\u4ee3\u7406\u3002", | |
| addProxy: "\u6dfb\u52a0\u4ee3\u7406", | |
| proxyName: "\u540d\u79f0", | |
| proxyUrl: "\u4ee3\u7406 URL", | |
| proxyProtocol: "\u534f\u8bae", | |
| proxyHost: "\u4e3b\u673a", | |
| proxyPort: "\u7aef\u53e3", | |
| proxyUsername: "\u7528\u6237\u540d", | |
| proxyPassword: "\u5bc6\u7801", | |
| proxyOptional: "\u53ef\u9009", | |
| noProxies: "\u672a\u914d\u7f6e\u4ee3\u7406\u3002\u6dfb\u52a0\u4e00\u4e2a\u4ee5\u901a\u8fc7\u4e0d\u540c IP \u8def\u7531\u8d26\u53f7\u3002", | |
| proxyActive: "\u6d3b\u8dc3", | |
| proxyUnreachable: "\u4e0d\u53ef\u8fbe", | |
| proxyDisabled: "\u5df2\u7981\u7528", | |
| exitIp: "\u51fa\u53e3 IP", | |
| latency: "\u5ef6\u8fdf", | |
| checkHealth: "\u68c0\u67e5", | |
| checkAllHealth: "\u68c0\u67e5\u5168\u90e8", | |
| enableProxy: "\u542f\u7528", | |
| disableProxy: "\u7981\u7528", | |
| deleteProxy: "\u5220\u9664\u4ee3\u7406", | |
| removeProxyConfirm: "\u786e\u5b9a\u8981\u79fb\u9664\u6b64\u4ee3\u7406\u5417\uff1f", | |
| proxyAssignment: "\u4ee3\u7406", | |
| globalDefault: "\u5168\u5c40\u9ed8\u8ba4", | |
| directNoProxy: "\u76f4\u8fde\uff08\u65e0\u4ee3\u7406\uff09", | |
| autoRoundRobin: "\u81ea\u52a8\u8f6e\u8f6c", | |
| healthInterval: "\u5065\u5eb7\u68c0\u67e5\u95f4\u9694", | |
| minutes: "\u5206\u949f", | |
| }, | |
| } as const; | |
| export type LangCode = keyof typeof translations; | |
| export type TranslationKey = keyof (typeof translations)["en"]; | |