export default { "auth.chatLoginDenied": "This account cannot use chat (contact an admin).", "auth.consoleAdminOnly": "Only users with the admin role may sign in to the console.", "auth.disabled": "Account is disabled", "auth.invalid": "Login failed", "auth.login": "Login", "auth.loggingIn": "Signing in…", "auth.logout": "Logout", "auth.password": "Password", "auth.username": "Username", "boot.loadFailed": "Failed to load chat.js", "boot.loadFailedHint": "Confirm the gateway is up and /admin/assets/chat.js is reachable.", "boot.loading": "Loading chat…", "boot.loadingHint": "If this stays too long, check whether the gateway is running.", "boot.stillLoading": "Still loading…", "boot.stillLoadingHint": "If the login form does not appear, refresh after confirming the gateway is up. Desktop: desktop.log / backend.log.", "chat.activeModelLabel": "Model", "chat.applyAfterTurn": "applies to history after current turn", "chat.attach": "Attach", "chat.attachment.download": "Download", "chat.attachment.preview": "Preview", "chat.attachment.previewEmpty": "(empty)", "chat.attachment.previewError": "Preview failed", "chat.attachment.previewLoading": "Loading…", "chat.attachmentAcl": "Attachment ACL", "chat.attachmentAclBackfill": "Backfill ACL", "chat.attachmentAclBackfillFail": "Backfill failed: {error}", "chat.attachmentAclBackfillOk": "Backfill done: inserted {inserted} rows (scanned {scanned_messages} messages)", "chat.attachmentAclBackfillPrompt": "Backfill attachment_acl by scanning historical message attachments? Recommended during off-peak hours.", "chat.attachmentLimits": "Attachment limits", "chat.attachmentLimitsCancel": "Cancel", "chat.attachmentLimitsCellChars": "Max chars per cell", "chat.attachmentLimitsCols": "Max columns kept", "chat.attachmentLimitsDenied": "Not authorized to change attachment limits", "chat.attachmentLimitsHighPreviewWarn": "Large-table preview rows is above 200, which may significantly increase token usage. Continue?", "chat.attachmentLimitsInvalidJson": "Invalid attachment limits JSON", "chat.attachmentLimitsInvalidNumber": "Please enter valid positive integers", "chat.attachmentLimitsLargePreviewRows": "Large-table preview rows", "chat.attachmentLimitsMaxSheets": "Max Excel sheets", "chat.attachmentLimitsPrompt": "Edit attachment limits JSON (empty to restore defaults)", "chat.attachmentLimitsReset": "Reset defaults", "chat.attachmentLimitsRows": "Max rows read", "chat.attachmentLimitsSave": "Save", "chat.attachmentLimitsSaved": "Attachment limits updated", "chat.attachmentLimitsSqlTimeoutMs": "SQL timeout (ms)", "chat.attachmentLimitsTitle": "Attachment limits", "chat.attachmentLimitsToolEnabled": "Enable large-table tool mode", "chat.attachmentLimitsToolMaxBytes": "Max file bytes for tool mode", "chat.attachmentLimitsToolMinRows": "Min rows to trigger tool mode", "chat.attachmentUploaded": "(attachment uploaded)", "chat.audit": "Audit & trace", "chat.backAdmin": "Admin console", "chat.call": "call", "chat.callBracket": "[call] {name}", "chat.compressHistory": "Compress chat", "chat.compressHistoryFail": "Compaction failed: {error}", "chat.compressHistoryOk": "Compaction done: scanned {scanned} tool messages, rewritten {rewritten}, oversized compacted {compacted} (skipped {skipped} already compacted).", "chat.compressHistoryPrompt": "Rewrite this session's historical tool outputs using replay-guard compaction (irreversible). Use only when a session is polluted by huge tool_result.", "chat.connecting": "Connecting…", "chat.copy": "Copy", "chat.copyFail": "Copy failed", "chat.copyOk": "Copied", "chat.delete": "Delete", "chat.deleteConfirm": "Delete this session?", "chat.deleteMessage": "Delete message", "chat.deleteMessageConfirm": "Delete this message?", "chat.dispatchLabelsCancel": "Cancel", "chat.dispatchLabelsClear": "Clear", "chat.dispatchLabelsDiffOnly": "Show changed only", "chat.dispatchLabelsEdit": "Edit reason labels", "chat.dispatchLabelsEffectivePreview": "Effective preview", "chat.dispatchLabelsExport": "Export effective", "chat.dispatchLabelsImport": "Import JSON", "chat.dispatchLabelsInvalidJson": "Invalid JSON format", "chat.dispatchLabelsPrompt": "Edit dispatch reason override JSON (empty to clear)", "chat.dispatchLabelsRestoreDefaults": "Restore defaults template", "chat.dispatchLabelsSave": "Save", "chat.dispatchLabelsSaved": "Reason labels updated", "chat.dispatchLabelsTitle": "Edit reason label overrides", "chat.dispatchLabelsUnsavedConfirm": "You have unsaved changes. Close anyway?", "chat.dynamicAllReasons": "View full mix", "chat.dynamicAllReasonsTitle": "Full reason mix", "chat.dynamicStats": "Dynamic experts (recent): hit {dynamic}, fallback {fallback}", "chat.dynamicStatsDetail": "Hit rate {rate}% · Top reason {reason}", "chat.dynamicTopReasons": "Reason mix {items}", "chat.empty": "No messages yet", "chat.encodingAttachments": "Encoding attachments…", "chat.error": "Request failed", "chat.execApplied": "Applied: {mode} / {specialist}", "chat.execModeAgent": "Agent", "chat.execModeApplied": "Execution: {mode}", "chat.execModeLabel": "Execution", "chat.execModePlan": "Plan", "chat.expandFull": "Load full text (may be slow)", "chat.exportJson": "Export JSON", "chat.exportMd": "Export Markdown", "chat.fork": "Duplicate chat", "chat.historyComplete": "Reached the start of this chat", "chat.historyTruncated": "Showing latest {shown}/{total} · scroll up for older", "chat.imageBlockedHint": "Image blocked from inline display; open original URL", "chat.imageViewerClose": "Close", "chat.imageViewerDownload": "Download image", "chat.imageViewerHint": "Click image to enlarge; click outside or Esc to close", "chat.jobs": "Background jobs", "chat.jobsClose": "Close", "chat.jobsEmpty": "No background jobs", "chat.jobsHint": "Long agent jobs appear here and may keep running after the chat turn ends. Kill them manually if needed.", "chat.jobsKill": "Kill", "chat.jobsKillAll": "Kill all running", "chat.jobsKillAllConfirm": "Kill all running jobs?", "chat.jobsKillConfirm": "Kill this job? The process will be force-terminated.", "chat.jobsPurge": "Purge", "chat.jobsPurgeConfirm": "Remove local records/logs for this finished job?", "chat.jobsRefresh": "Refresh", "chat.jobsRunning": "{n} running", "chat.jobsStatus.cancelled": "cancelled", "chat.jobsStatus.failed": "failed", "chat.jobsStatus.running": "running", "chat.jobsStatus.succeeded": "succeeded", "chat.jobsStatus.timeout": "timeout", "chat.jobsTitle": "Background jobs", "chat.langSwitchedWhileStreaming": "Language updated. Session is still streaming; refresh the page to reload all labels.", "chat.liveFull": "[LIVE FULL]", "chat.loadMore": "Load more", "chat.loading": "Loading…", "chat.loadingDots": "Loading...", "chat.loadingOlder": "Loading older messages…", "chat.logs": "Logs", "chat.marker.reclaimed": "Turn markers reclaimed {n}", "chat.marker.summary": "File markers: pointers {p}, envelope {e} (in-envelope {ep})", "chat.marker.ttl": "TTL: turn {t} / session {s} / keep {k}", "chat.memoryApplied": "Memory: {mode}", "chat.memoryModeDefault": "Default (inject allowed)", "chat.memoryModeDefaultShort": "default", "chat.memoryModeLabel": "Memory Mode", "chat.memoryModeStoreOnly": "Store only (no inject)", "chat.memoryModeStoreOnlyShort": "store_only", "chat.modeComprehensive": "Comprehensive", "chat.modeComprehensiveShort": "Comprehensive", "chat.modeExpert": "Expert", "chat.modeExpertShort": "Expert", "chat.modeLabel": "Mode", "chat.modeNotPinned": "Mode not pinned: backend returned interaction_mode={mode} specialist={specialist} (want expert/{want})", "chat.modelProfile": "Model", "chat.myProfile": "Settings", "chat.newSession": "New chat", "chat.noSessions": "No sessions yet. Create one to start.", "chat.pageTitle": "oliver", "chat.placeholder": "Message…", "chat.reason.dynamic_agent_build_failed": "Dynamic agent build failed", "chat.reason.dynamic_agent_selected": "Dynamic agent selected", "chat.reason.manager_factory_failed": "Specialist executor factory failed", "chat.reason.manager_model_missing": "Manager model missing", "chat.reason.manager_no_specialist_fallback": "No specialist; fallback to generalist", "chat.reason.manager_route_missing": "Manager route missing", "chat.reason.manager_select_failed": "Manager selection failed", "chat.remove": "Remove", "chat.rename": "Rename", "chat.saveModeFailed": "Failed to save mode: {error}", "chat.send": "Send", "chat.sending": "Sending…", "chat.sessionMenu": "Session actions", "chat.sessions": "Sessions", "chat.specialistGeneralist": "Generalist", "chat.specialistGeneralistShort": "Generalist", "chat.specialistImage": "Image", "chat.specialistImageShort": "Image", "chat.specialistLabel": "Specialist", "chat.specialistManage": "Specialist Toggle", "chat.specialistManageDenied": "Not authorized to change specialist flags", "chat.specialistManagePromptOff": "Disable memory specialist?", "chat.specialistManagePromptOn": "Enable memory specialist?", "chat.specialistMemory": "Memory", "chat.specialistMemoryShort": "Memory", "chat.specialistOps": "Ops", "chat.specialistOpsShort": "Ops", "chat.specialistVideoShort": "Video", "chat.stageLocalBoth": " · stage(start→run)={start}ms (run→first)={first}ms", "chat.stageLocalStart": " · stage(start→run)={start}ms", "chat.stageSeg": " · stage(A→G:{a2g} / G→M:{g2m} / M→F:{m2f})", "chat.status.agent": "Agent", "chat.status.end": "Done", "chat.status.error": "Error", "chat.status.oclaw": "Assistant", "chat.status.plan": "Plan", "chat.status.running": "Running", "chat.status.start": "Starting", "chat.status.tool": "Tool", "chat.stop": "Stop", "chat.timeoutRecovered": "Request timed out; recovered this turn from history.", "chat.toolCall": "Tool call", "chat.toolResult": "Tool result", "chat.tools": "Reasoning", "chat.tools.hidden": "Reasoning hidden", "chat.tools.off": "Off", "chat.tools.on": "On", "chat.tools.visible": "Reasoning visible", "chat.truncatedNote": "…(truncated {n} chars for UI performance)", "chat.wikiPreviewClose": "Close", "chat.wikiPreviewTitle": "Wiki preview: {path}", "chat.wikiToastFailed": "Wiki capture failed: {error}", "chat.wikiToastMerged": "Wiki captured: +{merged} (dedup skipped {skipped})", "chat.wikiViewMerged": "View merged-turns", "chat.wikiViewTopic": "View topic: {topic}", "chat.wsInterruptedRecovered": "WS stream interrupted; recovered this turn from history.", "chat.zoomIn": "Zoom in", "chat.zoomOut": "Zoom out", "chat.zoomReset": "Reset zoom", "common.error": "Error", "lang.switch": "中文", "reasoning.processNotes": "Main-channel notes", "reasoning.summary": "Model reasoning", "theme.catppuccin": "Catppuccin Mocha", "theme.deepseek": "DeepSeek", "theme.dracula": "Dracula", "theme.forest": "Forest", "theme.github": "GitHub Dark", "theme.label": "Color theme", "theme.light": "Light", "theme.netx": "NetX Dark", "theme.nord": "Nord", "tool.streamTitle": "Tools & progress (this turn)", };