'This {providerName} account is not yet registered. The site requires an invitation code — please enter one to complete registration.',
invalidPendingToken:'The registration token has expired. Please sign in again.',
completeRegistration:'Complete Registration',
completing:'Completing registration…',
completeRegistrationFailed:'Registration failed. Please check your invitation code and try again.'
},
oauth:{
oauth:{
code:'Code',
code:'Code',
state:'State',
state:'State',
...
@@ -1618,7 +1639,6 @@ export default {
...
@@ -1618,7 +1639,6 @@ export default {
openai:'OpenAI',
openai:'OpenAI',
gemini:'Gemini',
gemini:'Gemini',
antigravity:'Antigravity',
antigravity:'Antigravity',
sora:'Sora'
},
},
deleteConfirm:
deleteConfirm:
"Are you sure you want to delete '{name}'? All associated API keys will no longer belong to any group.",
"Are you sure you want to delete '{name}'? All associated API keys will no longer belong to any group.",
...
@@ -1643,16 +1663,6 @@ export default {
...
@@ -1643,16 +1663,6 @@ export default {
title:'Image Generation Pricing',
title:'Image Generation Pricing',
description:'Configure pricing for image generation models. Leave empty to use default prices.'
description:'Configure pricing for image generation models. Leave empty to use default prices.'
},
},
soraPricing:{
title:'Sora Per-Request Pricing',
description:'Configure per-request pricing for Sora image/video generation. Leave empty to disable billing.',
image360:'Image 360px ($)',
image540:'Image 540px ($)',
video:'Video (standard) ($)',
videoHd:'Video (Pro-HD) ($)',
storageQuota:'Storage Quota',
storageQuotaHint:'In GB, set the Sora storage quota for users in this group. 0 means use system default'
},
claudeCode:{
claudeCode:{
title:'Claude Code Client Restriction',
title:'Claude Code Client Restriction',
tooltip:'When enabled, this group only allows official Claude Code clients. Non-Claude Code requests will be rejected or fallback to the specified group.',
tooltip:'When enabled, this group only allows official Claude Code clients. Non-Claude Code requests will be rejected or fallback to the specified group.',
...
@@ -1666,9 +1676,23 @@ export default {
...
@@ -1666,9 +1676,23 @@ export default {
title:'OpenAI Messages Dispatch',
title:'OpenAI Messages Dispatch',
allowDispatch:'Allow /v1/messages dispatch',
allowDispatch:'Allow /v1/messages dispatch',
allowDispatchHint:'When enabled, API keys in this OpenAI group can dispatch requests through /v1/messages endpoint',
allowDispatchHint:'When enabled, API keys in this OpenAI group can dispatch requests through /v1/messages endpoint',
defaultModel:'Default mapped model',
familyMappingTitle:'Family Default Mapping',
defaultModelPlaceholder:'e.g., gpt-4.1',
familyMappingHint:'Requests that match the Opus, Sonnet, or Haiku families will prefer the target model configured here.',
defaultModelHint:'When account has no model mapping configured, all request models will be mapped to this model'
opusModel:'Opus Target Model',
opusModelPlaceholder:'e.g., gpt-5.4',
sonnetModel:'Sonnet Target Model',
sonnetModelPlaceholder:'e.g., gpt-5.3-codex',
haikuModel:'Haiku Target Model',
haikuModelPlaceholder:'e.g., gpt-5.4-mini',
exactMappingTitle:'Exact Model Overrides',
exactMappingHint:'Exact Claude model overrides take priority over the family defaults and can route a specific Claude model to a different target model.',
antigravityApikey:'Connect via Base URL + API Key',
antigravityApikey:'Connect via Base URL + API Key',
soraApiKey:'API Key / Upstream',
soraApiKeyHint:'Connect to another TrafficAPI or compatible API',
soraBaseUrlRequired:'Sora API Key account requires a Base URL',
soraBaseUrlInvalidScheme:'Base URL must start with http:// or https://',
upstream:'Upstream',
upstream:'Upstream',
upstreamDesc:'Connect via Base URL + API Key'
upstreamDesc:'Connect via Base URL + API Key'
},
},
...
@@ -2059,6 +2078,7 @@ export default {
...
@@ -2059,6 +2078,7 @@ export default {
rateLimited:'Rate Limited',
rateLimited:'Rate Limited',
overloaded:'Overloaded',
overloaded:'Overloaded',
tempUnschedulable:'Temp Unschedulable',
tempUnschedulable:'Temp Unschedulable',
unschedulable:'Unschedulable',
rateLimitedUntil:'Rate limited and removed from scheduling. Auto resumes at {time}',
rateLimitedUntil:'Rate limited and removed from scheduling. Auto resumes at {time}',
rateLimitedAutoResume:'Auto resumes in {time}',
rateLimitedAutoResume:'Auto resumes in {time}',
modelRateLimitedUntil:'{model} rate limited until {time}',
modelRateLimitedUntil:'{model} rate limited until {time}',
...
@@ -2308,8 +2328,6 @@ export default {
...
@@ -2308,8 +2328,6 @@ export default {
codexCLIOnlyDesc:
codexCLIOnlyDesc:
'Only applies to OpenAI OAuth. When enabled, only Codex official client families are allowed; when disabled, the gateway bypasses this restriction and keeps existing behavior.',
'Only applies to OpenAI OAuth. When enabled, only Codex official client families are allowed; when disabled, the gateway bypasses this restriction and keeps existing behavior.',
modelRestrictionDisabledByPassthrough:'Automatic passthrough is enabled: model whitelist/mapping will not take effect.',
modelRestrictionDisabledByPassthrough:'Automatic passthrough is enabled: model whitelist/mapping will not take effect.',
enableSora:'Enable Sora simultaneously',
enableSoraHint:'Sora uses the same OpenAI account. Enable to create Sora account simultaneously.'
},
},
anthropic:{
anthropic:{
apiKeyPassthrough:'Auto passthrough (auth only)',
apiKeyPassthrough:'Auto passthrough (auth only)',
...
@@ -2324,9 +2342,6 @@ export default {
...
@@ -2324,9 +2342,6 @@ export default {
'Map request models to actual models. Left is the requested model, right is the actual model sent to API.',
'Map request models to actual models. Left is the requested model, right is the actual model sent to API.',
selectedModels:'Selected {count} model(s)',
selectedModels:'Selected {count} model(s)',
supportsAllModels:'(supports all models)',
supportsAllModels:'(supports all models)',
soraModelsLoadFailed:'Failed to load Sora models, fallback to default list',
soraModelsLoading:'Loading Sora models...',
soraModelsRetry:'Load failed, click to retry',
requestModel:'Request model',
requestModel:'Request model',
actualModel:'Actual model',
actualModel:'Actual model',
addMapping:'Add Mapping',
addMapping:'Add Mapping',
...
@@ -2476,8 +2491,6 @@ export default {
...
@@ -2476,8 +2491,6 @@ export default {
creating:'Creating...',
creating:'Creating...',
updating:'Updating...',
updating:'Updating...',
accountCreated:'Account created successfully',
accountCreated:'Account created successfully',
soraAccountCreated:'Sora account created simultaneously',
soraAccountFailed:'Failed to create Sora account, please add manually later',
accountUpdated:'Account updated successfully',
accountUpdated:'Account updated successfully',
failedToCreate:'Failed to create account',
failedToCreate:'Failed to create account',
failedToUpdate:'Failed to update account',
failedToUpdate:'Failed to update account',
...
@@ -2591,8 +2604,8 @@ export default {
...
@@ -2591,8 +2604,8 @@ export default {
refreshTokenDesc:'Enter your existing OpenAI Refresh Token(s). Supports batch input (one per line). The system will automatically validate and create accounts.',
refreshTokenDesc:'Enter your existing OpenAI Refresh Token(s). Supports batch input (one per line). The system will automatically validate and create accounts.',
refreshTokenPlaceholder:'Paste your OpenAI Refresh Token...\nSupports multiple, one per line',
refreshTokenPlaceholder:'Paste your OpenAI Refresh Token...\nSupports multiple, one per line',
sessionTokenAuth:'Manual ST Input',
sessionTokenAuth:'Manual ST Input',
sessionTokenDesc:'Enter your existing Sora Session Token(s). Supports batch input (one per line). The system will automatically validate and create accounts.',
sessionTokenDesc:'Enter your existing Session Token(s). Supports batch input (one per line). The system will automatically validate and create accounts.',
sessionTokenPlaceholder:'Paste your Sora Session Token...\nSupports multiple, one per line',
sessionTokenPlaceholder:'Paste your Session Token...\nSupports multiple, one per line',
sessionTokenRawLabel:'Raw Input',
sessionTokenRawLabel:'Raw Input',
sessionTokenRawPlaceholder:'Paste /api/auth/session raw payload or Session Token...',
sessionTokenRawPlaceholder:'Paste /api/auth/session raw payload or Session Token...',
sessionTokenRawHint:'You can paste full JSON. The system will auto-parse ST and AT.',
sessionTokenRawHint:'You can paste full JSON. The system will auto-parse ST and AT.',