description:'Move available rebate quota into your account balance',
button:'Transfer to Balance',
transferring:'Transferring...',
empty:'No available rebate quota',
success:'{amount} has been transferred to your balance'
},
invitees:{
title:'Invited Users',
empty:'No invited users yet',
columns:{
email:'Email',
username:'Username',
rebate:'Rebate',
joinedAt:'Joined At'
}
},
tips:{
title:'How It Works',
line1:'Share your affiliate code or invite link with new users.',
line2:'When invitees recharge, you receive {rate} of the recharge as rebate quota.',
line3:'Transfer rebate quota to balance at any time.',
line4:'Newly earned rebates may have a waiting period before they can be transferred.'
}
},
// Redeem
// Redeem
redeem:{
redeem:{
title:'Redeem Code',
title:'Redeem Code',
...
@@ -2813,6 +2861,22 @@ export default {
...
@@ -2813,6 +2861,22 @@ export default {
codexCLIOnly:'Codex official clients only',
codexCLIOnly:'Codex official clients only',
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.',
compactMode:'Compact mode',
compactModeDesc:
'Controls how this account participates in /responses/compact routing. Auto follows probe results, Force On always allows, Force Off always excludes.',
compactModeAuto:'Auto',
compactModeForceOn:'Force On',
compactModeForceOff:'Force Off',
compactModelMapping:'Compact-only model mapping',
compactModelMappingDesc:
'Only applies to /responses/compact. Use this when the upstream compact endpoint requires a special compact model.',
compactSupported:'Compact supported',
compactUnsupported:'Compact unsupported',
compactUnknown:'Compact unknown',
compactLastChecked:'Last compact probe',
testMode:'Test mode',
testModeDefault:'Default request',
testModeCompact:'Compact probe',
modelRestrictionDisabledByPassthrough:'Automatic passthrough is enabled: model whitelist/mapping will not take effect.',
modelRestrictionDisabledByPassthrough:'Automatic passthrough is enabled: model whitelist/mapping will not take effect.',
},
},
anthropic:{
anthropic:{
...
@@ -4728,6 +4792,61 @@ export default {
...
@@ -4728,6 +4792,61 @@ export default {
enabled:'Enable Available Channels',
enabled:'Enable Available Channels',
enabledHint:'When off, the sidebar entry is hidden and the endpoint returns an empty list.',
enabledHint:'When off, the sidebar entry is hidden and the endpoint returns an empty list.',
},
},
affiliate:{
title:'Affiliate (Invite Rebate)',
description:'Existing users invite new ones; the inviter earns a percentage rebate on the invitee’s recharges. Disabled by default.',
enabled:'Enable Affiliate',
enabledHint:'When off, the affiliate menu is hidden, the aff parameter is ignored at signup, and new recharges generate no rebate. Existing rebate balances can still be transferred.',
rebateRate:'Global Rebate Rate',
rebateRateHint:'Default percentage given back to the inviter on recharges (0-100, e.g. 10 = 10%).',
freezeHours:'Rebate Freeze Period (hours)',
freezeHoursDesc:'New rebates will be frozen for this period before becoming available for withdrawal. 0 = no freeze.',
durationDays:'Rebate Duration (days)',
durationDaysDesc:'Rebate relationship expires after this many days since invitee registration. 0 = permanent.',
perInviteeCap:'Per-Invitee Rebate Cap',
perInviteeCapDesc:'Maximum total rebate from a single invitee. 0 = no limit.',
customUsers:{
title:'Per-User Overrides',
description:'Set a custom invite code or exclusive rebate rate for specific users. Lists only users that have an override applied.',
addButton:'Add Custom User',
searchPlaceholder:'Search by email or username',
batchButton:'Batch Set Rate ({count} selected)',
empty:'No users with custom affiliate settings yet',
customBadge:'custom',
useGlobal:'use global',
resetTitle:'Reset Custom Settings',
resetMessage:'Reset all custom settings for {email}?\n• The exclusive rebate rate will be cleared (fall back to the global rate)\n• The invite code will be regenerated as a new system code (previously shared links will stop working)',
totalLabel:'{total} total',
col:{
email:'Email',
username:'Username',
code:'Invite Code',
rate:'Custom Rate',
actions:'Actions',
},
},
modal:{
addTitle:'Add Custom User',
editTitle:'Edit Custom Settings',
userLabel:'User',
userPlaceholder:'Search by email or username',
changeUser:'Change user',
codeLabel:'Custom Invite Code (optional)',
codePlaceholder:'e.g. VIP2026',
codeHint:'4-32 characters; A-Z, 0-9, underscore, dash. Leave empty to keep current. Input is upper-cased.',
rateLabel:'Exclusive Rebate Rate (optional)',
ratePlaceholder:'e.g. 30',
rateHint:'0-100. Leave empty (in edit mode) to clear and fall back to the global rate.',
errorBadRate:'Please enter a number between 0 and 100',
errorEmpty:'Fill at least one: custom invite code or exclusive rebate rate',
},
batchModal:{
title:'Batch Set Rate ({count} users selected)',
hint:'Apply the same exclusive rebate rate to all selected users.',
placeholder:'e.g. 30',
clearHint:'Submitting empty will clear the exclusive rate for selected users.',
},
},
},
},
emailTabDisabledTitle:'Email Verification Not Enabled',
emailTabDisabledTitle:'Email Verification Not Enabled',
emailTabDisabledHint:'Enable email verification in the Security tab to configure SMTP settings.',
emailTabDisabledHint:'Enable email verification in the Security tab to configure SMTP settings.',
...
@@ -4844,6 +4963,9 @@ export default {
...
@@ -4844,6 +4963,9 @@ export default {
description:'Default values for new users',
description:'Default values for new users',
defaultBalance:'Default Balance',
defaultBalance:'Default Balance',
defaultBalanceHint:'Initial balance for new users',
defaultBalanceHint:'Initial balance for new users',
affiliateRebateRate:'Affiliate Rebate Rate',
affiliateRebateRateHint:
'Rebate percentage credited to inviter after recharge (0-100%, e.g. 10 means 10%)',
defaultConcurrency:'Default Concurrency',
defaultConcurrency:'Default Concurrency',
defaultConcurrencyHint:'Maximum concurrent requests for new users',
defaultConcurrencyHint:'Maximum concurrent requests for new users',