{
  "common": {
    "confirm": "Confirm",
    "cancel": "Cancel",
    "close": "Close",
    "refresh": "Refresh",
    "refreshing": "Refreshing...",
    "loading": "Loading...",
    "save": "Save",
    "saving": "Saving...",
    "error": "Error",
    "ok": "OK",
    "and": "and"
  },
  "nav": {
    "chat": "Chat",
    "agent": "Agent",
    "sessions": "Sessions",
    "heartbeat": "Heartbeat",
    "cron": "Scheduled Tasks",
    "skills": "Skills",
    "channels": "Channels",
    "settings": "Settings",
    "config": "Configuration",
    "browser": "Browser Service",
    "logs": "Logs"
  },
  "statusBar": {
    "cancel": "Cancel",
    "pause": "Pause",
    "resume": "Resume",
    "processing": "Processing...",
    "paused": "Paused",
    "pausedWithTask": "Paused: {{task}}..."
  },
  "chat": {
    "placeholder": "Enter to send, Shift+Enter for new line, hold mic to record",
    "placeholderProcessing": "Processing, enter to interrupt...",
    "placeholderProcessingQueue": "Processing, new input will join the queue...",
    "placeholderVoice": "Listening...",
    "welcomeLogoAlt": "JiuwenClaw logo",
    "welcomeHeading": "Hi, I'm JiuwenClaw. Nice to meet you!",
    "welcomeSubtext": "I can answer questions, clear up confusion, and help you complete tasks.",
    "welcomeSuggestions": {
      "journey": "Let's begin a brand-new journey!",
      "skills": "Can you tell me what skills you have?"
    },
    "newSession": "New Session",
    "sessionCreated": "Session created",
    "modePlan": "Task Planning",
    "modeAgent": "Smart Execution",
    "recording": "Recording... (release to send)",
    "waitingTasks": "Waiting tasks",
    "waitingTasksCount": "Waiting tasks ({{count}})",
    "removeTask": "Remove task",
    "holdToSpeak": "Hold to speak",
    "send": "Send (Enter)",
    "newSessionDisabled": "Cannot create session while processing or recording"
  },
  "connection": {
    "connected": "Connected",
    "disconnected": "Disconnected",
    "connecting": "Connecting...",
    "loadingConfig": "Loading config..."
  },
  "toolPanel": {
    "status": "Status",
    "contextCompression": "Context compression",
    "memoryUsage": "Memory usage",
    "message": "Message",
    "time": "Time",
    "heartbeatClick": "Heartbeat message, click to view",
    "poweredBy": "Powered by openJiuwen"
  },
  "todoList": {
    "title": "Task list",
    "empty": "No tasks",
    "inProgress": "In progress",
    "pending": "Pending",
    "completed": "Completed"
  },
  "sessions": {
    "title": "Session Management",
    "subtitle": "Browse and manage sessions and files",
    "history": "Session History",
    "count": "Up to 20 items, currently {{count}}",
    "empty": "No sessions",
    "delete": "Delete session",
    "files": "Session Files",
    "selectFirst": "Select a session first",
    "loadingFiles": "Loading files...",
    "emptyFiles": "No files",
    "folder": "Folder",
    "notPreviewable": "Not previewable",
    "selectFile": "Select a file to view",
    "noneSelected": "No session selected",
    "unknownSession": "Unknown session-unknown time",
    "unknownTime": "unknown time",
    "deleteConfirm": "Delete session {{session}}?\nAll files in this session directory will be removed.",
    "prefixes": {
      "session": "Session",
      "cron": "Scheduled",
      "feishu": "Lark",
      "xiaoyi": "Xiaoyi",
      "dingtalk": "DingTalk",
      "heartbeat": "Heartbeat",
      "unknown": "Unknown"
    },
    "errors": {
      "loadSessions": "Failed to load sessions",
      "loadFiles": "Failed to load session files",
      "deleteSession": "Failed to delete session: {{sessionId}}"
    }
  },
  "sessionSidebar": {
    "newSession": "New session"
  },
  "heartbeat": {
    "title": "Heartbeat Management",
    "subtitle": "Maintain heartbeat settings and instruction files",
    "configTitle": "Heartbeat Settings",
    "configSubtitle": "Configure heartbeat interval, target channel, and active hours",
    "loadingConfig": "Loading heartbeat settings...",
    "saved": "Heartbeat settings saved",
    "badges": {
      "ok": "Recent heartbeat is healthy",
      "alert": "Recent heartbeat is alerting",
      "unknown": "No heartbeat result yet"
    },
    "everyLabel": "Interval (seconds)",
    "targetLabel": "Target channel (channel_id)",
    "enableActiveHours": "Enable active hours",
    "startTime": "Start time",
    "endTime": "End time",
    "recentMessages": "Recent 20 heartbeat messages",
    "noHistory": "No heartbeat history",
    "statusOk": "OK",
    "statusUnknown": "UNKNOWN",
    "latestTime": "Latest heartbeat time",
    "latestContent": "Latest heartbeat content",
    "none": "None",
    "channels": {
      "web": "Web (web)",
      "feishu": "Lark (feishu)",
      "xiaoyi": "Xiaoyi (xiaoyi)",
      "dingtalk": "DingTalk (dingtalk)"
    },
    "errors": {
      "loadConfig": "Failed to load heartbeat settings",
      "saveConfig": "Failed to save heartbeat settings",
      "invalidEvery": "Heartbeat interval must be a number greater than 0",
      "invalidActiveHours": "active_hours must use HH:MM format (for example 08:00)",
      "invalidRange": "End time must be later than start time"
    }
  },
  "heartbeatModal": {
    "closeAria": "Close heartbeat details dialog",
    "title": "Heartbeat message",
    "subtitle": "Message details",
    "empty": "No detailed content"
  },
  "offloadFiles": {
    "title": "Offload Files",
    "count": "{{count}} files",
    "notConnected": "Session not connected",
    "empty": "No offload files",
    "previewFallback": "Offload file content",
    "previewTitle": "Offload message file preview",
    "emptyContent": "File content is empty",
    "errors": {
      "loadFiles": "Failed to load offload files",
      "loadContent": "Failed to load content"
    }
  },
  "userQuestion": {
    "title": "Confirmation needed",
    "subtitle": "Answer the following questions to continue",
    "submit": "Submit",
    "multiSelect": "(Multiple choice)",
    "customOption": "Other (custom input)",
    "customPlaceholder": "Enter your answer..."
  },
  "sourceManager": {
    "closeAria": "Close source manager dialog",
    "title": "Source Manager",
    "subtitle": "Add, remove, enable, or disable skill sources",
    "addTitle": "Add source",
    "add": "Add",
    "configuredCount": "Configured sources ({{count}})",
    "empty": "No configured sources",
    "updatedAt": "Updated at {{time}}",
    "placeholders": {
      "name": "Source name",
      "url": "Git repository URL (https://...)"
    },
    "status": {
      "enabled": "Enabled",
      "disabled": "Disabled"
    },
    "actions": {
      "enable": "Enable",
      "disable": "Disable",
      "delete": "Delete"
    },
    "messages": {
      "fillRequired": "Please enter both the source name and repository URL",
      "addFailed": "Failed to add source",
      "addFailedCheck": "Failed to add source. Check the name or URL.",
      "added": "Added source: {{name}} (disabled by default)",
      "confirmDelete": "Delete source {{name}}?",
      "removeFailed": "Failed to remove source",
      "removeFailedRetry": "Failed to remove source. Please try again later.",
      "removed": "Removed source: {{name}}",
      "toggleFailed": "Failed to change source status",
      "enabled": "Enabled source: {{name}}",
      "disabled": "Disabled source: {{name}}",
      "enableFailed": "Failed to enable source. Check the network or repository URL.",
      "disableFailed": "Failed to disable source. Please try again later.",
      "loadFailed": "Failed to load source list. Please retry."
    }
  },
  "channels": {
    "title": "Channel Management",
    "subtitle": "View and manage channel services",
    "fetchFailed": "Fetch failed",
    "retry": "Retry",
    "listTitle": "Channel List",
    "listMeta": "Channels: {{status}}, refreshed at: {{time}}",
    "hideValue": "Hide value",
    "showValue": "Show value",
    "labels": {
      "web": "Web",
      "xiaoyi": "Xiaoyi",
      "feishu": "Lark",
      "dingtalk": "DingTalk"
    },
    "status": {
      "loadFailed": "Load failed",
      "enabledSummary": "{{enabledCount}}/{{total}} enabled",
      "adapting": "Adapting",
      "enabled": "Enabled",
      "disabled": "Disabled"
    },
    "config": {
      "webTitle": "Web Channel Configuration",
      "webSubtitle": "Configure web channel service settings",
      "webEmpty": "The web channel has no configurable settings. Click another channel to load its configuration.",
      "xiaoyiTitle": "Xiaoyi Channel Configuration",
      "xiaoyiSubtitle": "Configure Xiaoyi channel service settings",
      "dingtalkTitle": "DingTalk Channel Configuration",
      "dingtalkSubtitle": "Configure DingTalk channel service settings",
      "feishuTitle": "Lark Channel Configuration",
      "feishuSubtitle": "Configure Lark channel service settings"
    },
    "loading": {
      "xiaoyi": "Loading Xiaoyi settings...",
      "dingtalk": "Loading DingTalk settings...",
      "feishu": "Loading Lark settings..."
    },
    "placeholders": {
      "configValue": "Enter a configuration value",
      "appId": "Enter the app ID",
      "appSecret": "Enter the app secret",
      "employeeIds": "One employee ID per line (comma-separated is also supported)",
      "chatId": "Enter the chat ID",
      "ids": "One ID per line (comma-separated is also supported)"
    },
    "saved": {
      "feishu": "Lark settings saved",
      "xiaoyi": "Xiaoyi settings saved",
      "dingtalk": "DingTalk settings saved"
    },
    "errors": {
      "loadChannels": "Failed to load channels",
      "loadFeishu": "Failed to load Lark settings",
      "loadXiaoyi": "Failed to load Xiaoyi settings",
      "loadDingtalk": "Failed to load DingTalk settings",
      "saveGeneric": "Save failed, please try again later"
    }
  },
  "config": {
    "title": "Configuration",
    "subtitle": "Update backend service settings. The backend will automatically restart after saving to load the latest configuration.",
    "groupFallback": "Parameter group",
    "itemsCount": "{{count}} items",
    "groupsCount": "{{count}} configuration groups",
    "paramsCount": "{{count}} parameters",
    "requiredIncomplete": "Required model configuration is incomplete",
    "empty": "No configuration loaded yet. Please check the backend service status.",
    "selectModelProvider": "Select a model provider",
    "enterValue": "Enter a configuration value",
    "hideValue": "Hide value",
    "showValue": "Show value",
    "groups": {
      "model": { "label": "Model Configuration", "hint": "Model service and authentication settings" },
      "embed": { "label": "Embed Configuration", "hint": "Embed service and authentication settings" },
      "thirdParty": { "label": "Third-Party Services", "hint": "API key settings" },
      "evolution": { "label": "Evolution Settings", "hint": "Online skill evolution settings" },
      "email": { "label": "Email Settings", "hint": "Email account and token settings" },
      "other": { "label": "Other Settings", "hint": "Unclassified extended parameters" }
    },
    "errors": {
      "requiredModelFields": "These model fields are required: {{fields}}. Complete them before saving and restarting.",
      "saveFailed": "Save failed, please try again later"
    }
  },
  "cron": {
    "title": "Scheduled Task Management",
    "subtitle": "Manage scheduled tasks with cron expressions, including creating, enabling, and deleting tasks",
    "create": "Create",
    "cancelCreate": "Cancel Create",
    "update": "Update",
    "delete": "Delete",
    "enable": "Enable",
    "disable": "Disable",
    "loading": "Loading scheduled tasks...",
    "empty": "No scheduled tasks",
    "deleteConfirm": "Are you sure you want to delete this task?",
    "status": {
      "enabled": "Enabled",
      "disabled": "Disabled"
    },
    "columns": {
      "name": "Task Name",
      "cron": "Cron Expression",
      "status": "Status",
      "description": "Description",
      "wakeOffset": "Wake Offset (sec)",
      "timezone": "Time Zone",
      "target": "Target Channel",
      "actions": "Actions"
    },
    "placeholders": {
      "name": "Enter task name",
      "cron": "Five fields: min hour day month weekday. Example: every Monday 11:58 = '58 11 * * 1'",
      "cronShort": "Example: 58 11 * * 1",
      "description": "Enter description",
      "wakeOffset": "Wake offset in seconds"
    },
    "targets": {
      "web": "Web (web)",
      "feishu": "Lark (feishu)",
      "xiaoyi": "Xiaoyi (xiaoyi)",
      "dingtalk": "DingTalk (dingtalk)"
    },
    "success": {
      "created": "Task created successfully",
      "updated": "Task updated successfully",
      "deleted": "Task deleted successfully",
      "statusUpdated": "Task status updated successfully"
    },
    "errors": {
      "loadJobs": "Failed to load scheduled tasks",
      "createFailed": "Failed to create task",
      "updateFailed": "Failed to update task",
      "deleteFailed": "Failed to delete task",
      "toggleFailed": "Failed to update task status",
      "loadDetailFailed": "Failed to load task details",
      "nameRequired": "Task name is required",
      "cronRequired": "Cron expression is required",
      "timezoneRequired": "Time zone is required",
      "targetRequired": "Target channel is required",
      "descriptionRequired": "Description is required"
    }
  },
  "browser": {
    "title": "Browser Service",
    "subtitle": "Configure the browser path and start the browser service.",
    "refreshPath": "Refresh Path",
    "savePath": "Save Path",
    "startService": "Start Browser Service",
    "starting": "Starting...",
    "pathConfigHelp": "Chrome path configuration (open chrome://version in Chrome and copy the executable path)",
    "examplePath": "Example: /Applications/Google Chrome.app/Contents/MacOS/Google Chrome",
    "success": {
      "pathSaved": "Chrome path saved",
      "started": "Browser service started successfully"
    },
    "tooltips": {
      "fillPath": "Enter a Chrome path first",
      "savePath": "Save the Chrome path first"
    },
    "errors": {
      "loadPath": "Failed to load Chrome path",
      "savePath": "Failed to save Chrome path",
      "pathRequired": "Chrome path cannot be empty",
      "saveBeforeStart": "Save the Chrome path before starting the browser service",
      "startFailed": "Failed to start browser service",
      "startFailedWithCode": "Browser service failed to start, return code {{code}}",
      "startFailedWithMessage": "Browser service failed to start: {{message}}"
    }
  },
  "logsPanel": {
    "title": "Logs",
    "dataSource": "Data source",
    "debugSetting": "Updating debug mode...",
    "debugOn": "Debug Mode On",
    "debugOff": "Debug Mode Off",
    "autoRefreshOn": "Auto Refresh On",
    "autoRefreshOff": "Auto Refresh Off",
    "recentLogs": "Recent logs (up to 300)",
    "countVisible": "{{count}} entries",
    "countVisibleTotal": "{{visible}} entries ({{total}} total)",
    "empty": "No logs",
    "errors": {
      "readLogs": "Failed to read logs",
      "readDebugConfig": "Failed to read WS debug config",
      "updateDebugConfig": "Failed to update WS debug config"
    }
  },
  "skills": {
    "title": "Skill Management",
    "subtitle": "Manage and install skills available to the agent.",
    "actions": {
      "install": "Install",
      "uninstall": "Uninstall",
      "importLocal": "Import Local Skill",
      "sourceManager": "Source Manager",
      "backToList": "Back to List"
    },
    "builtIn": "Built-in",
    "status": {
      "installed": "Installed",
      "notInstalled": "Not installed",
      "builtIn": "Built-in"
    },
    "source": {
      "local": "Local",
      "project": "Project",
      "unknown": "Unknown"
    },
    "sourceLabel": "Source",
    "statusLabel": "Status",
    "versionLabel": "Version",
    "authorLabel": "Author",
    "allowedTools": "Allowed Tools",
    "unlimited": "Unlimited",
    "contentPreview": "Content Preview",
    "noDescription": "No description",
    "noContent": "No content",
    "searchPlaceholder": "Search skill names, descriptions, or tags",
    "totalCount": "{{count}} total",
    "listError": "Failed to load skills. Please check the backend service.",
    "noMatches": "No matching skills",
    "detailLoading": "Loading details...",
    "detailError": "Failed to load details",
    "marketplacesAvailable": "Available marketplaces: {{names}}",
    "marketplacesDefault": "Default marketplace: anthropics",
    "installPrompt": "Enter plugin spec (plugin@marketplace)",
    "importPrompt": "Enter a local skill path on the server (SKILL.md or directory)",
    "uninstallConfirm": "Uninstall {{pluginName}}?",
    "messages": {
      "installed": "Installed: {{spec}}",
      "imported": "Imported: {{name}}",
      "uninstalled": "Uninstalled: {{pluginName}}"
    },
    "errors": {
      "installFailed": "Install failed",
      "installFailedHint": "Install failed. Check the plugin spec or network.",
      "importFailed": "Import failed",
      "importFailedHint": "Import failed. Check the path or permissions.",
      "uninstallFailed": "Uninstall failed",
      "uninstallFailedHint": "Uninstall failed. Please try again later."
    }
  },
  "agent": {
    "title": "Agent Management",
    "subtitle": "View agent workspace files and memory content",
    "root": "Root",
    "workspace": "Workspace",
    "workspaceMeta": "{{directories}} directories, {{files}} files",
    "directoryCount": "{{count}} directories",
    "fileCount": "{{count}} files",
    "previewableCount": "{{count}} previewable",
    "refresh": "Refresh List",
    "empty": "No files",
    "notPreviewable": "Not previewable",
    "contentPreview": "Content Preview",
    "selectMarkdown": "Select a Markdown file on the left to view",
    "selectMarkdownContent": "Select a Markdown file on the left to view its content",
    "markdownOnly": "Only Markdown (.md/.mdx) preview is supported",
    "errors": {
      "refreshFailed": "Refresh failed: unable to rebuild the agent file index. Check the generator script logs.",
      "loadFailed": "Unable to read the agent file list. Check whether workspace/agent-data.json has been generated."
    }
  },
  "fileViewer": {
    "edit": "Edit",
    "unknownError": "Unknown error",
    "fileMissingPrefix": "This file does not exist. Create the Markdown file at",
    "fileMissingSuffix": "before editing.",
    "notPreviewable": "This file cannot be previewed. Only Markdown (.md/.mdx) files are supported."
  },
  "chatUi": {
    "copyMessage": "Copy message",
    "stopReading": "Stop reading",
    "readMessage": "Read message",
    "parallelProgress": "Parallel tasks running ({{completedCount}}/{{total}} complete)",
    "subtask": {
      "starting": "Starting...",
      "toolCall": "Calling {{tool}} (#{{count}})",
      "toolFallback": "tool",
      "toolResult": "Processing result...",
      "taskLabel": "Task {{index}}: {{description}}",
      "callCount": "{{count}} calls"
    },
    "toolResult": {
      "success": "done",
      "failed": "failed",
      "timeout": "Execution timed out",
      "arguments": "Arguments",
      "result": "Result",
      "truncated": "result truncated"
    },
    "toolGroup": {
      "executed": "{{totalPairs}} tool calls executed",
      "pending": "{{pendingCount}} running",
      "timeout": "{{timeoutCount}} timed out",
      "latest": "↓ Latest"
    },
    "inlineQuestion": {
      "header": "Evolution approval",
      "selected": "Selected",
      "accept": "Accept",
      "reject": "Reject"
    }
  },
  "network": {
    "wsError": "WebSocket connection error",
    "connectionClosedWithCode": "Connection closed ({{code}})",
    "connectionClosed": "Connection closed",
    "connectionUnavailable": "Connection unavailable",
    "requestTimeout": "Request timed out",
    "requestAborted": "Request aborted",
    "requestFailed": "Request failed",
    "sendMessageFailed": "Failed to send message",
    "interruptFailed": "Interrupt failed",
    "pauseFailed": "Pause failed",
    "cancelFailed": "Cancel failed",
    "supplementFailed": "Supplement failed",
    "resumeFailed": "Resume failed",
    "submitAnswerFailed": "Failed to submit answer",
    "unknownError": "Unknown error",
    "errorPrefix": "Error: {{message}}"
  },
  "speech": {
    "recognitionUnsupported": "Speech recognition is not supported by this browser",
    "synthesisUnsupported": "Speech synthesis is not supported by this browser",
    "errors": {
      "noSpeech": "No speech detected",
      "noMic": "No microphone detected",
      "notAllowed": "Microphone permission denied",
      "network": "Network error",
      "recognitionGeneric": "Speech recognition error: {{error}}",
      "synthesisGeneric": "Speech synthesis error: {{error}}"
    }
  },
  "time": {
    "daysAgo": "{{count}} day(s) ago",
    "hoursAgo": "{{count}} hour(s) ago",
    "minutesAgo": "{{count}} minute(s) ago",
    "justNow": "Just now"
  },
  "version": "Version {{version}}",
  "app": {
    "title": "JiuwenClaw",
    "subtitle": "AI Assistant",
    "errorTitle": "Application Error",
    "unknownError": "Unknown error",
    "reload": "Reload page",
    "themeSystem": "Follow system",
    "themeDark": "Dark mode",
    "themeLight": "Light mode",
    "configError": "Failed to fetch config via WebSocket, using defaults",
    "configErrorHint": "Please start the backend first (e.g.",
    "configErrorDefault": ", default port 19000). If backend is remote, set",
    "configErrorEnv": "in",
    "heartbeatTitle": "Heartbeat message",
    "heartbeatClose": "Close",
    "heartbeatViewFull": "Click to view full message",
    "noContent": "No details",
    "restarting": "Restarting service",
    "restartSuccess": "Restart successful",
    "configApplied": "Config applied",
    "restartWaiting": "Waiting for backend to restart and reconnect...",
    "configAppliedDesc": "Config hot-reloaded, this dialog will close in 5 seconds.",
    "restartSuccessDesc": "Backend started successfully, this dialog will close in 5 seconds."
  }
}
