{
  "header": {
    "collapseSidebar": "Collapse sidebar",
    "expandSidebar": "Expand sidebar",
    "toggleConnection": "Toggle backend connection",
    "viewAnnualSummary": "View annual summary",
    "annualSummary": "2025 Annual Summary",
    "searchPlaceholder": "Search...",
    "viewDocs": "View MaiBot docs",
    "docs": "MaiBot Docs",
    "switchToLight": "Switch to light mode",
    "switchToDark": "Switch to dark mode",
    "logout": "Log out",
    "logoutLabel": "Logout",
    "notConnected": "Not connected"
  },
  "sidebar": {
    "groups": {
      "overview": "Overview",
      "botConfig": "Bot Configuration",
      "botResources": "Bot Resources",
      "extensionsMonitor": "Plugins & Extensions",
      "system": "System"
    },
    "menu": {
      "home": "Home",
      "botMainConfig": "Bot Main Config",
      "aiModelProvider": "AI Model Providers",
      "modelManagement": "Model Management",
      "promptManagement": "Prompt Management",
      "adapterConfig": "Adapter Config",
      "emojiManagement": "Emoji Management",
      "expressionManagement": "Expression Management",
      "slangManagement": "Slang Management",
      "personInfo": "Person Info",
      "knowledgeGraph": "Long-Term Memory Graph",
      "knowledgeBase": "Long-Term Memory",
      "pluginMarket": "Plugin Market",
      "configTemplate": "Config Templates",
      "pluginConfig": "Plugin Management",
      "mcpSettings": "MCP Settings",
      "logViewer": "Log Viewer",
      "reasoningProcess": "Reasoning Process",
      "maisakaMonitor": "MaiSaka Chat Monitor",
      "localChat": "Local Chat",
      "settings": "Settings"
    }
  },
  "workspace": {
    "switcherLabel": "Switch MaiBot workspace",
    "settings": "Mai Settings",
    "chat": "Mai Chat"
  },
  "chat": {
    "defaultTab": "WebUI",
    "botNameFallback": "Mai",
    "userFallback": "User",
    "userNameFallback": "WebUI User",
    "virtualGroupFallback": "WebUI Virtual Group",
    "status": {
      "connected": "Connected",
      "connecting": "Connecting...",
      "disconnected": "Disconnected"
    },
    "actions": {
      "cancel": "Cancel",
      "reconnect": "Reconnect",
      "save": "Save",
      "send": "Send message"
    },
    "identity": {
      "current": "Current identity:",
      "editName": "Edit nickname",
      "group": "Group: {{group}}",
      "namePlaceholder": "Enter nickname",
      "virtual": "Virtual identity:"
    },
    "input": {
      "placeholder": "Type a message...",
      "waiting": "Waiting for connection..."
    },
    "message": {
      "empty": "Start chatting with {{bot}}!",
      "emptyHint": "Type a message below and press Enter to send",
      "errorFallback": "An error occurred",
      "thinking": "Thinking..."
    },
    "composer": {
      "hint": "Enter to send · Shift + Enter for newline"
    },
    "sidebar": {
      "closeConversation": "Close {{label}}",
      "conversations": "Chat conversations",
      "emptyPreview": "No messages yet",
      "identityHint": "Local chat identity",
      "newVirtual": "New virtual identity chat",
      "online": "Online",
      "offline": "Offline",
      "subtitle": "{{count}} conversations",
      "title": "Chats",
      "webuiBadge": "WebUI",
      "virtualBadge": "Virtual",
      "profileTitle": "My identity",
      "editName": "Edit nickname",
      "saveName": "Save"
    },
    "dialog": {
      "create": "Create chat",
      "description": "Choose a user MaiBot already knows and chat as that user. MaiBot will respond using her memory and understanding of that user.",
      "groupName": "Virtual group name (optional)",
      "groupNameHint": "MaiBot will treat this as a group chat with this name",
      "knownUserSuffix": " · Known",
      "loading": "Loading...",
      "noUsers": "No users found",
      "personCount": "({{count}} people)",
      "platform": "Select platform",
      "platformPlaceholder": "Select platform",
      "searchUser": "Search user...",
      "title": "New virtual identity chat",
      "user": "Select user"
    },
    "media": {
      "audioUnsupported": "Your browser does not support audio playback",
      "emoji": "Emoji",
      "face": "[Face: {{data}}]",
      "file": "[File: {{data}}]",
      "forward": "[Forwarded message]",
      "image": "Image",
      "loadFailed": "[{{type}} failed to load]",
      "music": "[Music share]",
      "noCaptions": "No captions",
      "reply": "[Reply]",
      "unknown": "[{{type}}]",
      "unknownMessage": "Unknown message",
      "videoUnsupported": "Your browser does not support video playback"
    },
    "toast": {
      "backendUnavailable": "Cannot connect to the backend. Make sure MaiBot is running.",
      "backendUnavailableShort": "Cannot connect to the backend",
      "connectionFailed": "Connection failed",
      "currentSessionUnavailable": "The current chat session is unavailable. Please try again later.",
      "error": "Error",
      "incompleteConfig": "Incomplete configuration",
      "networkError": "Network error",
      "platformFailed": "Failed to load platforms",
      "selectPlatformAndUser": "Please select a platform and user",
      "sendFailed": "Send failed",
      "serverError": "Server returned error: {{status}}",
      "sessionUnavailable": "Cannot open the chat session. Please try again later.",
      "virtualTabCreated": "Virtual identity tab",
      "virtualTabCreatedDesc": "Created a chat for {{label}}"
    }
  },
  "layout": {
    "verifyingLogin": "Verifying login status...",
    "logoTitle": "MaiBot WebUI",
    "logoTitleShort": "M"
  },
  "httpWarning": {
    "title": "Security notice: ",
    "message": "You are accessing WebUI over HTTP.",
    "description": "Non-local HTTP connections may expose access tokens and configuration data. Use HTTPS or a trusted private network when possible.",
    "dismiss": "Dismiss HTTP security notice"
  },
  "settings": {
    "title": "Settings",
    "description": "Manage your application preferences",
    "tabs": {
      "appearance": "Appearance",
      "security": "Security",
      "other": "Other",
      "about": "About"
    },
    "appearance": {
      "themeMode": "Theme Mode",
      "themeModeDesc": "Light / Dark / Follow system",
      "light": "Light",
      "dark": "Dark",
      "system": "System",
      "accentColor": "Accent Color",
      "resetDefault": "Reset Default",
      "colorPreview": "Live Color Preview",
      "styleTweaks": "Style Tweaks",
      "typography": "Typography",
      "visualEffects": "Visual Effects",
      "layout": "Layout",
      "animation": "Animation",
      "background": "Background",
      "customCss": "Custom CSS",
      "animationEffect": "Animation Effect",
      "importExportTheme": "Import / Export Theme",
      "importTheme": "Import Theme",
      "exportTheme": "Export Theme",
      "importSuccess": "Import successful",
      "importFailed": "Import failed",
      "resetSuccess": "Reset successful",
      "fontFamily": "Font Family",
      "fontSize": "Font Size",
      "borderRadius": "Border Radius",
      "contentWidth": "Content Width",
      "sidebarWidth": "Sidebar Width",
      "animationSpeed": "Animation Speed",
      "backgroundImage": "Background Image",
      "backgroundBlur": "Background Blur",
      "backgroundOpacity": "Background Opacity",
      "lightDesc": "Always use light theme",
      "darkDesc": "Always use dark theme",
      "systemDesc": "Auto-switch based on system settings",
      "accentPrimary": "Primary Color",
      "accentHint": "Click the color ring or enter a HEX value",
      "resetTheme": "Reset to Default",
      "confirmResetTheme": "Confirm Reset Theme",
      "confirmResetThemeDesc": "This will reset all theme settings to default, including colors, fonts, layout and custom CSS. This cannot be undone, are you sure?",
      "confirmResetAction": "Confirm Reset",
      "cssWarningTitle": "The following have been filtered for safety:",
      "cssPlaceholder": "/* Enter custom CSS here */\n\n/* Example: */\n/* .sidebar { background: #1a1a2e; } */",
      "cssDescription": "Write custom CSS to further personalize the interface. Dangerous CSS (like @import, url()) will be automatically filtered.",
      "clearCss": "Clear",
      "exportDesc": "Export theme as a JSON file for sharing or backup; all settings will be applied automatically on import.",
      "importSuccessDesc": "Theme config imported, page will reload automatically",
      "resetSuccessDesc": "Theme has been reset to default",
      "enableAnimations": "Enable Animations",
      "enableAnimationsDesc": "Disabling this will turn off all transition animations and effects, improving performance",
      "loginWavesBackground": "Login Page Wave Background",
      "loginWavesBackgroundDesc": "Disabling this will use a solid color background on the login page, suitable for low-performance devices",
      "inheritParentBg": "Inherit Parent Background",
      "inheritParentBgDesc": "When enabled, uses the background config from the parent layer",
      "fontFamilyLabel": "Font Family",
      "fontFamilyPlaceholder": "Select font family",
      "fontFamilySystem": "System Default (System)",
      "fontFamilySans": "Sans-serif",
      "fontFamilySerif": "Serif",
      "fontFamilyMono": "Monospace",
      "baseFontSize": "Base Font Size",
      "lineHeight": "Line Height",
      "lineHeightPlaceholder": "Select line height",
      "lineHeightCompact": "Compact (1.2)",
      "lineHeightNormal": "Normal (1.5)",
      "lineHeightLoose": "Loose (1.75)",
      "borderRadiusLabel": "Border Radius",
      "shadowLabel": "Shadow Intensity",
      "shadowPlaceholder": "Select shadow intensity",
      "shadowNone": "None",
      "shadowSm": "Small",
      "shadowMd": "Medium",
      "shadowLg": "Large",
      "shadowXl": "Extra Large",
      "blurLabel": "Blur Effect",
      "sidebarWidthLabel": "Sidebar Width",
      "maxContentWidth": "Max Content Width",
      "spacingUnit": "Spacing Unit",
      "animationSpeedLabel": "Animation Speed",
      "animationSpeedPlaceholder": "Select animation speed",
      "animationFast": "Fast (100ms)",
      "animationNormal": "Normal (300ms)",
      "animationSlow": "Slow (500ms)",
      "animationOff": "Off (0ms)",
      "bgPage": "Page",
      "bgSidebar": "Sidebar",
      "typographyGroup": "Typography",
      "visualGroup": "Visual Effects",
      "layoutGroup": "Layout",
      "animationGroup": "Animation",
      "backgroundGroup": "Background Settings"
    },
    "security": {
      "currentToken": "Current Access Token",
      "yourToken": "Your Access Token",
      "regenerate": "Regenerate",
      "customToken": "Custom Access Token",
      "securityTip": "Security Tips",
      "cannotCopy": "Cannot copy",
      "copySuccess": "Copied",
      "copyFailed": "Copy failed",
      "updateSuccess": "Updated",
      "updateFailed": "Update failed",
      "generateSuccess": "Generated",
      "generateFailed": "Generation failed",
      "newToken": "New Access Token",
      "confirmRegenerate": "Confirm Regenerate Token",
      "confirmRegenerateDesc": "The old token will be invalidated after regeneration. You will need to log in again.",
      "cancel": "Cancel",
      "confirm": "Confirm",
      "cannotCopyDesc": "Token is stored in a secure Cookie. Please regenerate to get a new Token.",
      "copySuccessDesc": "Token copied to clipboard",
      "copyFailedDesc": "Please copy the Token manually",
      "inputError": "Input error",
      "inputErrorDesc": "Please enter a new Token",
      "formatError": "Format error",
      "formatErrorDesc": "Token does not meet requirements: {{failedRules}}",
      "updateSuccessDesc": "Access Token updated. Redirecting to login page.",
      "updateFailedDesc": "Unable to update Token",
      "updateFailedConn": "Failed to connect to server",
      "generateSuccessDesc": "New Access Token generated. Please save it immediately.",
      "generateFailedDesc": "Unable to generate new Token",
      "generateFailedConn": "Failed to connect to server",
      "cannotView": "Cannot view",
      "cannotViewDesc": "Token is stored in a secure Cookie. Click \"Regenerate\" to get a new Token.",
      "hide": "Hide",
      "show": "Show",
      "copyTip": "Copy to clipboard",
      "regenerateShort": "Generate",
      "confirmRegenerateFullDesc": "This will generate a new 64-character secure token, immediately invalidating the current Token. You will need to log in again with the new Token. This action cannot be undone. Are you sure?",
      "confirmGenerate": "Confirm Generate",
      "tokenStorePlaceholder": "Token is stored in a secure Cookie",
      "safekeepTip": "Keep your Access Token safe and do not share it with others.",
      "newTokenLabel": "New Access Token",
      "customTokenPlaceholder": "Enter custom Token",
      "tokenReqTitle": "Token security requirements:",
      "tokenValid": "Token format is valid and ready to use",
      "updateBtn": "Update Custom Token",
      "updating": "Updating...",
      "dialogTitle": "New Access Token",
      "dialogDesc": "This is your new Token. Please save it immediately. You will be redirected to the login page after closing this window.",
      "dialogTokenLabel": "Your new Token (64-char secure token)",
      "important": "Important Notice",
      "tip1": "This Token is only shown once and cannot be viewed after closing",
      "tip2": "Copy and save it to a secure location immediately",
      "tip3": "You will be automatically redirected to the login page after closing",
      "tip4": "Use the new Token to log back in",
      "copied": "Copied",
      "copyToken": "Copy Token",
      "savedClose": "Saved, close",
      "securityTip1": "Regenerating creates a new system-generated 64-character secure token",
      "securityTip2": "Custom Tokens must meet all security requirements",
      "securityTip3": "After updating, the old Token will be immediately invalidated",
      "securityTip4": "View and copy your Token only in a secure environment",
      "securityTip5": "If you suspect a Token leak, regenerate or update it immediately",
      "securityTip6": "System-generated Tokens are recommended for maximum security"
    },
    "other": {
      "performance": "Performance & Storage",
      "localStorage": "Local Storage Usage",
      "logCache": "Log Cache Size",
      "importExport": "Import / Export Settings",
      "configWizard": "Config Wizard",
      "devTools": "Developer Tools",
      "clearStorage": "Clear Local Storage",
      "clearStorageDesc": "Clear all local storage data",
      "clearStorageConfirm": "Confirm Clear",
      "clearLogCache": "Clear Log Cache",
      "clearLogCacheDesc": "Clear all cached log data",
      "clearLogCacheConfirm": "Confirm Clear",
      "importSettings": "Import Settings",
      "exportSettings": "Export Settings",
      "resetAllSettings": "Reset All Settings",
      "resetAllSettingsDesc": "Restore all settings to defaults",
      "resetAllSettingsConfirm": "Confirm Reset",
      "clearStorageSuccess": "Local storage cleared",
      "clearStorageFailed": "Failed to clear",
      "clearLogSuccess": "Log cache cleared",
      "clearLogFailed": "Failed to clear",
      "importSuccess": "Import successful",
      "importFailed": "Import failed",
      "exportSuccess": "Export successful",
      "exportFailed": "Export failed",
      "resetSuccess": "Reset successful",
      "resetFailed": "Reset failed",
      "storageItems": "{{count}} storage items",
      "logCacheSizeDesc": "Controls the maximum number of log entries cached. Larger values use more memory.",
      "logCacheSizeUnit": "entries",
      "dataSyncIntervalLabel": "Home Data Refresh Interval",
      "dataSyncIntervalUnit": "s",
      "dataSyncIntervalDesc": "Controls the auto-refresh interval for home page statistics",
      "wsReconnectLabel": "WebSocket Reconnect Interval",
      "wsReconnectUnit": "s",
      "wsReconnectDesc": "Base reconnect interval after log WebSocket disconnects",
      "wsMaxReconnectLabel": "WebSocket Max Reconnect Attempts",
      "wsMaxReconnectUnit": "times",
      "wsMaxReconnectDesc": "Maximum reconnect attempts after connection failure",
      "clearLogCacheFn": "Clear Log Cache",
      "clearLocalCache": "Clear Local Cache",
      "confirmClearCache": "Confirm Clear Local Cache",
      "confirmClearCacheDesc": "This will clear all locally cached settings and data (excluding login credentials). You may need to reconfigure some preferences. Are you sure?",
      "confirmClear": "Confirm Clear",
      "importExportDesc": "Export current interface settings for backup, or restore from a previously exported file.",
      "exporting": "Exporting...",
      "importing": "Importing...",
      "resetAllSettingsBtn": "Reset All Settings to Defaults",
      "confirmResetAll": "Confirm Reset All Settings",
      "confirmResetAllDesc": "This will restore all interface settings to their defaults, including theme, colors, animation, and other preferences. This will not affect your login status. Are you sure?",
      "configWizardDesc": "Re-run the initial setup wizard to reconfigure system basics.",
      "rerunSetup": "Re-run Initial Setup",
      "confirmRerunSetup": "Confirm Re-run Setup",
      "confirmRerunSetupDesc": "This will take you back to the initial setup wizard. You can reconfigure the system basics. Are you sure?",
      "devToolsDesc": "The following features are for development and debugging only. They may cause crashes or abnormal behavior.",
      "triggerError": "Trigger Test Error",
      "confirmTriggerError": "Confirm Trigger Error",
      "confirmTriggerErrorDesc": "This will manually trigger a React error to test the error boundary component. The page will display an error view; you can recover by refreshing the page or clicking Go Home.",
      "confirmTrigger": "Confirm Trigger",
      "logCleared": "Log cleared",
      "logClearedDesc": "Log cache has been cleared",
      "cacheCleared": "Cache cleared",
      "cacheClearedDesc": "Cleared {{count}} cached items",
      "exportSuccessDesc": "Settings exported as a JSON file",
      "exportFailedDesc": "Unable to export settings",
      "importSuccessDesc": "Successfully imported {{imported}} settings",
      "importSkippedSuffix": ", skipped {{skipped}}",
      "importRefreshHint": "Note",
      "importRefreshHintDesc": "Some settings require a page refresh to take full effect",
      "importNoDataDesc": "No valid settings to import",
      "importInvalidDesc": "Invalid file format",
      "resetDone": "Reset done",
      "resetDoneDesc": "All settings restored to defaults. Refresh the page to apply changes."
    },
    "about": {
      "openSource": "Open Source",
      "aboutApp": "About MaiBot Dashboard",
      "version": "Version:",
      "author": "Author",
      "techStack": "Tech Stack",
      "frontendFramework": "Frontend Framework",
      "uiComponents": "UI Components",
      "backend": "Backend",
      "buildTool": "Build Tool",
      "openSourceThanks": "Open Source Libraries",
      "openSourceLicense": "Open Source License",
      "openSourceDesc": "This project is open source on GitHub. Give us a Star ⭐!",
      "visitGitHub": "Visit GitHub",
      "appDesc": "A modern Web management interface for MaiBot",
      "maimaiCore": "MaiBot Core",
      "uiFrameworkGroup": "UI Framework & Components",
      "routingStateGroup": "Routing & State Management",
      "formGroup": "Form Handling",
      "utilsGroup": "Utility Libraries",
      "animationGroup": "Animation",
      "backendGroup": "Backend Framework",
      "devToolsGroup": "Developer Tools",
      "openSourceThanksDesc": "This project uses the following excellent open source libraries. Thank you for your contributions:",
      "licenseDesc": "This project is licensed under the GNU General Public License v3.0. You are free to use, modify, and distribute the software, provided you keep the same open source license.",
      "licenseDeps": "All open source libraries used by this project comply with their respective licenses (MIT, Apache-2.0, BSD, etc.). Thank you to all open source contributors for your selfless work.",
      "lib": {
        "react": "UI library for building user interfaces",
        "shadcn": "Elegant React component library",
        "radix": "Unstyled accessible component primitives",
        "tailwind": "Utility-first CSS framework",
        "lucide": "Beautiful icon library",
        "tanstackRouter": "Type-safe routing library",
        "zustand": "Lightweight state management",
        "reactHookForm": "High-performance form library",
        "zod": "TypeScript-first schema validation",
        "clsx": "Conditional className builder",
        "tailwindMerge": "Tailwind class name merger",
        "cva": "Component variant management",
        "dateFns": "Modern date utility library",
        "framerMotion": "React animation library",
        "vaul": "Drawer component animation",
        "fastapi": "Modern Python web framework",
        "uvicorn": "ASGI server",
        "pydantic": "Data validation library",
        "pythonMultipart": "File upload support",
        "typescript": "Superset of JavaScript",
        "vite": "Next-generation frontend build tool",
        "eslint": "JavaScript code linter"
      }
    }
  },
  "auth": {
    "title": "Login",
    "description": "Enter your access token to continue",
    "tokenLabel": "Access Token",
    "tokenPlaceholder": "Enter Access Token",
    "loginButton": "Login",
    "loggingIn": "Logging in...",
    "loginFailed": "Login failed",
    "loginSuccess": "Login successful",
    "checkingAuth": "Checking login status...",
    "welcome": "Welcome to MaiBot",
    "accessDesc": "Enter your Access Token to continue accessing the system",
    "tokenRequired": "Please enter your Access Token",
    "verifyingLabel": "Verifying...",
    "verifyEnter": "Verify & Enter",
    "helpLink": "I don't have a Token. Where can I get one?",
    "helpTitle": "How to Get an Access Token",
    "helpDesc": "Access Token is the only credential to access MaiBot WebUI. Get yours in one of the following ways",
    "method1Title": "Method 1: Check Startup Log",
    "method1Desc": "When MaiBot starts, the console will display the WebUI Access Token.",
    "method1Example1": "🔑 WebUI Access Token: abc123...",
    "method1Example2": "💡 Use this Token to log in to WebUI",
    "method2Title": "Method 2: Check Config File",
    "method2Desc": "The Token is saved in the config file at the project root:",
    "method2FileHint": "Open this file and copy the value of the access_token field",
    "securityTipTitle": "Security Notice",
    "securityTip1": "Keep your Token safe and never share it with others",
    "securityTip2": "To reset the Token, go to System Settings after logging in",
    "slowLink": "The interface feels laggy. What can I do?",
    "disableAnimTitle": "Disable Background Animation",
    "disableAnimDesc": "Background animation may cause lag on low-performance devices. Disabling it can significantly improve smoothness.",
    "disableAnimDetail": "After disabling, the background will be a solid color, but all features remain fully functional. You can re-enable it anytime in System Settings.",
    "disableAnimBtn": "Disable Animation",
    "verifyFailed": "Token verification failed. Please check and try again.",
    "connFailed": "Failed to connect to the server. Please check your network connection.",
    "switchToLight": "Switch to light mode",
    "switchToDark": "Switch to dark mode"
  },
  "setupPage": {
    "steps": {
      "botBasic": {
        "title": "Bot Basics",
        "description": "Configure the bot's basic information"
      },
      "personality": {
        "title": "Personality",
        "description": "Define the bot's personality and speaking style"
      },
      "apiProvider": {
        "title": "API Setup",
        "description": "Configure the API provider"
      },
      "modelSetup": {
        "title": "Model Setup",
        "description": "Configure planner and replyer models"
      }
    },
    "loading": {
      "title": "Loading configuration...",
      "description": "Reading existing configuration"
    },
    "header": {
      "title": "Initial Setup Wizard",
      "description": "Let's complete the initial setup for {{appName}}"
    },
    "progress": {
      "stepCounter": "Step {{current}} / {{total}}"
    },
    "validation": {
      "selectPlatform": "Please select a platform",
      "enterNickname": "Please enter a nickname",
      "enterQqAccount": "Please enter a QQ account",
      "enterAccountId": "Please enter an account ID",
      "enterProviderName": "Please enter an API provider name",
      "enterBaseUrl": "Please enter the API base URL",
      "enterApiKey": "Please enter the API key",
      "enterPlannerModelIdentifier": "Please enter the planner model identifier",
      "enterReplyerModelIdentifier": "Please enter the replyer model identifier"
    },
    "toast": {
      "loadFailedTitle": "Failed to load configuration",
      "loadFailedDescription": "Unable to load the existing configuration. Default values will be used.",
      "saveSuccessTitle": "Saved successfully",
      "saveSuccessDescription": "{{step}} configuration has been saved",
      "saveFailedTitle": "Save failed",
      "validationFailedTitle": "Validation failed",
      "completeSuccessTitle": "Setup complete",
      "completeSuccessDescription": "{{appName}} is restarting to apply the new configuration...",
      "completeFailedTitle": "Setup failed",
      "skipFailedTitle": "Failed to skip the setup wizard",
      "unknownError": "Unknown error"
    },
    "actions": {
      "previous": "Previous",
      "next": "Next",
      "skip": "Skip Wizard",
      "complete": "Complete Setup",
      "saving": "Saving...",
      "completing": "Completing..."
    },
    "skipDialog": {
      "title": "Skip the setup wizard?",
      "description": "You can reopen the setup wizard anytime from System Settings. Are you sure you want to skip it?",
      "confirm": "Skip Anyway"
    },
    "footer": "You can change these settings anytime in Settings",
    "defaults": {
      "personality": {
        "personality": "She is a sophomore college student who spends time on Tieba.",
        "replyStyle": "Keep replies plain and concise, speak Chinese, and avoid deliberately emphasizing any academic background. You can refer to the reply styles commonly seen on Tieba, Zhihu, and Weibo.",
        "multipleReplyStyles": {
          "plain": "Your style is plain, lightly sarcastic, very short, and colloquial. You can reference Tieba and Weibo reply styles.",
          "shortText": "Reply with 1-2 words",
          "shortSymbol": "Reply with 1-2 symbols",
          "translation": "Use a slightly translated tone, but keep it short"
        }
      },
      "emoji": {
        "filtrationPrompt": "Appropriate and safe for general audiences"
      }
    },
    "forms": {
      "botBasic": {
        "platform": {
          "label": "Platform *",
          "placeholder": "Select a platform",
          "description": "Choose the platform where the bot runs",
          "options": {
            "custom": "Other Platform"
          }
        },
        "customPlatform": {
          "label": "Platform Name *",
          "placeholder": "Enter a platform name, such as matrix"
        },
        "qqAccount": {
          "label": "QQ Account *",
          "placeholder": "Enter the bot's QQ account",
          "description": "The QQ account used to log in the bot"
        },
        "primaryAccount": {
          "label": "Account ID *",
          "placeholder": "Enter the bot's account ID",
          "description": "The bot's account identifier on this platform"
        },
        "nickname": {
          "label": "Nickname *",
          "placeholder": "Enter the bot's nickname",
          "description": "The bot's primary display name"
        },
        "alias": {
          "label": "Aliases",
          "placeholder": "Type an alias and press Enter to add it",
          "add": "Add",
          "description": "Other names for the bot. You can add multiple aliases.",
          "remove": "Remove alias {{alias}}"
        }
      },
      "personality": {
        "personality": {
          "label": "Personality Traits *",
          "placeholder": "Describe the bot's personality and identity traits (recommended within 120 characters)",
          "description": "Example: a sophomore college girl who browses Tieba"
        },
        "replyStyle": {
          "label": "Reply Style *",
          "placeholder": "Describe how the bot speaks and expresses itself",
          "description": "Example: keep replies plain and concise, speak Chinese, and refer to styles seen on Tieba, Zhihu, and Weibo"
        },
        "multipleReplyStyle": {
          "label": "Alternate Reply Styles",
          "placeholder": "Enter one alternate reply style per line",
          "description": "When this list is not empty, MaiBot may randomly replace the default reply style using the probability below"
        },
        "multipleProbability": {
          "label": "Alternate Style Probability",
          "description": "The chance of randomly replacing the default reply style each time a reply is built"
        }
      },
      "emoji": {
        "emojiSendNum": {
          "label": "Emoji Candidate Count",
          "description": "How many emojis to choose from before sending. Maximum is 64"
        },
        "maxRegNum": {
          "label": "Maximum Emoji Count",
          "description": "The maximum number of emojis the bot can store"
        },
        "doReplace": {
          "label": "Replace When Full",
          "description": "When enabled, old emojis will be removed; when disabled, new emojis will no longer be collected"
        },
        "checkInterval": {
          "label": "Check Interval (Minutes)",
          "description": "How often to check emoji registration, damage, and deletion"
        },
        "stealEmoji": {
          "label": "Collect Emojis",
          "description": "Allow the bot to keep certain emojis for itself"
        },
        "contentFiltration": {
          "label": "Enable Emoji Filtering",
          "description": "Only save emojis that meet the requirements"
        },
        "filtrationPrompt": {
          "label": "Filter Requirements",
          "placeholder": "For example: appropriate and safe for general audiences",
          "description": "Describe what kind of emojis should be allowed"
        }
      },
      "other": {
        "allGlobal": {
          "label": "Enable Global Slang Mode",
          "description": "Allow the bot to learn and use group-specific slang"
        }
      },
      "apiProvider": {
        "providerName": {
          "label": "API Provider Name *",
          "placeholder": "For example OpenAI, DeepSeek, or self-hosted",
          "description": "This name is written to model_config.toml and referenced by the models below"
        },
        "baseUrl": {
          "label": "API Base URL *",
          "description": "Enter an OpenAI-compatible endpoint, for example https://api.example.com/v1"
        },
        "apiKey": {
          "label": "API Key *",
          "description": "Enter the API key for this provider",
          "show": "Show API key",
          "hide": "Hide API key"
        }
      },
      "modelSetup": {
        "planner": {
          "identifier": {
            "label": "planner Model Identifier *",
            "description": "The real model ID provided by the API service; the model name will be initialized from it"
          },
          "visual": {
            "label": "Enable vision"
          }
        },
        "replyer": {
          "identifier": {
            "label": "replyer Model Identifier *",
            "description": "The real model ID provided by the API service; the model name will be initialized from it"
          },
          "visual": {
            "label": "Enable vision"
          }
        },
        "saveHint": "You can configure more detailed task assignment later."
      }
    }
  },
  "common": {
    "loading": "Loading...",
    "error": "Error",
    "retry": "Retry",
    "save": "Save",
    "cancel": "Cancel",
    "confirm": "Confirm",
    "delete": "Delete",
    "edit": "Edit",
    "close": "Close",
    "search": "Search",
    "noData": "No data",
    "success": "Success",
    "failed": "Failed"
  },
  "restart": {
    "preparing": "Preparing to restart",
    "preparingDesc": "Sending restart request...",
    "preparingTip": "🔄 Preparing to restart MaiBot...",
    "restarting": "Restarting MaiBot",
    "restartingDesc": "Please wait, MaiBot is restarting...",
    "restartingTip": "🔄 Config saved, restarting main process...",
    "checking": "Checking service status",
    "checkingDesc": "Waiting for service to recover... ({{current}}/{{max}})",
    "checkingTip": "⏳ Waiting for service to recover, do not close this page...",
    "success": "Restart successful",
    "successDesc": "Redirecting to login page...",
    "successTip": "✅ Config applied, service is running normally",
    "failed": "Restart timed out",
    "failedDesc": "Service failed to recover within the expected time",
    "failedTip": "⚠️ If unresponsive for a long time, try restarting manually",
    "refreshPage": "Refresh page",
    "retryCheck": "Retry check",
    "elapsed": "Elapsed:"
  },
  "errorBoundary": {
    "title": "Something went wrong",
    "description": "The application encountered an unexpected error. You can try refreshing the page or going back home.",
    "refreshPage": "Refresh page",
    "goHome": "Go home",
    "footer": "If the problem persists, copy the error info and report it to the developer",
    "copiedToClipboard": "Copied to clipboard",
    "copyError": "Copy error info"
  },
  "search": {
    "placeholder": "Search pages...",
    "title": "Search",
    "noResults": "No matching pages found",
    "startSearch": "Type a keyword to start searching",
    "navigate": "Navigate",
    "select": "Select",
    "close": "Close",
    "categories": {
      "overview": "Overview",
      "config": "Config",
      "resources": "Resources",
      "monitor": "Monitor",
      "extensions": "Extensions",
      "system": "System"
    },
    "items": {
      "home": "Home",
      "homeDesc": "View dashboard overview",
      "botConfig": "Bot Main Config",
      "botConfigDesc": "Configure bot core settings",
      "modelProvider": "Model Provider Config",
      "modelProviderDesc": "Configure model providers",
      "model": "Model Config",
      "modelDesc": "Configure model parameters",
      "emoji": "Emoji Management",
      "emojiDesc": "Manage bot emoji",
      "expression": "Expression Management",
      "expressionDesc": "Manage bot expressions",
      "person": "Person Info",
      "personDesc": "Manage person info",
      "jargon": "Slang Management",
      "jargonDesc": "Manage bot learned slang and jargon",
      "statistics": "Statistics",
      "statisticsDesc": "View usage statistics",
      "plugins": "Plugin Market",
      "pluginsDesc": "Browse and install plugins",
      "logs": "Log Viewer",
      "logsDesc": "View system logs",
      "reasoningProcessDesc": "Browse Maisaka prompt reasoning logs",
      "settings": "Settings",
      "settingsDesc": "Configure system settings"
    }
  },
  "a11y": {
    "skipToContent": "Skip to main content",
    "sidebarNav": "Main navigation",
    "closeMenu": "Close menu",
    "navigatedTo": "Navigated to {{page}}"
  },
  "home": {
    "title": "Live Monitor",
    "subtitle": "MaiBot runtime status and statistics overview",
    "loading": "Loading statistics...",
    "loadingHint": "Fetching MaiBot runtime data",
    "timeRange": {
      "24h": "24 Hours",
      "7d": "7 Days",
      "30d": "30 Days"
    },
    "autoRefresh": "Auto Refresh",
    "botStatus": {
      "title": "MaiBot Status",
      "running": "Running",
      "stopped": "Stopped",
      "uptime": "Up {{time}}"
    },
    "quickActions": {
      "title": "Quick Actions",
      "restart": "Restart MaiBot",
      "restarting": "Restarting...",
      "expressionReview": "Expression Review",
      "viewLogs": "View Logs",
      "pluginManage": "Plugins",
      "systemSettings": "Settings"
    },
    "survey": {
      "title": "Feedback Survey",
      "description": "Help us improve the experience",
      "webui": "WebUI Feedback",
      "maibot": "MaiBot Feedback"
    },
    "stats": {
      "totalRequests": "Total Requests",
      "totalCost": "Total Cost",
      "tokenUsage": "Token Usage",
      "avgResponse": "Avg Response",
      "avgResponseDesc": "Avg API latency",
      "onlineTime": "Online Time",
      "messageProcessing": "Messages",
      "costEfficiency": "Cost Efficiency",
      "recentPeriod": "Last {{range}}",
      "perHour": "{{value}}/hr",
      "noData": "No data",
      "replied": "{{num}} replies",
      "per100Messages": "Per 100 messages",
      "seconds": "sec",
      "hours": "hours",
      "days": "days"
    },
    "charts": {
      "tabs": {
        "trends": "Trends",
        "models": "Models",
        "activity": "Activity",
        "daily": "Daily"
      },
      "requestTrend": "Request Trend",
      "requestTrendDesc": "Request volume over the last {{hours}} hours",
      "costTrend": "Cost Trend",
      "costTrendDesc": "API call cost over time",
      "tokenUsage": "Token Usage",
      "tokenUsageDesc": "Token consumption over time",
      "modelDistribution": "Model Request Distribution",
      "modelDistributionDesc": "Usage share per model ({{count}} models)",
      "modelDetails": "Model Details",
      "modelDetailsDesc": "Requests, cost and performance",
      "recentActivity": "Recent Activity",
      "recentActivityDesc": "Latest API call records",
      "dailyStats": "Daily Statistics",
      "dailyStatsDesc": "Data summary for the last 7 days",
      "requests": "Requests",
      "cost": "Cost (¥)",
      "requestCount": "Requests",
      "costLabel": "Cost",
      "avgTime": "Avg Time",
      "timeCost": "Duration",
      "status": "Status"
    },
    "time": {
      "hoursMinutes": "{{hours}}h {{minutes}}m"
    },
    "hitokotoFallback": "Life is like a box of chocolates, you never know what you're gonna get.",
    "hitokotoFallbackFrom": "Forrest Gump",
    "unknownSource": "Unknown",
    "ariaLabel": {
      "requestTrend": "Hourly request trend chart showing request count changes over recent hours",
      "costTrend": "API cost trend chart showing API call cost changes over recent hours",
      "tokenUsage": "Token usage trend chart showing token consumption over recent hours"
    }
  }
}
