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 — 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 localhost:1455/auth/callback?... page (it may show "unable to connect" — that\'s normal).', addStep3: 'Copy the full URL 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.", }, 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 localhost:1455/auth/callback?... \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\u5b8c\u6574 URL\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", }, } as const; export type LangCode = keyof typeof translations; export type TranslationKey = keyof (typeof translations)["en"];