2026-04-13 15:15:14 +08:00
|
|
|
export default {
|
2026-04-14 21:48:53 +08:00
|
|
|
// Login
|
|
|
|
|
login: {
|
2026-04-15 16:36:04 +08:00
|
|
|
title: 'Hermes Web UI',
|
2026-04-14 21:48:53 +08:00
|
|
|
description: 'Enter your access token to continue. Find it in the server startup logs.',
|
|
|
|
|
placeholder: 'Access token',
|
|
|
|
|
submit: 'Login',
|
|
|
|
|
tokenRequired: 'Please enter your access token',
|
|
|
|
|
invalidToken: 'Invalid token',
|
|
|
|
|
connectionFailed: 'Cannot connect to server',
|
|
|
|
|
},
|
|
|
|
|
|
2026-04-13 15:15:14 +08:00
|
|
|
// Common
|
|
|
|
|
common: {
|
|
|
|
|
loading: 'Loading...',
|
|
|
|
|
cancel: 'Cancel',
|
|
|
|
|
delete: 'Delete',
|
|
|
|
|
edit: 'Edit',
|
|
|
|
|
save: 'Save',
|
|
|
|
|
saved: 'Saved',
|
|
|
|
|
update: 'Update',
|
|
|
|
|
create: 'Create',
|
|
|
|
|
saveFailed: 'Save failed',
|
|
|
|
|
ok: 'OK',
|
|
|
|
|
copied: 'Copied',
|
|
|
|
|
copy: 'Copy',
|
|
|
|
|
noData: 'No data',
|
|
|
|
|
fetch: 'Fetch',
|
|
|
|
|
add: 'Add',
|
|
|
|
|
enable: 'Enable',
|
|
|
|
|
disable: 'Disable',
|
|
|
|
|
configured: 'Configured',
|
|
|
|
|
notConfigured: 'Not configured',
|
2026-04-16 09:40:25 +08:00
|
|
|
confirm: 'Confirm',
|
|
|
|
|
expand: 'Expand',
|
|
|
|
|
collapse: 'Collapse',
|
2026-04-13 15:15:14 +08:00
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// Sidebar
|
|
|
|
|
sidebar: {
|
|
|
|
|
chat: 'Chat',
|
|
|
|
|
jobs: 'Jobs',
|
|
|
|
|
models: 'Models',
|
2026-04-16 09:40:25 +08:00
|
|
|
profiles: 'Profiles',
|
2026-04-13 15:15:14 +08:00
|
|
|
skills: 'Skills',
|
|
|
|
|
memory: 'Memory',
|
|
|
|
|
logs: 'Logs',
|
2026-04-14 14:47:18 +08:00
|
|
|
usage: 'Usage',
|
2026-04-13 15:15:14 +08:00
|
|
|
channels: 'Channels',
|
2026-04-15 16:36:04 +08:00
|
|
|
terminal: 'Terminal',
|
2026-04-13 15:15:14 +08:00
|
|
|
settings: 'Settings',
|
|
|
|
|
connected: 'Connected',
|
|
|
|
|
disconnected: 'Disconnected',
|
2026-04-16 13:51:42 +08:00
|
|
|
updateTip: 'Run "hermes-web-ui update" in terminal to update',
|
|
|
|
|
updateVersion: 'Upgrade to v{version}',
|
|
|
|
|
updating: 'Updating...',
|
|
|
|
|
updateSuccess: 'Update complete, please restart the server',
|
|
|
|
|
updateFailed: 'Update failed',
|
2026-04-13 15:15:14 +08:00
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// Chat
|
|
|
|
|
chat: {
|
|
|
|
|
emptyState: 'Start a conversation with Hermes Agent',
|
|
|
|
|
inputPlaceholder: 'Type a message... (Enter to send, Shift+Enter for new line)',
|
|
|
|
|
attachFiles: 'Attach files',
|
|
|
|
|
stop: 'Stop',
|
|
|
|
|
send: 'Send',
|
2026-04-14 14:47:18 +08:00
|
|
|
contextUsed: 'Context used:',
|
2026-04-13 15:15:14 +08:00
|
|
|
sessions: 'Sessions',
|
|
|
|
|
noSessions: 'No sessions',
|
|
|
|
|
newChat: 'New Chat',
|
|
|
|
|
deleteSession: 'Delete this session?',
|
|
|
|
|
sessionDeleted: 'Session deleted',
|
|
|
|
|
rename: 'Rename',
|
|
|
|
|
copySessionId: 'Copy Session ID',
|
|
|
|
|
renamed: 'Renamed',
|
|
|
|
|
renameFailed: 'Rename failed',
|
|
|
|
|
renameSession: 'Rename Session',
|
|
|
|
|
enterNewTitle: 'Enter new title',
|
|
|
|
|
other: 'Other',
|
|
|
|
|
runFailed: 'Run failed',
|
2026-04-15 16:36:04 +08:00
|
|
|
error: 'Error',
|
2026-04-13 15:15:14 +08:00
|
|
|
tool: 'Tool',
|
|
|
|
|
arguments: 'Arguments',
|
|
|
|
|
result: 'Result',
|
|
|
|
|
truncated: '... (truncated)',
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// Jobs
|
|
|
|
|
jobs: {
|
|
|
|
|
title: 'Scheduled Jobs',
|
|
|
|
|
createJob: 'Create Job',
|
|
|
|
|
editJob: 'Edit Job',
|
|
|
|
|
noJobs: 'No scheduled jobs yet. Create one to get started.',
|
|
|
|
|
name: 'Name',
|
|
|
|
|
namePlaceholder: 'Job name',
|
|
|
|
|
schedule: 'Schedule (Cron Expression)',
|
|
|
|
|
schedulePlaceholder: 'e.g. 0 9 * * *',
|
|
|
|
|
quickPresets: 'Quick Presets',
|
|
|
|
|
selectPreset: 'Select a preset...',
|
|
|
|
|
presetEveryMinute: 'Every minute',
|
|
|
|
|
presetEvery5Min: 'Every 5 minutes',
|
|
|
|
|
presetEveryHour: 'Every hour',
|
|
|
|
|
presetEveryDay: 'Every day at 00:00',
|
|
|
|
|
presetEveryDay9: 'Every day at 09:00',
|
|
|
|
|
presetEveryMonday: 'Every Monday at 09:00',
|
|
|
|
|
presetEveryMonth: 'Every month 1st at 09:00',
|
|
|
|
|
prompt: 'Prompt',
|
|
|
|
|
promptPlaceholder: 'The prompt to execute',
|
|
|
|
|
deliverTarget: 'Deliver Target',
|
|
|
|
|
origin: 'Origin',
|
|
|
|
|
local: 'Local',
|
|
|
|
|
repeatCount: 'Repeat Count (optional)',
|
|
|
|
|
repeatPlaceholder: 'Leave empty for infinite',
|
|
|
|
|
jobCreated: 'Job created',
|
|
|
|
|
jobUpdated: 'Job updated',
|
|
|
|
|
nameRequired: 'Name is required',
|
|
|
|
|
scheduleRequired: 'Schedule is required',
|
|
|
|
|
loadFailed: 'Failed to load job',
|
|
|
|
|
jobPaused: 'Job paused',
|
|
|
|
|
jobResumed: 'Job resumed',
|
|
|
|
|
jobTriggered: 'Job triggered',
|
|
|
|
|
jobDeleted: 'Job deleted',
|
|
|
|
|
status: {
|
|
|
|
|
running: 'Running',
|
|
|
|
|
paused: 'Paused',
|
|
|
|
|
disabled: 'Disabled',
|
|
|
|
|
scheduled: 'Scheduled',
|
|
|
|
|
},
|
|
|
|
|
info: {
|
|
|
|
|
schedule: 'Schedule',
|
|
|
|
|
lastRun: 'Last Run',
|
|
|
|
|
nextRun: 'Next Run',
|
|
|
|
|
deliver: 'Deliver',
|
|
|
|
|
repeat: 'Repeat',
|
|
|
|
|
},
|
|
|
|
|
action: {
|
|
|
|
|
pause: 'Pause',
|
|
|
|
|
pauseJob: 'Pause job',
|
|
|
|
|
resume: 'Resume',
|
|
|
|
|
resumeJob: 'Resume job',
|
|
|
|
|
runNow: 'Run Now',
|
|
|
|
|
triggerImmediately: 'Trigger immediately',
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// Skills
|
|
|
|
|
skills: {
|
|
|
|
|
title: 'Skills',
|
|
|
|
|
searchPlaceholder: 'Search skills...',
|
|
|
|
|
noMatch: 'No skills match your search',
|
|
|
|
|
noSkills: 'No skills found',
|
|
|
|
|
backTo: 'Back to',
|
|
|
|
|
attachedFiles: 'Attached Files',
|
|
|
|
|
loadFailed: 'Failed to load skill',
|
|
|
|
|
fileLoadFailed: 'Failed to load file',
|
2026-04-14 21:48:53 +08:00
|
|
|
toggleFailed: 'Failed to toggle skill',
|
2026-04-13 15:15:14 +08:00
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// Memory
|
|
|
|
|
memory: {
|
|
|
|
|
title: 'Memory',
|
|
|
|
|
refresh: 'Refresh',
|
|
|
|
|
loadFailed: 'Failed to load memory',
|
|
|
|
|
myNotes: 'My Notes',
|
|
|
|
|
noNotes: 'No notes yet.',
|
|
|
|
|
notesPlaceholder: 'Write your notes...',
|
|
|
|
|
userProfile: 'User Profile',
|
|
|
|
|
noProfile: 'No profile yet.',
|
|
|
|
|
profilePlaceholder: 'Write your profile...',
|
2026-04-16 13:51:42 +08:00
|
|
|
soul: 'Soul',
|
|
|
|
|
noSoul: 'No soul configuration yet.',
|
|
|
|
|
soulPlaceholder: 'Write soul configuration...',
|
2026-04-13 15:15:14 +08:00
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// Models
|
|
|
|
|
models: {
|
|
|
|
|
title: 'Models',
|
|
|
|
|
addProvider: 'Add Provider',
|
|
|
|
|
providerType: 'Provider Type',
|
|
|
|
|
preset: 'Preset',
|
|
|
|
|
custom: 'Custom',
|
|
|
|
|
selectProvider: 'Select Provider',
|
|
|
|
|
chooseProvider: 'Choose a provider...',
|
|
|
|
|
name: 'Name',
|
|
|
|
|
autoGeneratedName: 'Auto-generated from Base URL',
|
|
|
|
|
baseUrl: 'Base URL',
|
|
|
|
|
baseUrlPlaceholder: 'e.g. https://api.example.com/v1',
|
|
|
|
|
apiKey: 'API Key',
|
|
|
|
|
apiKeyPlaceholder: 'sk-...',
|
|
|
|
|
defaultModel: 'Default Model',
|
2026-04-17 22:05:06 +08:00
|
|
|
selectOrInput: 'Select or type a model name...',
|
2026-04-13 15:15:14 +08:00
|
|
|
selectModel: 'Select a model...',
|
|
|
|
|
providerAdded: 'Provider added',
|
|
|
|
|
providerDeleted: 'Provider deleted',
|
|
|
|
|
deleteProvider: 'Delete Provider',
|
|
|
|
|
deleteConfirm: 'Are you sure you want to delete "{name}"?',
|
|
|
|
|
noProviders: 'No providers found. Add a custom provider to get started.',
|
|
|
|
|
builtIn: 'Built-in',
|
|
|
|
|
customType: 'Custom',
|
|
|
|
|
provider: 'Provider',
|
|
|
|
|
local: 'Local ({host})',
|
|
|
|
|
selectProviderRequired: 'Please select a provider',
|
|
|
|
|
baseUrlRequired: 'Base URL is required',
|
|
|
|
|
apiKeyRequired: 'API Key is required',
|
|
|
|
|
modelRequired: 'Default Model is required',
|
|
|
|
|
enterBaseUrl: 'Please enter Base URL first',
|
|
|
|
|
unexpectedFormat: 'Unexpected response format',
|
|
|
|
|
foundModels: 'Found {count} models',
|
|
|
|
|
fetchFailed: 'Failed to fetch models',
|
|
|
|
|
},
|
|
|
|
|
|
2026-04-16 09:40:25 +08:00
|
|
|
// Profiles
|
|
|
|
|
profiles: {
|
|
|
|
|
title: 'Profiles',
|
|
|
|
|
create: 'Create Profile',
|
|
|
|
|
import: 'Import',
|
|
|
|
|
export: 'Export',
|
|
|
|
|
rename: 'Rename',
|
|
|
|
|
delete: 'Delete',
|
|
|
|
|
switchTo: 'Switch to',
|
|
|
|
|
switchConfirm: 'Switching to profile "{name}" will restart the gateway. Continue?',
|
|
|
|
|
switchSuccess: 'Switched to profile "{name}"',
|
|
|
|
|
switchFailed: 'Failed to switch profile. Gateway may need manual restart.',
|
|
|
|
|
createSuccess: 'Profile "{name}" created',
|
|
|
|
|
createFailed: 'Failed to create profile',
|
|
|
|
|
renameSuccess: 'Profile renamed',
|
|
|
|
|
renameFailed: 'Failed to rename profile',
|
|
|
|
|
deleteConfirm: 'Are you sure you want to delete profile "{name}"?',
|
|
|
|
|
deleteSuccess: 'Profile deleted',
|
|
|
|
|
deleteFailed: 'Failed to delete profile',
|
|
|
|
|
exportSuccess: 'Profile exported',
|
|
|
|
|
exportFailed: 'Failed to export profile',
|
|
|
|
|
importSuccess: 'Profile imported',
|
|
|
|
|
importFailed: 'Failed to import profile',
|
2026-04-16 15:19:05 +08:00
|
|
|
importSelectFile: 'Select archive file',
|
|
|
|
|
importInvalidFile: 'Please select a valid archive (.tar.gz, .tgz, .gz, .zip)',
|
2026-04-16 09:40:25 +08:00
|
|
|
name: 'Profile Name',
|
2026-04-16 15:19:05 +08:00
|
|
|
namePlaceholder: 'English letters, numbers, hyphens only',
|
2026-04-16 09:40:25 +08:00
|
|
|
newName: 'New Name',
|
|
|
|
|
newNamePlaceholder: 'Enter new name',
|
|
|
|
|
cloneFromCurrent: 'Clone from current profile',
|
|
|
|
|
archivePath: 'Archive Path',
|
|
|
|
|
archivePathPlaceholder: 'Server path to archive file',
|
|
|
|
|
importName: 'Profile Name (optional)',
|
|
|
|
|
importNamePlaceholder: 'Leave empty to use archive name',
|
|
|
|
|
active: 'Active',
|
|
|
|
|
model: 'Model',
|
|
|
|
|
gateway: 'Gateway',
|
|
|
|
|
alias: 'Alias',
|
|
|
|
|
provider: 'Provider',
|
|
|
|
|
path: 'Path',
|
|
|
|
|
skills: 'Skills',
|
|
|
|
|
hasEnv: 'Has .env',
|
|
|
|
|
hasSoulMd: 'Has soul.md',
|
|
|
|
|
noProfiles: 'No profiles found. Create one to get started.',
|
|
|
|
|
},
|
|
|
|
|
|
2026-04-13 15:15:14 +08:00
|
|
|
// Logs
|
|
|
|
|
logs: {
|
|
|
|
|
title: 'Logs',
|
|
|
|
|
all: 'All',
|
|
|
|
|
searchPlaceholder: 'Search...',
|
|
|
|
|
refresh: 'Refresh',
|
|
|
|
|
noEntries: 'No log entries',
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// Settings
|
|
|
|
|
settings: {
|
|
|
|
|
title: 'Settings',
|
|
|
|
|
saved: 'Saved',
|
|
|
|
|
saveFailed: 'Save failed',
|
|
|
|
|
tabs: {
|
|
|
|
|
display: 'Display',
|
|
|
|
|
agent: 'Agent',
|
|
|
|
|
memory: 'Memory',
|
|
|
|
|
session: 'Session',
|
|
|
|
|
privacy: 'Privacy',
|
|
|
|
|
apiServer: 'API Server',
|
|
|
|
|
},
|
|
|
|
|
display: {
|
|
|
|
|
streaming: 'Stream Responses',
|
|
|
|
|
streamingHint: 'Show AI replies in real-time',
|
|
|
|
|
compact: 'Compact Mode',
|
|
|
|
|
compactHint: 'Reduce message spacing',
|
|
|
|
|
showReasoning: 'Show Reasoning',
|
|
|
|
|
showReasoningHint: 'Show model thinking process',
|
|
|
|
|
showCost: 'Show Cost',
|
|
|
|
|
showCostHint: 'Show token usage in replies',
|
|
|
|
|
inlineDiffs: 'Inline Diffs',
|
|
|
|
|
inlineDiffsHint: 'Show code changes inline',
|
|
|
|
|
bellOnComplete: 'Completion Sound',
|
|
|
|
|
bellOnCompleteHint: 'Play sound when AI finishes',
|
|
|
|
|
busyInputMode: 'Busy Input Mode',
|
|
|
|
|
busyInputModeHint: 'Allow input while AI is processing',
|
2026-04-16 23:13:04 +08:00
|
|
|
theme: 'Theme',
|
|
|
|
|
themeHint: 'Choose light, dark, or follow system preference',
|
|
|
|
|
themeLight: 'Light',
|
|
|
|
|
themeDark: 'Dark',
|
|
|
|
|
themeSystem: 'System',
|
2026-04-13 15:15:14 +08:00
|
|
|
},
|
|
|
|
|
agent: {
|
|
|
|
|
maxTurns: 'Max Turns',
|
|
|
|
|
maxTurnsHint: 'Maximum interaction rounds per conversation',
|
|
|
|
|
gatewayTimeout: 'Gateway Timeout',
|
|
|
|
|
gatewayTimeoutHint: 'Request timeout in seconds',
|
|
|
|
|
restartDrainTimeout: 'Restart Drain Timeout',
|
|
|
|
|
restartDrainTimeoutHint: 'Drain timeout before restart in seconds',
|
|
|
|
|
toolEnforcement: 'Tool Enforcement',
|
|
|
|
|
toolEnforcementHint: 'Control tool call execution mode',
|
|
|
|
|
auto: 'Auto',
|
|
|
|
|
always: 'Always',
|
|
|
|
|
never: 'Never',
|
|
|
|
|
},
|
|
|
|
|
memory: {
|
|
|
|
|
enabled: 'Enable Memory',
|
|
|
|
|
enabledHint: 'Allow AI to remember conversation context',
|
|
|
|
|
userProfile: 'User Profile',
|
|
|
|
|
userProfileHint: 'Allow AI to remember user preferences',
|
|
|
|
|
charLimit: 'Memory Char Limit',
|
|
|
|
|
charLimitHint: 'Max characters for MEMORY.md',
|
|
|
|
|
userCharLimit: 'User Profile Char Limit',
|
|
|
|
|
userCharLimitHint: 'Max characters for USER.md',
|
|
|
|
|
},
|
|
|
|
|
session: {
|
|
|
|
|
mode: 'Reset Mode',
|
|
|
|
|
modeHint: 'Trigger condition for session reset',
|
|
|
|
|
modeBoth: 'Idle + Scheduled',
|
|
|
|
|
modeIdle: 'Idle Only',
|
|
|
|
|
modeHourly: 'Scheduled Only',
|
|
|
|
|
idleMinutes: 'Idle Timeout',
|
|
|
|
|
idleMinutesHint: 'Wait time before auto-reset (minutes)',
|
|
|
|
|
atHour: 'Scheduled Reset Time',
|
|
|
|
|
atHourHint: 'Reset session at this hour daily',
|
|
|
|
|
},
|
|
|
|
|
privacy: {
|
|
|
|
|
redactPii: 'Redact PII',
|
|
|
|
|
redactPiiHint: 'Auto-detect and hide sensitive info (passwords, keys, etc.)',
|
|
|
|
|
},
|
|
|
|
|
apiServer: {
|
|
|
|
|
enable: 'Enable',
|
|
|
|
|
enableHint: 'Enable API server',
|
|
|
|
|
host: 'Host',
|
|
|
|
|
hostHint: 'Listen address',
|
|
|
|
|
port: 'Port',
|
|
|
|
|
portHint: 'Listen port',
|
|
|
|
|
key: 'Key',
|
|
|
|
|
keyHint: 'API access key',
|
|
|
|
|
cors: 'CORS Origins',
|
|
|
|
|
corsHint: 'Allowed cross-origin sources',
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// Platform channel settings
|
|
|
|
|
platform: {
|
|
|
|
|
requireMention: "Require {'@'}Mention",
|
|
|
|
|
requireMentionGroup: "Require {'@'}mention in groups to respond",
|
|
|
|
|
requireMentionChannel: "Require {'@'}mention in channels to respond",
|
|
|
|
|
requireMentionRoom: "Require {'@'}mention in rooms to respond",
|
|
|
|
|
reactions: 'Reactions',
|
|
|
|
|
reactionsHint: 'React to messages with emoji',
|
|
|
|
|
freeResponseChats: 'Free Response Chats',
|
|
|
|
|
freeResponseChatsHint: "Chat IDs that respond without {'@'}mention (comma-separated)",
|
|
|
|
|
freeResponseChannels: 'Free Response Channels',
|
|
|
|
|
freeResponseChannelsHint: "Channel IDs that respond without {'@'}mention (comma-separated)",
|
|
|
|
|
freeResponseRooms: 'Free Response Rooms',
|
|
|
|
|
freeResponseRoomsHint: "Room IDs that respond without {'@'}mention (comma-separated)",
|
|
|
|
|
mentionPatterns: 'Custom Mention Patterns',
|
|
|
|
|
mentionPatternsHint: 'Additional trigger patterns',
|
|
|
|
|
autoThread: 'Auto Thread',
|
|
|
|
|
autoThreadHint: "Auto-create reply threads after {'@'}mention",
|
|
|
|
|
autoThreadHintRoom: 'Auto-create reply threads in rooms',
|
|
|
|
|
dmMentionThreads: 'DM Mention Threads',
|
|
|
|
|
dmMentionThreadsHint: 'Use thread replies for mentions in DMs',
|
|
|
|
|
allowBots: 'Allow Bot Messages',
|
|
|
|
|
allowBotsHint: 'Respond to messages from other bots',
|
|
|
|
|
allowedChannels: 'Allowed Channels',
|
|
|
|
|
allowedChannelsHint: 'Whitelist channel IDs (comma-separated)',
|
|
|
|
|
ignoredChannels: 'Ignored Channels',
|
|
|
|
|
ignoredChannelsHint: 'Channels where bot never responds (comma-separated)',
|
|
|
|
|
noThreadChannels: 'No-Thread Channels',
|
|
|
|
|
noThreadChannelsHint: 'Channels where bot responds without threads (comma-separated)',
|
|
|
|
|
botToken: 'Bot Token',
|
|
|
|
|
botTokenHint: 'Bot token from developer portal',
|
|
|
|
|
accessToken: 'Access Token',
|
|
|
|
|
accessTokenHint: 'Matrix access token',
|
|
|
|
|
homeserver: 'Homeserver URL',
|
|
|
|
|
homeserverHint: 'Matrix homeserver URL',
|
|
|
|
|
appId: 'App ID',
|
|
|
|
|
appIdHint: 'Feishu App ID',
|
|
|
|
|
appSecret: 'App Secret',
|
|
|
|
|
appSecretHint: 'Feishu App Secret',
|
|
|
|
|
clientId: 'Client ID',
|
|
|
|
|
clientIdHint: 'DingTalk Client ID',
|
|
|
|
|
clientSecret: 'Client Secret',
|
|
|
|
|
clientSecretHint: 'DingTalk Client Secret',
|
|
|
|
|
botId: 'Bot ID',
|
|
|
|
|
botIdHint: 'WeCom Bot ID',
|
|
|
|
|
wecomSecretHint: 'WeCom Bot Secret',
|
|
|
|
|
waEnabled: 'Enable WhatsApp',
|
|
|
|
|
waEnabledHint: 'Enable WhatsApp via QR code pairing',
|
|
|
|
|
weixinToken: 'Weixin Token',
|
|
|
|
|
weixinTokenHint: 'From weixin CLI QR login (hermes weixin)',
|
|
|
|
|
accountId: 'Account ID',
|
|
|
|
|
accountIdHint: 'Weixin account ID',
|
|
|
|
|
qrLogin: 'QR Login',
|
|
|
|
|
qrRelogin: 'Re-login',
|
|
|
|
|
qrFetching: 'Fetching QR code...',
|
|
|
|
|
qrScanHint: 'Scan with WeChat to login',
|
|
|
|
|
qrScanedHint: 'Scaned, please confirm on phone...',
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// Language
|
|
|
|
|
language: {
|
|
|
|
|
label: 'Language',
|
|
|
|
|
zh: '中文',
|
|
|
|
|
en: 'English',
|
|
|
|
|
},
|
2026-04-14 14:47:18 +08:00
|
|
|
|
2026-04-15 16:36:04 +08:00
|
|
|
// Terminal
|
|
|
|
|
terminal: {
|
|
|
|
|
sessions: 'Sessions',
|
|
|
|
|
newTab: 'New Terminal',
|
|
|
|
|
closeSession: 'Close this session?',
|
|
|
|
|
sessionExited: 'Exited',
|
|
|
|
|
processExited: 'Process exited with code {code}',
|
|
|
|
|
},
|
|
|
|
|
|
2026-04-14 14:47:18 +08:00
|
|
|
// Usage
|
|
|
|
|
usage: {
|
|
|
|
|
title: 'Usage Statistics',
|
|
|
|
|
refresh: 'Refresh',
|
|
|
|
|
totalTokens: 'Total Tokens',
|
|
|
|
|
inputTokens: 'Input',
|
|
|
|
|
outputTokens: 'Output',
|
|
|
|
|
totalSessions: 'Total Sessions',
|
|
|
|
|
avgPerDay: '~{n}/day avg',
|
|
|
|
|
estimatedCost: 'Est. Cost',
|
|
|
|
|
cacheHitRate: 'Cache Hit Rate',
|
|
|
|
|
modelBreakdown: 'Model Breakdown',
|
|
|
|
|
dailyTrend: 'Daily Usage (Last 30 Days)',
|
|
|
|
|
date: 'Date',
|
|
|
|
|
tokens: 'Tokens',
|
|
|
|
|
cache: 'Cache',
|
|
|
|
|
sessions: 'Sessions',
|
|
|
|
|
cost: 'Cost',
|
|
|
|
|
noData: 'No usage data',
|
|
|
|
|
},
|
2026-04-13 15:15:14 +08:00
|
|
|
}
|