diff --git a/web/admin-spa/src/i18n/locales/en.js b/web/admin-spa/src/i18n/locales/en.js index 7a987fd8..b654125a 100644 --- a/web/admin-spa/src/i18n/locales/en.js +++ b/web/admin-spa/src/i18n/locales/en.js @@ -62,6 +62,30 @@ export default { info: 'Information' } }, + errors: { + loadDashboardFailed: 'Failed to load dashboard data', + loadUsageTrendFailed: 'Failed to load usage trend', + loadModelStatsFailed: 'Failed to load model statistics', + loadApiKeysTrendFailed: 'Failed to load API Keys trend', + createClaudeConsoleAccountFailed: 'Failed to create Claude Console account', + createAzureOpenAIAccountFailed: 'Failed to create Azure OpenAI account', + updateClaudeConsoleAccountFailed: 'Failed to update Claude Console account', + updateAzureOpenAIAccountFailed: 'Failed to update Azure OpenAI account', + generateSetupTokenUrlFailed: 'Failed to generate Setup Token URL', + exchangeSetupTokenFailed: 'Failed to exchange Setup Token authorization code', + allApiKeysInvalid: 'All API Keys are invalid', + loadOemSettingsFailed: 'Failed to load OEM settings', + getApiKeyStatsFailed: 'Failed to get API Key statistics', + getTagsFailed: 'Failed to get tags', + requestFailed: 'Request failed: {status}', + loadSupportedClientsFailed: 'Failed to load supported clients' + }, + system: { + status: { + normal: 'Normal', + abnormal: 'Abnormal' + } + }, confirmDialog: { confirm: 'Confirm', cancel: 'Cancel' @@ -131,10 +155,6 @@ export default { minutesAgo: '{minutes} minutes ago', hoursAgo: '{hours} hours ago', daysAgo: '{days} days ago' - }, - errors: { - requestFailed: 'Request failed: {status}', - loadSupportedClientsFailed: 'Failed to load supported clients' } }, language: { @@ -221,7 +241,6 @@ export default { apiKeyInfo: 'API Key Information', queryKeysCount: 'Query Keys Count', activeKeysCount: 'Active Keys Count', - invalidKeysCount: 'Invalid Keys Count', totalRequests: 'Total Requests', totalTokens: 'Total Tokens', totalCost: 'Total Cost', @@ -237,7 +256,6 @@ export default { modelUsageStats: 'Model Usage Statistics', loadingModelStats: 'Loading model statistics...', requestCount: ' requests', - totalCost: 'Total Cost', inputTokens: 'Input Tokens', outputTokens: 'Output Tokens', cacheCreateTokens: 'Cache Create', @@ -2436,12 +2454,6 @@ export default { // Manual Token Input Section manualTokenInput: 'Manual Token Input', - manualTokenClaudeDescription: - 'Please enter valid Claude Access Token. If you have Refresh Token, it is recommended to fill both for automatic refresh support.', - manualTokenGeminiDescription: - 'Please enter valid Gemini Access Token. If you have Refresh Token, it is recommended to fill both for automatic refresh support.', - manualTokenOpenAIDescription: - 'Please enter valid OpenAI Access Token. If you have Refresh Token, it is recommended to fill both for automatic refresh support.', getAccessTokenMethod: 'Methods to get Access Token:', claudeCredentialsPath: 'Please get from logged-in Claude Code machine', geminiCredentialsPath: 'Please get from logged-in Gemini CLI machine', @@ -2451,18 +2463,11 @@ export default { 'credentials from file, do not use keys from Claude official API Keys page.', refreshTokenWarning: '💡 If Refresh Token is not filled, Token needs manual update after expiration.', - accessTokenOptional: 'Access Token (Optional)', - accessTokenOptionalPlaceholder: - 'Optional: If not filled, system will automatically obtain through Refresh Token...', accessTokenOptionalInfo: 'Access Token is optional. If not provided, system will automatically obtain through Refresh Token.', - accessTokenRequired: 'Access Token *', accessTokenRequiredPlaceholder: 'Please enter Access Token...', - refreshTokenRequired: 'Refresh Token *', - refreshTokenRequiredPlaceholder: 'Please enter Refresh Token (required)...', refreshTokenRequiredInfo: 'System will use Refresh Token to automatically obtain Access Token and user information', - refreshTokenOptional: 'Refresh Token (Optional)', refreshTokenOptionalPlaceholder: 'Please enter Refresh Token...', // Priority Settings @@ -2471,35 +2476,11 @@ export default { prioritySchedulingTitle: 'Scheduling Priority (1-100)', priorityEditPlaceholder: 'Lower number = higher priority', - // Gemini Project ID - projectIdOptional: 'Project ID (Optional)', - projectIdPlaceholder: 'e.g., verdant-wares-464411-k9', - projectIdDescription: 'Google Cloud/Workspace accounts may require Project ID', - // Claude Subscription Type and Advanced Options - subscriptionType: 'Subscription Type', claudeMaxSubscription: 'Claude Max', claudeProSubscription: 'Claude Pro', - claudeProLimitation: 'Pro accounts do not support Claude Opus 4 model', - autoStopOnWarning: 'Auto-stop scheduling when approaching 5-hour limit', - autoStopOnWarningDescription: - 'When system detects account approaching 5-hour usage limit, automatically pause scheduling for this account. Will resume automatically when entering new time window.', - useUnifiedUserAgent: 'Use unified Claude Code version', - useUnifiedUserAgentDescription: - 'When enabled, will use unified User-Agent captured from real Claude Code client, improving compatibility', - currentUnifiedVersion: 'Current unified version:', - clearCache: 'Clear Cache', - clearing: 'Clearing...', - waitingForCapture: 'Waiting to capture User-Agent from Claude Code client', - captureHint: - '💡 Hint: If unable to capture for long time, please confirm Claude Code client is using this account, or contact developer to check if User-Agent format has changed', - useUnifiedClientId: 'Use unified client identifier', - useUnifiedClientIdDescription: - 'When enabled, will use fixed client identifier, making all requests appear to come from same client, reducing characteristics', clientIdLabel: 'Client Identifier ID', regenerateClientId: 'Regenerate', - clientIdDescription: - 'This ID will replace user_id client part in requests, preserving session part for sticky sessions', // Edit Mode Fields accountNameEdit: 'Account Name', @@ -2507,7 +2488,6 @@ export default { descriptionOptionalEdit: 'Description (Optional)', descriptionOptionalEditPlaceholder: 'Account usage description...', accountTypeEdit: 'Account Type', - selectGroupRequired: 'Select Group *', noAvailableGroups: 'No available groups', membersCount: ' members', createNewGroup: 'Create New Group', @@ -2516,32 +2496,14 @@ export default { bedrockCredentials: 'Credentials Configuration', bedrockCredentialsDescription: 'Please fill in AWS access credentials for calling Amazon Bedrock service.', - awsAccessKeyId: 'AWS Access Key ID *', - awsAccessKeyIdPlaceholder: 'Please enter AWS Access Key ID...', - awsSecretAccessKey: 'AWS Secret Access Key *', - awsSecretAccessKeyPlaceholder: 'Please enter AWS Secret Access Key...', - sessionTokenOptional: 'Session Token (Optional)', - sessionTokenOptionalPlaceholder: 'Session token for temporary credentials...', - sessionTokenDescription: - 'Only required when using temporary credentials (like STS generated credentials)', - awsRegion: 'AWS Region *', - awsRegionPlaceholder: 'Select AWS region...', bedrockModelConfig: 'Model Configuration', defaultModelLabel: 'Default Model', - defaultModelPlaceholder: 'e.g., anthropic.claude-3-5-sonnet-20240620-v1:0', - defaultModelDescription: - 'Leave blank to use system default model. Supports inference profile ID or ARN', smallFastModelLabel: 'Small Fast Model', - smallFastModelPlaceholder: 'e.g., anthropic.claude-3-haiku-20240307-v1:0', - smallFastModelDescription: 'Fast model for simple tasks, supports inference profile ID or ARN', // Azure OpenAI Configuration azureOpenAIConfig: 'Azure OpenAI Configuration', azureOpenAIDescription: 'Please configure connection information and deployment details for Azure OpenAI service.', - azureEndpoint: 'Azure Endpoint *', - azureEndpointPlaceholder: 'e.g., https://your-resource.openai.azure.com/', - azureEndpointDescription: 'Endpoint URL for Azure OpenAI service', azureApiKey: 'API Key *', azureApiKeyPlaceholder: 'Please enter Azure OpenAI API Key...', azureApiVersion: 'API Version', @@ -2565,7 +2527,6 @@ export default { modelMappingFromPlaceholder: 'e.g., claude-3-5-sonnet-20241022', modelMappingTo: 'Actual Model', modelMappingToPlaceholder: 'e.g., claude-3-5-sonnet-latest', - addModelMapping: 'Add Mapping', removeMapping: 'Remove', presetMappings: 'Preset Mappings', modelMappingExample: 'Example: claude-3-5-sonnet-20241022 → claude-3-5-sonnet-latest', @@ -2579,11 +2540,7 @@ export default { setupTokenStep1Description: 'System will generate a dedicated authorization link for obtaining temporary authorization code.', setupTokenStep2: 'Step 2: Complete Authorization', - setupTokenStep2Description: - 'Open authorization link in new window, log in with your Claude account and complete authorization.', setupTokenStep3: 'Step 3: Enter Authorization Code', - setupTokenStep3Description: - 'After successful authorization, system will display authorization code, please copy and paste into input box below.', setupTokenUrlGenerated: 'Authorization link generated', setupTokenOpenInBrowser: 'Open in browser', setupTokenCopyLink: 'Copy link', @@ -2611,16 +2568,9 @@ export default { // Rate Limiting and Quota Management rateLimitSettings: 'Rate Limit Settings', - enableRateLimit: 'Enable rate limiting', - rateLimitDuration: 'Rate limit duration (seconds)', rateLimitDurationPlaceholder: 'e.g., 60', - rateLimitDescription: - 'When enabled, will limit request frequency to prevent account being blocked', quotaManagement: 'Quota Management', - dailyQuotaLabel: 'Daily quota limit', - dailyQuotaPlaceholder: '0 means unlimited', quotaResetTimeLabel: 'Quota reset time', - quotaResetTimePlaceholder: 'e.g., 00:00', quotaResetDescription: 'Time point when daily quota resets', currentDailyUsage: 'Today used', @@ -2628,7 +2578,6 @@ export default { advancedSettings: 'Advanced Settings', customUserAgent: 'Custom User-Agent', customUserAgentPlaceholder: 'Leave blank to use default User-Agent...', - userAgentDescription: 'User-Agent identifier for requests', // General Hints and Status notSet: 'Not set', @@ -2669,7 +2618,6 @@ export default { 'Tip: If your account is a regular personal account (not bound to Google Cloud), please leave this field empty.', // AWS Region Reference - awsRegionReference: 'Common AWS regions reference:', awsRegionEastUS: 'us-east-1 (US East)', awsRegionWestUS: 'us-west-2 (US West)', awsRegionEuropeIreland: 'eu-west-1 (Europe Ireland)', @@ -2689,7 +2637,6 @@ export default { azureModelSelectionDesc: 'Select model types supported by this deployment', // Rate Limiting - rateLimitMechanism: 'Rate limiting mechanism', enableRateLimitMechanism: 'Enable rate limiting mechanism', rateLimitDescription2: 'When enabled, will pause scheduling for some time when account returns 429 error', @@ -2699,34 +2646,22 @@ export default { // Claude Console Specific Fields claudeConsoleFields: 'Claude Console specific fields', - quotaManagement: 'Quota management', modelMappingTable: 'Model mapping table', modelMappingTableOptional: 'Model mapping table (optional)', - addModelMapping: 'Add model mapping', - - // Claude Subscription Type - subscriptionType: 'Subscription type', // Setup Token Auth - setupTokenAuth: 'Setup Token authorization', claudeSetupTokenAuth: 'Claude Setup Token authorization', setupTokenAuthSteps: 'Please follow these steps to complete Claude account authorization through Setup Token:', generateSetupTokenLink: 'Generate Setup Token auth link', - generating: 'Generating...', // Buttons and actions - verifying: 'Verifying...', completeAuth: 'Complete authorization', - updating: 'Updating...', - update: 'Update', // Error messages generateSetupTokenFailed: 'Failed to generate Setup Token auth link', - copyFailed: 'Copy failed, please copy manually', setupTokenAuthFailed: 'Setup Token authorization failed, please check if the authorization code is correct', - accountCreationFailed: 'Account creation failed', accountCreationError: 'Account creation failed:', // Page structure comments @@ -2741,29 +2676,18 @@ export default { // Validation messages nameRequired: 'Please enter account name', - apiUrlRequired: 'Please enter API URL', rateLimitDefault60: 'Default 60 minutes', rateLimitPauseDescription: 'Time to pause scheduling after account is rate limited (minutes)', - apiUrlPlaceholder: 'e.g., https://api.example.com', - apiKeyPlaceholder: 'Please enter API Key', dailyQuotaLimit: 'Daily quota limit ($)', quotaZeroUnlimited: '0 means unlimited', - dailyQuotaDescription: 'Set daily usage quota, 0 means unlimited', - quotaResetTime: 'Quota reset time', - quotaResetTimeDescription: 'Time to automatically reset quota daily', - modelMappingDescription: - 'Leave empty to support all models without modifying requests. After configuring mapping, left model will be recognized as supported model, right is the actual model sent.', // Quota Management quotaManagementFields: 'Quota management fields', dailyQuotaLimitDollar: 'Daily quota limit ($)', - quotaZeroUnlimited: '0 means unlimited', dailyQuotaDesc: 'Set daily usage quota, 0 means unlimited', - quotaResetTime: 'Quota reset time', quotaResetTimeDesc: 'Time to automatically reset quota daily', // Model Mapping - modelMappingOptional: 'Model mapping table (optional)', modelMappingDesc: 'Leave empty to support all models without modifying requests. After configuring mapping, left model will be recognized as supported model, right is the actual model sent.', originalModelName: 'Original model name', @@ -2776,7 +2700,6 @@ export default { // Claude Subscription Type claudeSubscriptionType: 'Subscription type', - claudeProLimitation: 'Pro accounts do not support Claude Opus 4 model', // Claude Advanced Options claudeAutoStopScheduling: 'Auto-stop scheduling when approaching 5-hour limit', @@ -2807,13 +2730,10 @@ export default { setupTokenCopyTitle: 'Copy link', // Step Indicators - stepIndicator: 'Step indicator', - step1BasicInfo: 'Step 1: Basic information and proxy settings', step2OAuth: 'Step 2: OAuth authorization', step2SetupToken: 'Step 2: Setup Token authorization', // Group Selector - groupSelector: 'Group selector', multiGroupInterface: 'Multi-group interface', createNewGroupOption: 'Create new group option', @@ -2823,15 +2743,12 @@ export default { // Placeholder texts originalModelNamePlaceholder: 'Original model name', mappedModelNamePlaceholder: 'Mapped model name', - userAgentPlaceholder: 'Leave empty to pass through client User-Agent', authCodePlaceholder: 'Paste Authorization Code obtained from Claude Code auth page...', leaveEmptyNoUpdate: 'Leave empty for no update', leaveEmptyNoUpdateKey: 'Leave empty for no API Key update', leaveEmptyNoUpdateToken: 'Leave empty for no update...', // Labels and descriptions - customUserAgentOptional: 'Custom User-Agent (optional)', - clientIdLabel: 'Client ID', schedulePriorityLabel: 'Schedule Priority (1-100)', attentionLabel: 'Attention:', supportedModelsLabel: 'Supported Models', @@ -2844,19 +2761,16 @@ export default { previousStepBtn: 'Previous Step', // Descriptive texts - claudeProLimitation: 'Pro accounts do not support Claude Opus 4 model', claude5HourLimitDesc: 'Auto-stop scheduling when approaching 5-hour usage limit', claude5HourLimitExplanation: 'When system detects account approaching 5-hour usage limit, automatically pause scheduling for this account. Will resume automatically when entering new time window.', useUnifiedClaudeVersion: 'Use unified Claude Code version', unifiedVersionDesc: 'When enabled, will use unified User-Agent captured from real Claude Code client, improving compatibility', - currentUnifiedVersion: '💡 Current unified version:', waitingUserAgent: '⏳ Waiting to capture User-Agent from Claude Code client', userAgentTip: '💡 Tip: If unable to capture for a long time, please confirm that Claude Code client is using this account,', contactDeveloper: 'or contact developer to check if User-Agent format has changed', - useUnifiedClientId: 'Use unified client identifier', unifiedClientIdDesc: 'When enabled, will use fixed client identifier, making all requests appear from same client, reducing fingerprinting', clientIdReplaceDesc: @@ -2883,9 +2797,6 @@ export default { awsRegionRef: 'Common AWS regions reference:', // Error messages - apiKeyRequired: 'Please enter API Key', - refreshTokenRequired: 'Please enter Refresh Token', - accessTokenRequired: 'Please enter Access Token', copyFailedManual: 'Copy failed, please copy manually', // Form descriptions @@ -2897,9 +2808,7 @@ export default { // Basic labels apiUrlLabel: 'API URL', - apiUrlRequired: 'API URL *', apiKeyLabel: 'API Key', - apiKeyRequired: 'API Key *', // More missing keys copyLinkTooltip: 'Copy Link', diff --git a/web/admin-spa/src/i18n/locales/zh-cn.js b/web/admin-spa/src/i18n/locales/zh-cn.js index dbb9ef06..400afd70 100644 --- a/web/admin-spa/src/i18n/locales/zh-cn.js +++ b/web/admin-spa/src/i18n/locales/zh-cn.js @@ -62,6 +62,30 @@ export default { info: '信息' } }, + errors: { + loadDashboardFailed: '加载仪表板数据失败', + loadUsageTrendFailed: '加载使用趋势失败', + loadModelStatsFailed: '加载模型统计失败', + loadApiKeysTrendFailed: '加载API Keys趋势失败', + createClaudeConsoleAccountFailed: '创建Claude Console账户失败', + createAzureOpenAIAccountFailed: '创建Azure OpenAI账户失败', + updateClaudeConsoleAccountFailed: '更新Claude Console账户失败', + updateAzureOpenAIAccountFailed: '更新Azure OpenAI账户失败', + generateSetupTokenUrlFailed: '生成Setup Token URL失败', + exchangeSetupTokenFailed: '交换Setup Token授权码失败', + allApiKeysInvalid: '所有 API Key 都无效', + loadOemSettingsFailed: '加载OEM设置失败', + getApiKeyStatsFailed: '获取API Key统计失败', + getTagsFailed: '获取标签失败', + requestFailed: '请求失败: {status}', + loadSupportedClientsFailed: '加载支持的客户端失败' + }, + system: { + status: { + normal: '正常', + abnormal: '异常' + } + }, confirmDialog: { confirm: '确认', cancel: '取消' @@ -131,10 +155,6 @@ export default { minutesAgo: '{minutes}分钟前', hoursAgo: '{hours}小时前', daysAgo: '{days}天前' - }, - errors: { - requestFailed: '请求失败: {status}', - loadSupportedClientsFailed: '加载支持的客户端失败' } }, language: { @@ -145,37 +165,6 @@ export default { switch: '切换语言' }, - layout: { - tabBar: { - tabs: { - dashboard: { - name: '仪表板', - shortName: '仪表板' - }, - apiKeys: { - name: 'API Keys', - shortName: 'API' - }, - accounts: { - name: '账户管理', - shortName: '账户' - }, - userManagement: { - name: '用户管理', - shortName: '用户' - }, - tutorial: { - name: '使用教程', - shortName: '教程' - }, - settings: { - name: '系统设置', - shortName: '设置' - } - } - } - }, - header: { adminPanel: '管理后台', userMenu: '用户菜单', @@ -253,7 +242,6 @@ export default { apiKeyInfo: 'API Key 信息', queryKeysCount: '查询 Keys 数', activeKeysCount: '有效 Keys 数', - invalidKeysCount: '无效 Keys 数', totalRequests: '总请求数', totalTokens: '总 Token 数', totalCost: '总费用', @@ -269,7 +257,6 @@ export default { modelUsageStats: '模型使用统计', loadingModelStats: '加载模型统计数据中...', requestCount: '次请求', - totalCost: '总费用', inputTokens: '输入 Token', outputTokens: '输出 Token', cacheCreateTokens: '缓存创建', @@ -2420,12 +2407,6 @@ export default { // 手动 Token 输入部分 manualTokenInput: '手动输入 Token', - manualTokenClaudeDescription: - '请输入有效的 Claude Access Token。如果您有 Refresh Token,建议也一并填写以支持自动刷新。', - manualTokenGeminiDescription: - '请输入有效的 Gemini Access Token。如果您有 Refresh Token,建议也一并填写以支持自动刷新。', - manualTokenOpenAIDescription: - '请输入有效的 OpenAI Access Token。如果您有 Refresh Token,建议也一并填写以支持自动刷新。', getAccessTokenMethod: '获取 Access Token 的方法:', claudeCredentialsPath: '请从已登录 Claude Code 的机器上获取', geminiCredentialsPath: '请从已登录 Gemini CLI 的机器上获取', @@ -2433,15 +2414,9 @@ export default { '请从已登录 OpenAI 账户的机器上获取认证凭证,或通过 OAuth 授权流程获取 Access Token。', claudeCredentialsWarning: '文件中的凭证,请勿使用 Claude 官网 API Keys 页面的密钥。', refreshTokenWarning: '💡 如果未填写 Refresh Token,Token 过期后需要手动更新。', - accessTokenOptional: 'Access Token (可选)', - accessTokenOptionalPlaceholder: '可选:如果不填写,系统会自动通过 Refresh Token 获取...', accessTokenOptionalInfo: 'Access Token 可选填。如果不提供,系统会通过 Refresh Token 自动获取。', - accessTokenRequired: 'Access Token *', accessTokenRequiredPlaceholder: '请输入 Access Token...', - refreshTokenRequired: 'Refresh Token *', - refreshTokenRequiredPlaceholder: '请输入 Refresh Token(必填)...', refreshTokenRequiredInfo: '系统将使用 Refresh Token 自动获取 Access Token 和用户信息', - refreshTokenOptional: 'Refresh Token (可选)', refreshTokenOptionalPlaceholder: '请输入 Refresh Token...', // 优先级设置 @@ -2450,34 +2425,11 @@ export default { prioritySchedulingTitle: '调度优先级 (1-100)', priorityEditPlaceholder: '数字越小优先级越高', - // Gemini 项目ID - projectIdOptional: '项目 ID (可选)', - projectIdPlaceholder: '例如:verdant-wares-464411-k9', - projectIdDescription: 'Google Cloud/Workspace 账号可能需要提供项目 ID', - // Claude 订阅类型和高级选项 - subscriptionType: '订阅类型', claudeMaxSubscription: 'Claude Max', claudeProSubscription: 'Claude Pro', - claudeProLimitation: 'Pro 账号不支持 Claude Opus 4 模型', - autoStopOnWarning: '5小时使用量接近限制时自动停止调度', - autoStopOnWarningDescription: - '当系统检测到账户接近5小时使用限制时,自动暂停调度该账户。进入新的时间窗口后会自动恢复调度。', - useUnifiedUserAgent: '使用统一 Claude Code 版本', - useUnifiedUserAgentDescription: - '开启后将使用从真实 Claude Code 客户端捕获的统一 User-Agent,提高兼容性', - currentUnifiedVersion: '当前统一版本:', - clearCache: '清除缓存', - clearing: '清除中...', - waitingForCapture: '等待从 Claude Code 客户端捕获 User-Agent', - captureHint: - '💡 提示:如果长时间未能捕获,请确认有 Claude Code 客户端正在使用此账户,或联系开发者检查 User-Agent 格式是否发生变化', - useUnifiedClientId: '使用统一的客户端标识', - useUnifiedClientIdDescription: - '开启后将使用固定的客户端标识,使所有请求看起来来自同一个客户端,减少特征', clientIdLabel: '客户端标识 ID', regenerateClientId: '重新生成', - clientIdDescription: '此ID将替换请求中的user_id客户端部分,保留session部分用于粘性会话', // 编辑模式字段 accountNameEdit: '账户名称', @@ -2485,7 +2437,6 @@ export default { descriptionOptionalEdit: '描述 (可选)', descriptionOptionalEditPlaceholder: '账户用途说明...', accountTypeEdit: '账户类型', - selectGroupRequired: '选择分组 *', noAvailableGroups: '暂无可用分组', membersCount: ' 个成员', createNewGroup: '新建分组', @@ -2493,29 +2444,14 @@ export default { // AWS Bedrock 配置 bedrockCredentials: '凭证配置', bedrockCredentialsDescription: '请填写 AWS 访问凭证,用于调用 Amazon Bedrock 服务。', - awsAccessKeyId: 'AWS Access Key ID *', - awsAccessKeyIdPlaceholder: '请输入 AWS 访问密钥 ID...', - awsSecretAccessKey: 'AWS Secret Access Key *', - awsSecretAccessKeyPlaceholder: '请输入 AWS 秘密访问密钥...', - sessionTokenOptional: 'Session Token (可选)', sessionTokenOptionalPlaceholder: '临时凭证的会话令牌...', - sessionTokenDescription: '仅在使用临时凭证(如 STS 生成的凭证)时需要填写', - awsRegion: 'AWS 区域 *', - awsRegionPlaceholder: '选择 AWS 区域...', bedrockModelConfig: '模型配置', defaultModelLabel: '默认模型', - defaultModelPlaceholder: '例如:anthropic.claude-3-5-sonnet-20240620-v1:0', - defaultModelDescription: '留空将使用系统默认模型。支持 inference profile ID 或 ARN', smallFastModelLabel: '小型快速模型', - smallFastModelPlaceholder: '例如:anthropic.claude-3-haiku-20240307-v1:0', - smallFastModelDescription: '用于简单任务的快速模型,支持 inference profile ID 或 ARN', // Azure OpenAI 配置 azureOpenAIConfig: 'Azure OpenAI 配置', azureOpenAIDescription: '请配置 Azure OpenAI 服务的连接信息和部署详情。', - azureEndpoint: 'Azure Endpoint *', - azureEndpointPlaceholder: '例如:https://your-resource.openai.azure.com/', - azureEndpointDescription: 'Azure OpenAI 服务的端点 URL', azureApiKey: 'API Key *', azureApiKeyPlaceholder: '请输入 Azure OpenAI API Key...', azureApiVersion: 'API 版本', @@ -2538,7 +2474,6 @@ export default { modelMappingFromPlaceholder: '例如:claude-3-5-sonnet-20241022', modelMappingTo: '实际模型', modelMappingToPlaceholder: '例如:claude-3-5-sonnet-latest', - addModelMapping: '添加映射', removeMapping: '移除', presetMappings: '预设映射', modelMappingExample: '示例:claude-3-5-sonnet-20241022 → claude-3-5-sonnet-latest', @@ -2550,9 +2485,7 @@ export default { setupTokenStep1: '步骤 1:生成授权链接', setupTokenStep1Description: '系统将生成一个专用的授权链接,用于获取临时授权码。', setupTokenStep2: '步骤 2:完成授权', - setupTokenStep2Description: '在新窗口中打开授权链接,使用您的 Claude 账户登录并完成授权。', setupTokenStep3: '步骤 3:输入授权码', - setupTokenStep3Description: '授权成功后,系统会显示授权码,请复制并粘贴到下方输入框。', setupTokenUrlGenerated: '授权链接已生成', setupTokenOpenInBrowser: '在浏览器中打开', setupTokenCopyLink: '复制链接', @@ -2577,15 +2510,9 @@ export default { // 限流和配额管理 rateLimitSettings: '限流设置', - enableRateLimit: '启用速率限制', - rateLimitDuration: '限流时长 (秒)', rateLimitDurationPlaceholder: '例如:60', - rateLimitDescription: '启用后将限制请求频率,防止账户被封锁', quotaManagement: '配额管理', - dailyQuotaLabel: '每日配额限制', - dailyQuotaPlaceholder: '0 表示不限制', quotaResetTimeLabel: '配额重置时间', - quotaResetTimePlaceholder: '例如:00:00', quotaResetDescription: '每天配额重置的时间点', currentDailyUsage: '今日已用', @@ -2593,7 +2520,6 @@ export default { advancedSettings: '高级设置', customUserAgent: '自定义 User-Agent', customUserAgentPlaceholder: '留空使用默认 User-Agent...', - userAgentDescription: '用于请求时的 User-Agent 标识', // 通用提示和状态 notSet: '未设置', @@ -2634,7 +2560,6 @@ export default { '\u63d0示\uff1a如果您的账号是普通个人账号(未绑定 Google Cloud),请留空此字段。', // AWS 区域参考 - awsRegionReference: '常用 AWS 区域参考:', awsRegionEastUS: 'us-east-1 (美国东部)', awsRegionWestUS: 'us-west-2 (美国西部)', awsRegionEuropeIreland: 'eu-west-1 (欧洲爱尔兰)', @@ -2654,38 +2579,25 @@ export default { azureModelSelectionDesc: '选择此部署支持的模型类型', // 限流机制 - rateLimitMechanism: '限流机制', enableRateLimitMechanism: '启用限流机制', rateLimitDescription2: '启用后,当账号返回429错误时将暂停调度一段时间', // Claude Console 特定字段 claudeConsoleFields: 'Claude Console 特定字段', - quotaManagement: '额度管理', modelMappingTable: '模型映射表', modelMappingTableOptional: '模型映射表 (可选)', - addModelMapping: '添加模型映射', - - // Claude 订阅类型 - subscriptionType: '订阅类型', // Setup Token 授权 - setupTokenAuth: 'Setup Token 授权', claudeSetupTokenAuth: 'Claude Setup Token 授权', setupTokenAuthSteps: '请按照以下步骤通过 Setup Token 完成 Claude 账户的授权:', generateSetupTokenLink: '生成 Setup Token 授权链接', - generating: '生成中...', // 按钮和操作 - verifying: '验证中...', completeAuth: '完成授权', - updating: '更新中...', - update: '更新', // 错误消息 generateSetupTokenFailed: '生成Setup Token授权链接失败', - copyFailed: '复制失败,请手动复制', setupTokenAuthFailed: 'Setup Token授权失败,请检查授权码是否正确', - accountCreationFailed: '账户创建失败', accountCreationError: '账户创建失败:', // 页面结构注释 @@ -2700,18 +2612,10 @@ export default { // 验证消息 nameRequired: '请填写账户名称', - apiUrlRequired: '请填写 API URL', rateLimitDefault60: '默认60分钟', rateLimitPauseDescription: '账号被限流后暂停调度的时间(分钟)', - apiUrlPlaceholder: '例如:https://api.example.com', - apiKeyPlaceholder: '请输入API Key', dailyQuotaLimit: '每日额度限制 ($)', quotaZeroUnlimited: '0 表示不限制', - dailyQuotaDescription: '设置每日使用额度,0 表示不限制', - quotaResetTime: '额度重置时间', - quotaResetTimeDescription: '每日自动重置额度的时间', - modelMappingDescription: - '留空表示支持所有模型且不修改请求。配置映射后,左侧模型会被识别为支持的模型,右侧是实际发送的模型。', rateLimitDurationMinutes: '限流时间 (分钟)', rateLimitDefaultMinutes: '默认60分钟', rateLimitPauseDesc: '账号被限流后暂停调度的时间(分钟)', @@ -2719,13 +2623,10 @@ export default { // 额度管理 quotaManagementFields: '额度管理字段', dailyQuotaLimitDollar: '每日额度限制 ($)', - quotaZeroUnlimited: '0 表示不限制', dailyQuotaDesc: '设置每日使用额度,0 表示不限制', - quotaResetTime: '额度重置时间', quotaResetTimeDesc: '每日自动重置额度的时间', // 模型映射 - modelMappingOptional: '模型映射表 (可选)', modelMappingDesc: '留空表示支持所有模型且不修改请求。配置映射后,左侧模型会被识别为支持的模型,右侧是实际发送的模型。', originalModelName: '原始模型名称', @@ -2737,7 +2638,6 @@ export default { // Claude 订阅类型 claudeSubscriptionType: '订阅类型', - claudeProLimitation: 'Pro 账号不支持 Claude Opus 4 模型', // Claude 高级选项 claudeAutoStopScheduling: '5小时使用量接近限制时自动停止调度', @@ -2765,13 +2665,10 @@ export default { setupTokenCopyTitle: '复制链接', // 步骤指示器 - stepIndicator: '步骤指示器', - step1BasicInfo: '步骤1: 基本信息和代理设置', step2OAuth: '步骤2: OAuth授权', step2SetupToken: '步骤2: Setup Token授权', // 分组选择器 - groupSelector: '分组选择器', multiGroupInterface: '多选分组界面', createNewGroupOption: '新建分组选项', @@ -2781,15 +2678,12 @@ export default { // Placeholder 文本 originalModelNamePlaceholder: '原始模型名称', mappedModelNamePlaceholder: '映射后的模型名称', - userAgentPlaceholder: '留空则透传客户端 User-Agent', authCodePlaceholder: '粘贴从Claude Code授权页面获取的Authorization Code...', leaveEmptyNoUpdate: '留空表示不更新', leaveEmptyNoUpdateKey: '留空表示不更新 API Key', leaveEmptyNoUpdateToken: '留空表示不更新...', // 标签和描述 - customUserAgentOptional: '自定义 User-Agent (可选)', - clientIdLabel: '客户端标识 ID', schedulePriorityLabel: '调度优先级 (1-100)', attentionLabel: '注意:', supportedModelsLabel: '支持的模型', @@ -2802,17 +2696,14 @@ export default { previousStepBtn: '上一步', // 描述性文本 - claudeProLimitation: 'Pro 账号不支持 Claude Opus 4 模型', claude5HourLimitDesc: '5小时使用量接近限制时自动停止调度', claude5HourLimitExplanation: '当系统检测到账户接近5小时使用限制时,自动暂停调度该账户。进入新的时间窗口后会自动恢复调度。', useUnifiedClaudeVersion: '使用统一 Claude Code 版本', unifiedVersionDesc: '开启后将使用从真实 Claude Code 客户端捕获的统一 User-Agent,提高兼容性', - currentUnifiedVersion: '💡 当前统一版本:', waitingUserAgent: '⏳ 等待从 Claude Code 客户端捕获 User-Agent', userAgentTip: '💡 提示:如果长时间未能捕获,请确认有 Claude Code 客户端正在使用此账户,', contactDeveloper: '或联系开发者检查 User-Agent 格式是否发生变化', - useUnifiedClientId: '使用统一的客户端标识', unifiedClientIdDesc: '开启后将使用固定的客户端标识,使所有请求看起来来自同一个客户端,减少特征', clientIdReplaceDesc: '此ID将替换请求中的user_id客户端部分,保留session部分用于粘性会话', @@ -2834,8 +2725,6 @@ export default { // Error messages apiKeyRequiredError: '请填写 API Key', - refreshTokenRequired: '请填写 Refresh Token', - accessTokenRequired: '请填写 Access Token', copyFailedManual: '复制失败,请手动复制', // 表单描述 @@ -2846,9 +2735,7 @@ export default { // 基础标签 apiUrlLabel: 'API URL', - apiUrlRequired: 'API URL *', apiKeyLabel: 'API Key', - apiKeyRequired: 'API Key *', // 更多缺失的翻译键 copyLinkTooltip: '复制链接', diff --git a/web/admin-spa/src/i18n/locales/zh-tw.js b/web/admin-spa/src/i18n/locales/zh-tw.js index 5768df67..c32064a7 100644 --- a/web/admin-spa/src/i18n/locales/zh-tw.js +++ b/web/admin-spa/src/i18n/locales/zh-tw.js @@ -62,6 +62,30 @@ export default { info: '資訊' } }, + errors: { + loadDashboardFailed: '載入儀表板數據失敗', + loadUsageTrendFailed: '載入使用趨勢失敗', + loadModelStatsFailed: '載入模型統計失敗', + loadApiKeysTrendFailed: '載入API Keys趨勢失敗', + createClaudeConsoleAccountFailed: '建立Claude Console帳戶失敗', + createAzureOpenAIAccountFailed: '建立Azure OpenAI帳戶失敗', + updateClaudeConsoleAccountFailed: '更新Claude Console帳戶失敗', + updateAzureOpenAIAccountFailed: '更新Azure OpenAI帳戶失敗', + generateSetupTokenUrlFailed: '產生Setup Token URL失敗', + exchangeSetupTokenFailed: '交換Setup Token授權碼失敗', + allApiKeysInvalid: '所有 API Key 都無效', + loadOemSettingsFailed: '載入OEM設定失敗', + getApiKeyStatsFailed: '獲取API Key統計失敗', + getTagsFailed: '獲取標籤失敗', + requestFailed: '請求失敗: {status}', + loadSupportedClientsFailed: '載入支援的客戶端失敗' + }, + system: { + status: { + normal: '正常', + abnormal: '異常' + } + }, confirmDialog: { confirm: '確認', cancel: '取消' @@ -131,10 +155,6 @@ export default { minutesAgo: '{minutes}分鐘前', hoursAgo: '{hours}小時前', daysAgo: '{days}天前' - }, - errors: { - requestFailed: '請求失敗: {status}', - loadSupportedClientsFailed: '載入支援的客戶端失敗' } }, language: { @@ -221,7 +241,6 @@ export default { apiKeyInfo: 'API Key 資訊', queryKeysCount: '查詢 Keys 數', activeKeysCount: '有效 Keys 數', - invalidKeysCount: '無效 Keys 數', totalRequests: '總請求數', totalTokens: '總 Token 數', totalCost: '總費用', @@ -237,7 +256,6 @@ export default { modelUsageStats: '模型使用統計', loadingModelStats: '載入模型統計資料中...', requestCount: '次請求', - totalCost: '總費用', inputTokens: '輸入 Token', outputTokens: '輸出 Token', cacheCreateTokens: '快取建立', @@ -2228,7 +2246,7 @@ export default { rateLimitDurationDescription: '帳號被限流後暫停排程的時間(分鐘)', // Claude 訂閱類型 - subscriptionType: '訂閱類型', + subscriptionClaudeMax: 'Claude Max', subscriptionClaudePro: 'Claude Pro', claudeProLimitation: 'Pro 帳號不支援 Claude Opus 4 模型', @@ -2391,12 +2409,6 @@ export default { // 手動 Token 輸入部分 manualTokenInput: '手動輸入 Token', - manualTokenClaudeDescription: - '請輸入有效的 Claude Access Token。如果您有 Refresh Token,建議也一併填寫以支援自動刷新。', - manualTokenGeminiDescription: - '請輸入有效的 Gemini Access Token。如果您有 Refresh Token,建議也一併填寫以支援自動刷新。', - manualTokenOpenAIDescription: - '請輸入有效的 OpenAI Access Token。如果您有 Refresh Token,建議也一併填寫以支援自動刷新。', getAccessTokenMethod: '取得 Access Token 的方法:', claudeCredentialsPath: '請從已登入 Claude Code 的機器上取得', geminiCredentialsPath: '請從已登入 Gemini CLI 的機器上取得', @@ -2404,15 +2416,9 @@ export default { '請從已登入 OpenAI 帳戶的機器上取得認證憑證,或透過 OAuth 授權流程取得 Access Token。', claudeCredentialsWarning: '檔案中的憑證,請勿使用 Claude 官網 API Keys 頁面的金鑰。', refreshTokenWarning: '💡 如果未填寫 Refresh Token,Token 過期後需要手動更新。', - accessTokenOptional: 'Access Token (可選)', - accessTokenOptionalPlaceholder: '可選:如果不填寫,系統會自動透過 Refresh Token 取得...', accessTokenOptionalInfo: 'Access Token 可選填。如果不提供,系統會透過 Refresh Token 自動取得。', - accessTokenRequired: 'Access Token *', accessTokenRequiredPlaceholder: '請輸入 Access Token...', - refreshTokenRequired: 'Refresh Token *', - refreshTokenRequiredPlaceholder: '請輸入 Refresh Token(必填)...', refreshTokenRequiredInfo: '系統將使用 Refresh Token 自動取得 Access Token 和使用者資訊', - refreshTokenOptional: 'Refresh Token (可選)', refreshTokenOptionalPlaceholder: '請輸入 Refresh Token...', // 優先級設定 @@ -2421,34 +2427,12 @@ export default { prioritySchedulingTitle: '排程優先級 (1-100)', priorityEditPlaceholder: '數字越小優先級越高', - // Gemini 專案ID - projectIdOptional: '專案 ID (可選)', - projectIdPlaceholder: '例如:verdant-wares-464411-k9', - projectIdDescription: 'Google Cloud/Workspace 帳號可能需要提供專案 ID', - // Claude 訂閱類型和進階選項 - subscriptionType: '訂閱類型', + claudeMaxSubscription: 'Claude Max', claudeProSubscription: 'Claude Pro', - claudeProLimitation: 'Pro 帳號不支援 Claude Opus 4 模型', - autoStopOnWarning: '5小時使用量接近限制時自動停止排程', - autoStopOnWarningDescription: - '當系統檢測到帳戶接近5小時使用限制時,自動暫停排程該帳戶。進入新的時間視窗後會自動恢復排程。', - useUnifiedUserAgent: '使用統一 Claude Code 版本', - useUnifiedUserAgentDescription: - '開啟後將使用從真實 Claude Code 用戶端捕獲的統一 User-Agent,提高相容性', - currentUnifiedVersion: '目前統一版本:', - clearCache: '清除快取', - clearing: '清除中...', - waitingForCapture: '等待從 Claude Code 用戶端捕獲 User-Agent', - captureHint: - '💡 提示:如果長時間未能捕獲,請確認有 Claude Code 用戶端正在使用此帳戶,或聯絡開發者檢查 User-Agent 格式是否發生變化', - useUnifiedClientId: '使用統一的用戶端識別', - useUnifiedClientIdDescription: - '開啟後將使用固定的用戶端識別,使所有請求看起來來自同一個用戶端,減少特徵', clientIdLabel: '用戶端識別 ID', regenerateClientId: '重新產生', - clientIdDescription: '此ID將替換請求中的user_id用戶端部分,保留session部分用於黏性工作階段', // 編輯模式欄位 accountNameEdit: '帳戶名稱', @@ -2456,7 +2440,6 @@ export default { descriptionOptionalEdit: '描述 (可選)', descriptionOptionalEditPlaceholder: '帳戶用途說明...', accountTypeEdit: '帳戶類型', - selectGroupRequired: '選擇群組 *', noAvailableGroups: '暫無可用群組', membersCount: ' 個成員', createNewGroup: '新建群組', @@ -2464,29 +2447,14 @@ export default { // AWS Bedrock 設定 bedrockCredentials: '憑證設定', bedrockCredentialsDescription: '請填寫 AWS 存取憑證,用於呼叫 Amazon Bedrock 服務。', - awsAccessKeyId: 'AWS Access Key ID *', - awsAccessKeyIdPlaceholder: '請輸入 AWS 存取密鑰 ID...', - awsSecretAccessKey: 'AWS Secret Access Key *', - awsSecretAccessKeyPlaceholder: '請輸入 AWS 秘密存取密鑰...', - sessionTokenOptional: 'Session Token (可選)', sessionTokenOptionalPlaceholder: '臨時憑證的工作階段令牌...', - sessionTokenDescription: '僅在使用臨時憑證(如 STS 產生的憑證)時需要填寫', - awsRegion: 'AWS 區域 *', - awsRegionPlaceholder: '選擇 AWS 區域...', bedrockModelConfig: '模型設定', defaultModelLabel: '預設模型', - defaultModelPlaceholder: '例如:anthropic.claude-3-5-sonnet-20240620-v1:0', - defaultModelDescription: '留空將使用系統預設模型。支援 inference profile ID 或 ARN', smallFastModelLabel: '小型快速模型', - smallFastModelPlaceholder: '例如:anthropic.claude-3-haiku-20240307-v1:0', - smallFastModelDescription: '用於簡單任務的快速模型,支援 inference profile ID 或 ARN', // Azure OpenAI 設定 azureOpenAIConfig: 'Azure OpenAI 設定', azureOpenAIDescription: '請設定 Azure OpenAI 服務的連線資訊和部署詳情。', - azureEndpoint: 'Azure Endpoint *', - azureEndpointPlaceholder: '例如:https://your-resource.openai.azure.com/', - azureEndpointDescription: 'Azure OpenAI 服務的端點 URL', azureApiKey: 'API Key *', azureApiKeyPlaceholder: '請輸入 Azure OpenAI API Key...', azureApiVersion: 'API 版本', @@ -2509,7 +2477,6 @@ export default { modelMappingFromPlaceholder: '例如:claude-3-5-sonnet-20241022', modelMappingTo: '實際模型', modelMappingToPlaceholder: '例如:claude-3-5-sonnet-latest', - addModelMapping: '新增映射', removeMapping: '移除', presetMappings: '預設映射', modelMappingExample: '示例:claude-3-5-sonnet-20241022 → claude-3-5-sonnet-latest', @@ -2521,9 +2488,7 @@ export default { setupTokenStep1: '步驟 1:產生授權連結', setupTokenStep1Description: '系統將產生一個專用的授權連結,用於取得臨時授權碼。', setupTokenStep2: '步驟 2:完成授權', - setupTokenStep2Description: '在新視窗中開啟授權連結,使用您的 Claude 帳戶登入並完成授權。', setupTokenStep3: '步驟 3:輸入授權碼', - setupTokenStep3Description: '授權成功後,系統會顯示授權碼,請複製並貼上到下方輸入框。', setupTokenUrlGenerated: '授權連結已產生', setupTokenOpenInBrowser: '在瀏覽器中開啟', setupTokenCopyLink: '複製連結', @@ -2548,15 +2513,9 @@ export default { // 限流和配額管理 rateLimitSettings: '限流設定', - enableRateLimit: '啟用速率限制', - rateLimitDuration: '限流時長 (秒)', rateLimitDurationPlaceholder: '例如:60', - rateLimitDescription: '啟用後將限制請求頻率,防止帳戶被封鎖', quotaManagement: '配額管理', - dailyQuotaLabel: '每日配額限制', - dailyQuotaPlaceholder: '0 表示不限制', quotaResetTimeLabel: '配額重設時間', - quotaResetTimePlaceholder: '例如:00:00', quotaResetDescription: '每天配額重設的時間點', currentDailyUsage: '今日已用', @@ -2564,7 +2523,6 @@ export default { advancedSettings: '進階設定', customUserAgent: '自定義 User-Agent', customUserAgentPlaceholder: '留空使用預設 User-Agent...', - userAgentDescription: '用於請求時的 User-Agent 識別', // 通用提示和狀態 notSet: '未設定', @@ -2605,7 +2563,6 @@ export default { '提示:如果您的帳戶是普通個人帳戶(未綁定 Google Cloud),請留空此欄位。', // AWS 區域參考 - awsRegionReference: '常用 AWS 區域參考:', awsRegionEastUS: 'us-east-1 (美國東部)', awsRegionWestUS: 'us-west-2 (美國西部)', awsRegionEuropeIreland: 'eu-west-1 (歐洲愛爾蘭)', @@ -2625,7 +2582,6 @@ export default { azureModelSelectionDesc: '選擇此部署支援的模型類型', // 限流機制 - rateLimitMechanism: '限流機制', enableRateLimitMechanism: '啟用限流機制', rateLimitDescription2: '啟用後,當帳戶返回429錯誤時將暫停調度一段時間', rateLimitDurationMinutes: '限流時間 (分鐘)', @@ -2634,32 +2590,23 @@ export default { // Claude Console 特定欄位 claudeConsoleFields: 'Claude Console 特定欄位', - quotaManagement: '額度管理', modelMappingTable: '模型映射表', modelMappingTableOptional: '模型映射表 (可選)', - addModelMapping: '新增模型映射', // Claude 訂閱類型 subscriptionType: '訂閱類型', // Setup Token 授權 - setupTokenAuth: 'Setup Token 授權', claudeSetupTokenAuth: 'Claude Setup Token 授權', setupTokenAuthSteps: '請按照以下步驟透過 Setup Token 完成 Claude 帳戶的授權:', generateSetupTokenLink: '產生 Setup Token 授權連結', - generating: '產生中...', // 按鈕和操作 - verifying: '驗證中...', completeAuth: '完成授權', - updating: '更新中...', - update: '更新', // 錯誤訊息 generateSetupTokenFailed: '產生Setup Token授權連結失敗', - copyFailed: '複製失敗,請手動複製', setupTokenAuthFailed: 'Setup Token授權失敗,請檢查授權碼是否正確', - accountCreationFailed: '帳戶建立失敗', accountCreationError: '帳戶建立失敗:', // 頁面結構註釋 @@ -2674,29 +2621,18 @@ export default { // 驗證訊息 nameRequired: '請填寫帳戶名稱', - apiUrlRequired: '請填寫 API URL', rateLimitDefault60: '預設60分鐘', rateLimitPauseDescription: '帳戶被限流後暫停調度的時間(分鐘)', - apiUrlPlaceholder: '例如:https://api.example.com', - apiKeyPlaceholder: '請輸入API Key', dailyQuotaLimit: '每日額度限制 ($)', quotaZeroUnlimited: '0 表示不限制', - dailyQuotaDescription: '設定每日使用額度,0 表示不限制', - quotaResetTime: '額度重設時間', - quotaResetTimeDescription: '每日自動重設額度的時間', - modelMappingDescription: - '留空表示支援所有模型且不修改請求。設定映射後,左側模型會被識別為支援的模型,右側是實際傳送的模型。', // 額度管理 quotaManagementFields: '配額管理欄位', dailyQuotaLimitDollar: '每日配額限制 ($)', - quotaZeroUnlimited: '0 表示不限制', dailyQuotaDesc: '設定每日使用配額,0 表示不限制', - quotaResetTime: '配額重設時間', quotaResetTimeDesc: '每日自動重設配額的時間', // 模型映射 - modelMappingOptional: '模型映射表 (可選)', modelMappingDesc: '留空表示支援所有模型且不修改請求。設定映射後,左側模型會被識別為支援的模型,右側是實際發送的模型。', originalModelName: '原始模型名稱', @@ -2708,7 +2644,6 @@ export default { // Claude 訂閱類型 claudeSubscriptionType: '訂閱類型', - claudeProLimitation: 'Pro 帳戶不支援 Claude Opus 4 模型', // Claude 進階選項 claudeAutoStopScheduling: '5小時使用量接近限制時自動停止調度', @@ -2736,13 +2671,10 @@ export default { setupTokenCopyTitle: '複製連結', // 步驟指示器 - stepIndicator: '步驟指示器', - step1BasicInfo: '步驟1: 基本資訊和代理設定', step2OAuth: '步驟2: OAuth授權', step2SetupToken: '步驟2: Setup Token授權', // 群組選擇器 - groupSelector: '群組選擇器', multiGroupInterface: '多選群組介面', createNewGroupOption: '新建群組選項', @@ -2752,15 +2684,12 @@ export default { // Placeholder 文字 originalModelNamePlaceholder: '原始模型名稱', mappedModelNamePlaceholder: '映射後的模型名稱', - userAgentPlaceholder: '留空則透傳用戶端 User-Agent', authCodePlaceholder: '貼上Claude Code授權頁面獲取的Authorization Code...', leaveEmptyNoUpdate: '留空表示不更新', leaveEmptyNoUpdateKey: '留空表示不更新 API Key', leaveEmptyNoUpdateToken: '留空表示不更新...', // 標籤和描述 - customUserAgentOptional: '自定義 User-Agent (可選)', - clientIdLabel: '用戶端標識 ID', schedulePriorityLabel: '調度優先級 (1-100)', attentionLabel: '注意:', supportedModelsLabel: '支援的模型', @@ -2773,17 +2702,14 @@ export default { previousStepBtn: '上一步', // 描述性文字 - claudeProLimitation: 'Pro 帳戶不支援 Claude Opus 4 模型', claude5HourLimitDesc: '5小時使用量接近限制時自動停止調度', claude5HourLimitExplanation: '當系統檢測到帳戶接近5小時使用限制時,自動暫停調度該帳戶。進入新的時間視窗後會自動恢復調度。', useUnifiedClaudeVersion: '使用統一 Claude Code 版本', unifiedVersionDesc: '開啟後將使用從真實 Claude Code 用戶端捕獲的統一 User-Agent,提高相容性', - currentUnifiedVersion: '💡 目前統一版本:', waitingUserAgent: '⏳ 等待從 Claude Code 用戶端捕獲 User-Agent', userAgentTip: '💡 提示:如果長時間未能捕獲,請確認有 Claude Code 用戶端正在使用此帳戶,', contactDeveloper: '或聯繫開發者檢查 User-Agent 格式是否發生變化', - useUnifiedClientId: '使用統一的用戶端標識', unifiedClientIdDesc: '開啟後將使用固定的用戶端標識,使所有請求看起來來自同一個用戶端,減少特徵', clientIdReplaceDesc: '此ID將替換請求中的user_id用戶端部分,保留session部分用於黏性工作階段', @@ -2804,9 +2730,6 @@ export default { awsRegionRef: '常用 AWS 區域參考:', // 錯誤訊息 - apiKeyRequired: '請填寫 API Key', - refreshTokenRequired: '請填寫 Refresh Token', - accessTokenRequired: '請填寫 Access Token', copyFailedManual: '複製失敗,請手動複製', // 表單描述 @@ -2817,9 +2740,7 @@ export default { // 基础標籤 apiUrlLabel: 'API URL', - apiUrlRequired: 'API URL *', apiKeyLabel: 'API Key', - apiKeyRequired: 'API Key *', // 更多缺失的翻譯鍵 copyLinkTooltip: '複製連結',