notesHint:'This note is only visible to administrators',
notesHint:'This note is only visible to administrators',
enterNewPassword:'Enter new password (optional)',
enterNewPassword:'Enter new password (optional)',
...
@@ -582,7 +578,6 @@ export default {
...
@@ -582,7 +578,6 @@ export default {
columns:{
columns:{
user:'User',
user:'User',
username:'Username',
username:'Username',
wechat:'WeChat ID',
notes:'Notes',
notes:'Notes',
role:'Role',
role:'Role',
subscriptions:'Subscriptions',
subscriptions:'Subscriptions',
...
@@ -653,7 +648,67 @@ export default {
...
@@ -653,7 +648,67 @@ export default {
failedToDeposit:'Failed to deposit',
failedToDeposit:'Failed to deposit',
failedToWithdraw:'Failed to withdraw',
failedToWithdraw:'Failed to withdraw',
useDepositWithdrawButtons:'Please use deposit/withdraw buttons to adjust balance',
useDepositWithdrawButtons:'Please use deposit/withdraw buttons to adjust balance',
insufficientBalance:'Insufficient balance, balance cannot be negative after withdrawal'
insufficientBalance:'Insufficient balance, balance cannot be negative after withdrawal',
// Settings Dropdowns
filterSettings:'Filter Settings',
columnSettings:'Column Settings',
filterValue:'Enter value',
// User Attributes
attributes:{
title:'User Attributes',
description:'Configure custom user attribute fields',
configButton:'Attributes',
addAttribute:'Add Attribute',
editAttribute:'Edit Attribute',
deleteAttribute:'Delete Attribute',
deleteConfirm:"Are you sure you want to delete attribute '{name}'? All user values for this attribute will be deleted.",
noAttributes:'No custom attributes',
noAttributesHint:'Click the button above to add custom attributes',
key:'Attribute Key',
keyHint:'For programmatic reference, only letters, numbers and underscores',
name:'Display Name',
nameHint:'Name shown in forms',
type:'Attribute Type',
fieldDescription:'Description',
fieldDescriptionHint:'Description text for the attribute',
placeholder:'Placeholder',
placeholderHint:'Placeholder text for input field',
required:'Required',
enabled:'Enabled',
options:'Options',
optionsHint:'For select/multi-select types',
addOption:'Add Option',
optionValue:'Option Value',
optionLabel:'Display Text',
validation:'Validation Rules',
minLength:'Min Length',
maxLength:'Max Length',
min:'Min Value',
max:'Max Value',
pattern:'Regex Pattern',
patternMessage:'Validation Error Message',
types:{
text:'Text',
textarea:'Textarea',
number:'Number',
email:'Email',
url:'URL',
date:'Date',
select:'Select',
multi_select:'Multi-Select'
},
created:'Attribute created successfully',
updated:'Attribute updated successfully',
deleted:'Attribute deleted successfully',
reordered:'Attribute order updated successfully',
failedToLoad:'Failed to load attributes',
failedToCreate:'Failed to create attribute',
failedToUpdate:'Failed to update attribute',
failedToDelete:'Failed to delete attribute',
failedToReorder:'Failed to update order',
keyExists:'Attribute key already exists',
dragToReorder:'Drag to reorder'
}
},
},
// Groups
// Groups
...
@@ -945,6 +1000,15 @@ export default {
...
@@ -945,6 +1000,15 @@ export default {
actualModel:'Actual model',
actualModel:'Actual model',
addMapping:'Add Mapping',
addMapping:'Add Mapping',
mappingExists:'Mapping for {model} already exists',
mappingExists:'Mapping for {model} already exists',
searchModels:'Search models...',
noMatchingModels:'No matching models',
fillRelatedModels:'Fill related models',
clearAllModels:'Clear all models',
customModelName:'Custom model name',
enterCustomModelName:'Enter custom model name',
addModel:'Add',
modelExists:'Model already exists',
modelCount:'{count} models',
customErrorCodes:'Custom Error Codes',
customErrorCodes:'Custom Error Codes',
customErrorCodesHint:'Only stop scheduling for selected error codes',
customErrorCodesHint:'Only stop scheduling for selected error codes',
customErrorCodesWarning:
customErrorCodesWarning:
...
@@ -1076,16 +1140,17 @@ export default {
...
@@ -1076,16 +1140,17 @@ export default {
failedToGenerateUrl:'Failed to generate Gemini auth URL',
failedToGenerateUrl:'Failed to generate Gemini auth URL',
missingExchangeParams:'Missing auth code, session ID, or state',
missingExchangeParams:'Missing auth code, session ID, or state',
failedToExchangeCode:'Failed to exchange Gemini auth code',
failedToExchangeCode:'Failed to exchange Gemini auth code',
missingProjectId:'GCP Project ID retrieval failed: Your Google account is not linked to an active GCP project. Please activate GCP and bind a credit card in Google Cloud Console, or manually enter the Project ID during authorization.',
modelPassthrough:'Gemini Model Passthrough',
modelPassthrough:'Gemini Model Passthrough',
modelPassthroughDesc:
modelPassthroughDesc:
'All model requests are forwarded directly to the Gemini API without model restrictions or mappings.',
'All model requests are forwarded directly to the Gemini API without model restrictions or mappings.',
stateWarningTitle:'Note',
stateWarningTitle:'Note',
stateWarningDesc:'Recommended: paste the full callback URL (includes code & state).',
stateWarningDesc:'Recommended: paste the full callback URL (includes code & state).',
oauthTypeLabel:'OAuth Type',
oauthTypeLabel:'OAuth Type',
needsProjectId:'For GCP Developers',
needsProjectId:'Built-in OAuth (Code Assist)',
needsProjectIdDesc:'Requires GCP project',
needsProjectIdDesc:'Requires GCP project and Project ID',
'AI Studio OAuth is not configured: set GEMINI_OAUTH_CLIENT_ID / GEMINI_OAUTH_CLIENT_SECRET and add Redirect URI: http://localhost:1455/auth/callback (Consent screen scopes must include https://www.googleapis.com/auth/generative-language.retriever)',
'AI Studio OAuth is not configured: set GEMINI_OAUTH_CLIENT_ID / GEMINI_OAUTH_CLIENT_SECRET and add Redirect URI: http://localhost:1455/auth/callback (Consent screen scopes must include https://www.googleapis.com/auth/generative-language.retriever)',
...
@@ -1120,7 +1185,100 @@ export default {
...
@@ -1120,7 +1185,100 @@ export default {
modelPassthroughDesc:
modelPassthroughDesc:
'All model requests are forwarded directly to the Gemini API without model restrictions or mappings.',
'All model requests are forwarded directly to the Gemini API without model restrictions or mappings.',
baseUrlHint:'Leave default for official Gemini API',
baseUrlHint:'Leave default for official Gemini API',
apiKeyHint:'Your Gemini API Key (starts with AIza)'
apiKeyHint:'Your Gemini API Key (starts with AIza)',
accountType:{
oauthTitle:'OAuth (Gemini)',
oauthDesc:'Authorize with your Google account and choose an OAuth type.',
apiKeyTitle:'API Key (AI Studio)',
apiKeyDesc:'Fastest setup. Use an AIza API key.',
apiKeyNote:
'Best for light testing. Free tier has strict rate limits and data may be used for training.',
builtInDesc:'Uses Google built-in client ID. No admin configuration required.',
builtInRequirement:'Requires a GCP project and Project ID.',
gcpProjectLink:'Create project',
customTitle:'Custom OAuth (AI Studio OAuth)',
customDesc:'Uses admin-configured OAuth client for org management.',
customRequirement:'Admin must configure Client ID and add you as a test user.',
badges:{
recommended:'Recommended',
highConcurrency:'High concurrency',
noAdmin:'No admin setup',
orgManaged:'Org managed',
adminRequired:'Admin required'
}
},
setupGuide:{
title:'Gemini Setup Checklist',
checklistTitle:'Checklist',
checklistItems:{
usIp:'Use a US IP and ensure your account country is set to US.',
age:'Account must be 18+.'
},
activationTitle:'One-click Activation',
activationItems:{
geminiWeb:'Activate Gemini Web to avoid User not initialized.',
gcpProject:'Activate a GCP project and get the Project ID for Code Assist.'
},
links:{
countryCheck:'Check country association',
geminiWebActivation:'Activate Gemini Web',
gcpProject:'Open GCP Console'
}
},
quotaPolicy:{
title:'Gemini Quota & Limit Policy (Reference)',
note:'Note: Gemini does not provide an official quota inquiry API. The "Daily Quota" shown here is an estimate simulated by the system based on account tiers for scheduling reference only. Please refer to official Google errors for actual limits.',
columns:{
channel:'Auth Channel',
account:'Account Status',
limits:'Limit Policy',
docs:'Official Docs'
},
docs:{
codeAssist:'Code Assist Quotas',
aiStudio:'AI Studio Pricing',
vertex:'Vertex AI Quotas'
},
simulatedNote:'Simulated quota, for reference only',
rows:{
cli:{
channel:'Gemini CLI (Official Google Login / Code Assist)',