{
  "common": {
    "save": "Save",
    "cancel": "Cancel",
    "create": "Create",
    "delete": "Delete",
    "edit": "Edit",
    "close": "Close",
    "loading": "Loading...",
    "error": "Error",
    "success": "Success",
    "confirm": "Confirm",
    "back": "Back",
    "refresh": "Refresh",
    "actions": "Actions",
    "remove": "Remove",
    "name": "Name",
    "description": "Description",
    "status": "Status",
    "type": "Type",
    "created": "Created",
    "updated": "Updated",
    "noData": "No data available",
    "search": "Search",
    "filter": "Filter",
    "all": "All",
    "optional": "optional"
  },
  "auth": {
    "signIn": "Sign In",
    "signInTitle": "Sign in to continue",
    "signInSubtitle": "Enter your credentials to access your account",
    "username": "Username",
    "email": "Email",
    "password": "Password",
    "identifierPlaceholder": "Username or email",
    "usernamePlaceholder": "Enter username",
    "emailPlaceholder": "Enter your email",
    "passwordPlaceholder": "Enter your password",
    "usernameRules": "3-50 chars: a-z, 0-9, _, -",
    "invalidEmail": "Invalid email format",
    "signingIn": "Signing in...",
    "signOut": "Sign Out",
    "invalidCredentials": "Invalid username/email or password"
  },
  "navigation": {
    "tasks": "Tasks",
    "events": "Events",
    "workspace": "Knowledge",
    "settings": "Settings",
    "stores": "Stores"
  },
  "tasks": {
    "title": "Tasks",
    "newTask": "New Task",
    "editTask": "Edit Task",
    "createTask": "Create Task",
    "taskDetails": "Task Details",
    "titleLabel": "Title",
    "titlePlaceholder": "Enter task title",
    "descriptionPlaceholder": "Enter task description",
    "store": "Store",
    "noStore": "No Store",
    "filterByStore": "Filter by store",
    "allStores": "All Stores",
    "allStoresHint": "This is the cross-store task list. These tasks have a general web browser for public pages (search, tracking/logistics) plus email and messaging — but not a specific store's backend. To open a store's seller center, click the store on the left first, then create a task.",
    "noStoreTasks": "No Store Tasks",
    "browser": "Browser",
    "browserBackend": "Browser Backend",
    "selectBrowser": "Select browser",
    "chrome": "Chrome",
    "ziniao": "Ziniao",
    "steps": "Steps",
    "addStep": "Add Step",
    "stepAction": "Action",
    "stepSelector": "Selector",
    "stepValue": "Value",
    "stepDescription": "Description",
    "actionNavigate": "Navigate",
    "actionClick": "Click",
    "actionType": "Type",
    "actionScreenshot": "Screenshot",
    "actionWait": "Wait",
    "actionScroll": "Scroll",
    "selectAction": "Select action",
    "selectorPlaceholder": "CSS selector (e.g., #id, .class)",
    "valuePlaceholder": "Value to type",
    "urlPlaceholder": "URL to navigate to",
    "waitPlaceholder": "Seconds to wait",
    "scrollPlaceholder": "Scroll amount (px)",
    "descriptionPlaceholderStep": "Step description (optional)",
    "removeStep": "Remove step",
    "taskStartLabel": "Task",
    "runTask": "Run Task",
    "stopTask": "Stop",
    "running": "Running...",
    "designing": "Planning...",
    "retry": "Retry",
    "rerun": "Re-run",
    "error_agent_loop": "The AI agent got stuck in a repeated loop and was automatically stopped. Please retry the task.",
    "copyAll": "Copy All",
    "copied": "Copied!",
    "scheduled": "Scheduled",
    "pending": "Pending",
    "completed": "Completed",
    "failed": "Failed",
    "messages": "Messages",
    "sendMessage": "Send Message",
    "messagePlaceholder": "Type your message...",
    "deleteConfirm": "Are you sure you want to delete this task?",
    "deleteConfirmCascade": "This task has {{count}} sub-task(s). Deleting it will also remove the entire subtree and all on-disk files. Continue?",
    "noTasks": "No tasks yet",
    "createFirstTask": "Create your first task to get started",
    "selectTaskHint": "Select a task or click \"+ New Task\" to create one",
    "selectStoreHint": "Select a store to get started",
    "newTaskFor": "New Task for {{storeName}}",
    "newTaskSubtitle": "What should the AI do?",
    "noStoreSelected": "No store selected",
    "taskCount": "{{count}} task",
    "taskCount_plural": "{{count}} tasks",
    "autoRunHint": "Task will auto-plan and execute. Use Stop to interrupt.",
    "confirmRunHint": "Task will pause after planning for your confirmation before executing.",
    "submitAnswers": "Submit Answers",
    "answeredQuestions": "Questions answered",
    "other": "Other...",
    "typeAnswer": "Type your answer...",
    "dismissQuestions": "Type freely instead",
    "backToOptions": "Back to options",
    "freeTextPlaceholder": "Type your response...",
    "chatPlaceholder": "Type a message to the AI...",
    "send": "Send",
    "executionPlan": "Execution Plan",
    "agentChat": "Agent Session",
    "agentStarting": "Agent starting...",
    "debugMode": "Debug",
    "result": "Result",
    "noStoreWarning": "This task has no store assigned. It can use the general web browser for public pages, but not a specific store's seller center.",
    "subtasks": "Subtasks",
    "ziniaoWslNotRunning": "Ziniao is not running. WSL cannot launch Ziniao automatically.\nPlease download and run the launcher script on Windows:\n  1. Download the .bat file below\n  2. Double-click ziniao_webdriver.bat on Windows\n  3. Wait for \"ready\" message, then retry",
    "ziniaoWslWrongPort": "Ziniao is running on Windows but not listening on the expected port. Please close Ziniao and re-launch it using the ziniao_webdriver.bat script.",
    "ziniaoWslCannotLaunch": "WSL cannot launch Ziniao automatically.\nPlease download and run the launcher script on Windows:\n  1. Download the .bat file below\n  2. Double-click ziniao_webdriver.bat on Windows\n  3. Wait for \"ready\" message, then retry",
    "error_rate_limit": "API rate limit reached. Please wait a moment and retry.",
    "error_auth_failed": "API authentication failed. Check your API key in Settings.",
    "error_billing_error": "Account billing issue. Check your Anthropic account.",
    "error_overloaded": "API is overloaded. Please try again later.",
    "error_server_error": "API server error. Please try again later.",
    "error_invalid_request": "Invalid API request. Check your configuration.",
    "error_max_tokens": "Response was too long. Try a simpler task.",
    "error_unknown": "An unexpected API error occurred.",
    "error_ziniao_not_running": "Ziniao is not running. Please download and run ziniao_webdriver.bat on Windows, then retry.",
    "error_ziniao_wrong_port": "Ziniao is running but on wrong port. Re-launch with ziniao_webdriver.bat.",
    "error_ziniao_cannot_launch": "Cannot launch Ziniao. Download and run ziniao_webdriver.bat on Windows.",
    "error_stopped_by_user": "Task was stopped by user.",
    "error_server_restart": "Server restarted while task was running.",
    "error_design_failed": "Design phase did not produce a plan.",
    "modeAuto": "Auto",
    "modePlan": "Review",
    "modeAutoDesc": "Skip review, run immediately",
    "modePlanDesc": "Draft a plan, run after approval",
    "modeTooltipForced": "This task type always shows a plan for review before running.",
    "planModeLabel": "Review plan first",
    "executePlan": "Execute Plan",
    "approvePlan": "Approve & Execute",
    "planReadyConfirm": "Plan is ready. Review above, then approve or edit.",
    "collapsibleSectionKeywords": ["assumption", "issue", "potential", "note"],
    "planTab": "Plan",
    "executeTab": "Execute",
    "planRevising": "Revising plan based on your feedback...",
    "executionStarted": "Execution started",
    "planVersion": "Plan v{{version}}",
    "supersededPlan": "Plan v{{version}} (superseded)",
    "currentPlan": "Current Plan",
    "historicalPlan": "Historical",
    "backToCurrent": "Back to current",
    "planSupersededBrief": "Plan v{{version}} superseded",
    "confirmAndExecute": "Confirm & Execute",
    "requestChanges": "Request Changes",
    "toolCalls": "{{count}} tool calls",
    "toolCall": "1 tool call",
    "thinking": "Thinking...",
    "agentWorking": "Agent is working...",
    "revisedFrom": "Revised from v{{version}}",
    "stepProgress": "Step {{completed}}/{{total}}",
    "viewPlan": "View Plan",
    "planFeedbackHint": "Send feedback to revise the plan, or confirm to execute",
    "planFeedbackPlaceholder": "Suggest changes...",
    "wakeMessagePlaceholder": "Send a message to resume...",
    "followupPlaceholder": "Send a follow-up message..."
  },
  "events": {
    "title": "Events",
    "newEvent": "New Event",
    "editEvent": "Edit Event",
    "createEvent": "Create Event",
    "eventDetails": "Event Details",
    "eventTracking": "Event Tracking",
    "filterEvents": "Filter Events",
    "allEvents": "All Events",
    "myEvents": "My Events",
    "unassigned": "Unassigned",
    "filterByStatus": "Filter by status",
    "draft": "Draft",
    "open": "Open",
    "inProgress": "In Progress",
    "waiting": "Waiting",
    "resolved": "Resolved",
    "closed": "Closed",
    "priority": "Priority",
    "low": "Low",
    "medium": "Medium",
    "high": "High",
    "urgent": "Urgent",
    "assignee": "Assignee",
    "unassignedLabel": "Unassigned",
    "dueDate": "Due Date",
    "sourceChannel": "Source Channel",
    "sourceId": "Source ID",
    "syncStatus": "Sync Status",
    "synced": "Synced",
    "notSynced": "Not Synced",
    "syncError": "Sync Error",
    "activities": "Activities",
    "activity": "Activity",
    "addActivity": "Add Activity",
    "activityPlaceholder": "Describe what was done...",
    "noEvents": "No events yet",
    "createFirstEvent": "Create your first event to start tracking",
    "markResolved": "Mark Resolved",
    "reopen": "Reopen",
    "close": "Close",
    "startProgress": "Start Progress",
    "setWaiting": "Set Waiting",
    "deleteConfirm": "Are you sure you want to delete this event?",
    "userEvents": "User",
    "systemEvents": "System",
    "category": "Source"
  },
  "workspace": {
    "title": "Knowledge",
    "files": "Files",
    "fileTree": "File Tree",
    "editor": "Editor",
    "newFile": "New File",
    "newFolder": "New Folder",
    "fileName": "File Name",
    "folderName": "Folder Name",
    "createFile": "Create File",
    "createFolder": "Create Folder",
    "deleteFile": "Delete File",
    "deleteFolder": "Delete Folder",
    "rename": "Rename",
    "fileCreated": "File created",
    "folderCreated": "Folder created",
    "fileDeleted": "File deleted",
    "fileSaved": "File saved",
    "deleteFileConfirm": "Are you sure you want to delete this file?",
    "deleteFolderConfirm": "Are you sure you want to delete this folder and all its contents?",
    "emptyState": "Select a file from the tree to view and edit",
    "readOnly": "Read only",
    "lineCount": "{{count}} lines",
    "characterCount": "{{count}} characters",
    "language": "Language",
    "knowledgeHint": "Knowledge files are shared with AI agents",
    "projectKnowledge": "Project Knowledge",
    "localKnowledge": "Local Knowledge",
    "syncKnowledge": "Sync from project",
    "projectKnowledgeHint": "Built-in knowledge & docs. Automatically updated from the cloud.",
    "localKnowledgeHint": "Agent-generated knowledge. Rules and tips shared across all stores.",
    "addKnowledgeFile": "Add knowledge file",
    "noProjectKnowledge": "No project knowledge synced yet",
    "noLocalKnowledge": "No local knowledge yet",
    "lastSynced": "Last synced: {{time}}",
    "remoteUpdated": "Remote updated: {{time}}",
    "syncFailed": "Sync failed: {{error}}",
    "syncing": "Syncing...",
    "neverSynced": "Never synced",
    "projectKnowledgeReadOnly": "Built-in project knowledge (read-only). Automatically updated from the cloud.",
    "projectKnowledgeEditable": "Built-in project knowledge (read-only). Automatically updated from the cloud.",
    "localKnowledgeEditHint": "This is your local knowledge — feel free to edit. It won't be overwritten.",
    "history": "History",
    "noHistory": "No git history for this file",
    "resetToVersion": "Reset to this version",
    "resetConfirm": "Reset this file to commit {{sha}}?",
    "preview": "Preview",
    "current": "Current",
    "builtinBadge": "Built-in",
    "builtinSkillHint": "Built-in skill (read-only). Automatically updated from the cloud.",
    "syncSkills": "Sync built-in skills",
    "modeFiles": "Files",
    "modeFilesSub": "Edit knowledge files manually",
    "modeAI": "AI Chat",
    "modeAISub": "Tell AI, auto-writes to knowledge files",
    "assistantWelcome": "Tell me about your stores, processes, or procedures — I'll save it so agents can use it when running tasks.",
    "assistantExample1": "Our US store ships with FedEx, DHL for international",
    "assistantExample2": "Create a skill for checking inactive listings",
    "assistantExample3": "Store Alpha's seller account email is ops@example.com",
    "assistantPlaceholder": "Tell the AI something about your stores...",
    "assistantStop": "Stop",
    "assistantThinking": "AI is thinking...",
    "skillsHint": "Reusable procedures & scripts. Agents load relevant skills automatically.",
    "skillNamePlaceholder": "Skill name...",
    "noSkills": "No skills yet — agents create them automatically",
    "createSkill": "Create skill",
    "storeFilesSection": "Files",
    "storeFilesHint": "Per-store knowledge. Agents see only the relevant store's files when running a task.",
    "truncatedRows": "Showing first {{shown}} of {{total}} rows — open the file for the rest.",
    "viewerReadOnly": "read-only",
    "download": "Download",
    "storeData": "Run Data",
    "storeDataHint": "Per-store task outputs (reports, exports, captures) under store-data/. Same tree the agent reads/writes; not knowledge.",
    "noStoresInWorkspace": "No stores yet — create a store in Tasks view",
    "hasContent": "Has content",
    "hintStoreProfile": "Store profile — platform, region, config",
    "hintNotes": "Operational notes — login flows, gotchas",
    "hintLogistics": "Shipping, warehouses, lead times",
    "hintPlatformRules": "Platform policies — images, titles, pricing",
    "hintBrowserTips": "Selectors, navigation, timing tips",
    "hintSkillMd": "Skill instructions — name, tools, step-by-step procedures",
    "builtinTab": "Built-in",
    "mySkillsTab": "My Skills",
    "customBadge": "Custom",
    "importedBadge": "Imported",
    "customSkillsSection": "Custom",
    "importedSkillsSection": "Imported",
    "importedSkillHint": "Imported skill — local edits may diverge from the original source.",
    "uninstallSkillConfirm": "Uninstall skill \"{{name}}\"? This will delete all skill files.",
    "uninstallSkill": "Uninstall",
    "noCustomSkills": "No custom skills yet — create one or ask the assistant",
    "noImportedSkills": "No imported skills yet — ask the assistant to install from a URL",
    "noBuiltinSkills": "No built-in skills synced yet"
  },
  "settings": {
    "title": "Settings",
    "userManagement": "User Management",
    "users": "Users",
    "newUser": "New User",
    "createUser": "Create User",
    "editUser": "Edit User",
    "fullName": "Full Name",
    "role": "Role",
    "admin": "Admin",
    "user": "User",
    "active": "Active",
    "inactive": "Inactive",
    "lastLogin": "Last Login",
    "never": "Never",
    "deleteUserConfirm": "Are you sure you want to delete this user?",
    "ziniaoCompany": "Company",
    "ziniaoUsername": "Username",
    "ziniaoSelectAccount": "Select Ziniao account...",
    "ziniaoSelectProfile": "Select store profile...",
    "ziniaoLoading": "Loading store profiles...",
    "ziniaoConnectError": "Ziniao is not running or not in WebDriver mode.",
    "ziniaoDownloadLauncher": "Download ziniao_webdriver.bat",
    "ziniaoLaunchHint": "Steps: 1) Download the .bat file below  2) Double-click it on Windows  3) Wait until it shows \"ready\"  4) Click Refresh",
    "ziniaoNoProfiles": "No browser profiles found. Please check your Ziniao account.",
    "ziniaoRunningNormalMode": "Ziniao is running but not in WebDriver mode.",
    "ziniaoNormalModeHint": "Please close Ziniao and click Refresh.",
    "ziniaoStillRunning": "Ziniao is still running. It may not have fully exited.",
    "ziniaoForceRestart": "Force Restart",
    "ziniaoForceKill": "Force Kill",
    "ziniaoNotInstalled": "Ziniao is not installed.",
    "ziniaoNotInstalledHint": "Download and install from the official website.",
    "ziniaoDownloadZiniao": "Download Ziniao",
    "ziniaoNoPermission": "WebDriver is not enabled for this account.",
    "ziniaoNoPermissionHint": "The BOSS account must enable WebDriver in the developer console.",
    "ziniaoEnableWebDriver": "How to enable WebDriver",
    "ziniaoRestartFailed": "Failed to restart. Please close Ziniao manually and try again.",
    "ziniaoConnectErrorMac": "Cannot connect to Ziniao. Please check if Ziniao is installed.",
    "ziniaoCredentialsError": "The stored password can't be decrypted on this machine (the secret used to encrypt it doesn't match this install). Click Edit to re-enter the password.",
    "enterStoreNameFirst": "Please enter a store name first",
    "editZiniaoAccount": "Edit Ziniao Account",
    "addZiniaoAccount": "Add Ziniao Account",
    "deleteAccountConfirm": "Are you sure you want to delete this Ziniao account?",
    "passwordLeaveBlank": "Password (leave blank to keep current)",
    "storesSettings": "Stores",
    "newStore": "New Store",
    "createStore": "Create Store",
    "editStore": "Edit Store",
    "storeName": "Store Name",
    "storeSlug": "Store Slug",
    "storeConfig": "Store Configuration",
    "deleteStoreConfirm": "Are you sure you want to delete this store?",
    "profile": "Profile",
    "changePassword": "Change Password",
    "currentPassword": "Current Password",
    "newPassword": "New Password",
    "confirmPassword": "Confirm Password",
    "passwordMismatch": "Passwords do not match",
    "adminRequired": "Admin access required to manage settings.",
    "requireLogin": "Require Login",
    "requireLoginDesc": "When enabled, users must log in to access the app.",
    "myProfile": "My Profile",
    "passwordChanged": "Password changed successfully.",
    "confirmDeleteUser": "Delete user \"{{username}}\"? This cannot be undone.",
    "leaveBlank": "Leave blank to keep",
    "profileUpdated": "Profile updated successfully.",
    "tab_account": "Account",
    "tab_email": "Email",
    "tab_general": "General",
    "tab_aiAgent": "AI",
    "taskDefaultsTitle": "Task Defaults",
    "scheduleDefaultsTitle": "Schedule Defaults",
    "privacyTitle": "Privacy",
    "skillsTitle": "Skills",
    "skillsAutoSyncTitle": "Auto-sync skills from official repo",
    "skillsAutoSyncDesc": "When on (default), the agent checks GitHub once every 24h and pulls new or updated built-in skills before each task. Turn off to pin the locally-bundled version — the periodic check is skipped, but you can still trigger a one-off sync from the Skills page.",
    "browserTitle": "Browser",
    "browserHeadlessTitle": "Run browsers in headless mode",
    "browserHeadlessDesc": "When on (default), browsers run in the background. Turn off to make every browser the agent drives — including the auxiliary Chrome session for non-seller-center URLs — visible on your screen.",
    "browserHeadlessWarn": "Switching this restarts auxiliary browser sessions. Tasks currently using one may be interrupted. Continue?",
    "defaultExecutionMode": "Default Execution Mode",
    "channelConfig": "Channel Configuration",
    "channelConfigHint": "Configure message channels for event extraction.",
    "emailImap": "Email (IMAP)",
    "imapServer": "IMAP Server (e.g., imap.gmail.com)",
    "imapEmail": "Email Address",
    "imapPassword": "App Password",
    "wecom": "WeCom (Enterprise WeChat)",
    "wecomCorpId": "Corp ID",
    "wecomSecret": "App Secret",
    "testConnection": "Test Connection",
    "eventSyncConfig": "Event Sync Backends",
    "eventSyncConfigHint": "Configure where extracted events are synced to.",
    "dida365": "Dida365 / TickTick",
    "dida365ServiceType": "Service",
    "dida365ClientId": "Client ID",
    "dida365ClientSecret": "Client Secret",
    "dida365GuideStep1": "Choose your service",
    "dida365ChinaVersion": "China",
    "dida365IntlVersion": "International",
    "dida365GuideStep2": "Register an app on the developer portal",
    "dida365GuideStep2Hint": "Click the link below to open the developer portal. Sign in, then click \"New App\". Enter any Name (e.g. vibe-seller), leave App Service URL and Description empty, then click \"Add\".",
    "dida365GuideStep3": "Set the redirect URI",
    "dida365GuideStep3Hint": "Go back to the app list, click \"Edit\" next to the app you just created. Find the \"OAuth Redirect URL\" field, paste the URL below, then click \"Save\":",
    "dida365GuideStep4": "On the same edit page, copy the Client ID and Client Secret, then paste them here",
    "dida365ClientIdPlaceholder": "Paste Client ID from developer portal",
    "dida365ClientSecretPlaceholder": "Paste Client Secret from developer portal",
    "dida365GuideStep5": "Make sure you've saved everything in the developer portal, then click below to start OAuth authorization",
    "dida365Installing": "Installing TickTick MCP tools (first time only)...",
    "dida365SetupFailed": "Failed to install TickTick MCP: {{error}}. Make sure git and uv are installed.",
    "dida365Connect": "Authorize",
    "dida365Connecting": "Waiting for authorization — complete the login in the popup window...",
    "dida365Connected": "Connected",
    "dida365Disconnect": "Disconnect",
    "dida365DisconnectConfirm": "Disconnect TickTick integration? AI agent will lose access to TickTick tools.",
    "dida365Project": "Default Project (optional)",
    "dida365ProjectHint": "Event sync will create tasks in this project. Leave empty to let the AI access all projects.",
    "dida365SaveConfig": "Save",
    "dida365AgentInfo": "AI agent can read and write your TickTick/Dida365 projects and tasks.",
    "dida365DisconnectHint": "Disconnecting will remove AI access to TickTick/Dida365",
    "dida365PortNote": "Note: If you change the server port, you need to update this URL in the developer portal too.",
    "dida365BareHostWarning": "Dida365/TickTick developer portal only accepts localhost or a full domain (e.g. host.example.com). Bare hostnames like \"{{hostname}}\" will be rejected.",
    "dida365BareHostHint": "Fix: open a browser on the server machine itself, visit http://localhost:{{port}} to complete OAuth there, then come back to this remote page — it will work normally. Or access this page via a full domain (e.g. Tailscale *.ts.net).",
    "dida365PopupHint": "The authorization page opens in a popup. If your browser blocks it, choose \"Always allow pop-ups\" and retry.",
    "dida365PopupBlocked": "Pop-up was blocked by the browser",
    "dida365PopupBlockedHint": "Click the pop-up blocked icon in the address bar, select \"Always allow pop-ups from this site\", then click below to retry.",
    "dida365OpenAuthWindow": "Open authorization page",
    "googleCalendar": "Google Calendar",
    "googleCalendarId": "Calendar ID",
    "googleServiceAccount": "Service Account JSON Path",
    "aiAgentConfig": "AI Agent",
    "aiBackend": "Backend",
    "aiWorkspace": "Knowledge Directory",
    "maxConcurrency": "Max Concurrent Agents",
    "maxConcurrencyDesc": "Maximum number of agents running simultaneously",
    "taskRetention": "Auto-delete old tasks",
    "taskRetentionDesc": "Daily job removes completed/failed tasks older than this. Set to 0 to disable.",
    "taskRetentionDays": "days",
    "taskRetentionDisabled": "disabled",
    "telemetryTitle": "Anonymous usage telemetry",
    "telemetryDesc": "Send anonymous install + task counts to help improve the product. No business content (titles, products, screenshots, chat) is ever sent. See docs/telemetry.md.",
    "defaultScheduleTimezone": "Default Schedule Timezone",
    "defaultScheduleTimezoneDesc": "Used when creating new schedules without an explicit timezone",
    "connected": "Connected",
    "aiProfiles": "AI Profiles",
    "proxyServer": "Proxy Server",
    "proxyBypass": "Proxy Bypass",
    "needProxy": "Use proxy",
    "proxyHint": "Route browser traffic through a proxy",
    "tab_stores": "Stores",
    "tab_integrations": "Integrations"
  },
  "integrations": {
    "gws": {
      "title": "Google Workspace",
      "description": "Expose Sheets, Drive, Gmail, Docs, and Calendar to agents via the gws CLI. Installs 19 sub-skills under a single umbrella.",
      "enable": "Enable",
      "disable": "Disable",
      "disabled": "Google Workspace disabled.",
      "enabledMsg": "Enabled — {{count}} sub-skills installed.",
      "binary": "gws binary",
      "binaryMissing": "Not found",
      "binaryHelp": "Install the gws CLI from",
      "auth": "Authentication",
      "loggedIn": "Logged in",
      "loginRequired": "Login required",
      "account": "Account",
      "project": "Project",
      "storage": "Credential storage",
      "installing": "Installing skills — this can take 20–30s while gws generates docs for all APIs…",
      "installedHint": "Agents can invoke the gws umbrella skill.",
      "notInstalledHint": "Toggle on to install the skill bundle into your workspace."
    },
    "wecom_bot": {
      "title": "WeChat Work Bot",
      "description": "Send messages to WeChat Work groups via bot webhooks. Configure one or more bots — each stores a name and webhook URL.",
      "add": "Add Bot",
      "edit": "Edit",
      "delete": "Delete",
      "save": "Save",
      "cancel": "Cancel",
      "test": "Test",
      "testing": "Testing…",
      "name": "Name",
      "namePlaceholder": "e.g. Ops Alerts",
      "webhookUrl": "Webhook URL",
      "webhookUrlPlaceholder": "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=...",
      "webhookHint": "Get the webhook URL from your WeChat Work group bot settings.",
      "maskedHint": "Webhook URL is hidden to protect its key. Click Edit to view or change it.",
      "empty": "No bots configured yet.",
      "testSuccess": "Test message sent successfully.",
      "testFailed": "Test failed: {{message}}",
      "deleteConfirm": "Delete bot \"{{name}}\"?",
      "nameRequired": "Name is required",
      "urlRequired": "Webhook URL is required"
    }
  },
  "stores": {
    "noStores": "No stores yet. Create a store from the sidebar in Tasks view.",
    "platforms": "Platforms",
    "countries": "Countries",
    "linkedEmails": "Linked Emails",
    "noLinkedEmails": "No emails linked",
    "selectEmail": "Select email...",
    "linkEmail": "Link",
    "deleteTitle": "Delete Store",
    "deleteWarning": "This will permanently delete store \"{{name}}\". Tasks and events will be preserved but unlinked from this store.",
    "deleteFilesCheckbox": "Also delete local files",
    "deleteFilesHint": "Removes store knowledge (~/.vibe-seller/stores/{slug}/) and browser profile (~/.vibe-seller/browser_profiles/{slug}/).",
    "immutable": "cannot be changed",
    "activeTasksError": "Cannot perform this action while the store has active tasks",
    "nameExistsError": "A store with this name already exists",
    "noPlatformsLearned": "No platforms learned yet",
    "platform": "Platform",
    "country": "Country",
    "anyPlatform": "Any platform",
    "anyCountry": "Any country"
  },
  "chat": {
    "profile": "Profile",
    "profileMismatch": "Task was run by {{current}}. Different providers may be incompatible — results are not guaranteed if switched",
    "taskProfile": "Task",
    "manageProfiles": "Manage Profiles"
  },
  "profiles": {
    "default": "Claude",
    "defaultDescription": "System default environment",
    "builtIn": "Built-in",
    "isDefault": "Default",
    "setDefault": "Set as Default",
    "create": "Create Profile",
    "createTitle": "Create Profile",
    "editTitle": "Edit Profile",
    "modalHint": "Profiles define environment variables injected before launching Claude Code CLI. Use them to switch AI providers, set API keys, or customize behavior.",
    "description": "Create custom profiles with different environment variables for different AI providers",
    "noDescription": "No description",
    "profileName": "Profile Name",
    "namePlaceholder": "e.g., MiniMax",
    "nameRequired": "Profile name is required",
    "envPresets": "Environment Presets",
    "custom": "Custom",
    "environmentVariables": "Environment Variables",
    "addVariable": "Add Variable",
    "noVariables": "No variables added yet",
    "envVars": "environment variables",
    "noProfiles": "No custom profiles yet. Create one to get started.",
    "confirmDelete": "Delete profile \"{name}\"? This cannot be undone.",
    "loadGlobalMcp": "Load global MCP servers",
    "loadGlobalMcpHint": "Include MCP servers from global Claude settings. Disable to reduce tool count and speed up third-party APIs."
  },
  "errors": {
    "externalConfigOverride": {
      "title": "External config conflicts with this profile",
      "intro": "Profile \"{{profileId}}\" can't be used: {{settingsPath}} has env entries that take precedence and silently route the agent to another endpoint:",
      "pickOne": "Pick one:",
      "optionDefault": "Switch your profile to \"Claude\" (default) and let the external tool (e.g. cc-switch) own provider routing.",
      "optionClear": "Quit the tool that wrote it (cc-switch / similar), then run this once to clear the conflicting env block:",
      "useDefault": "Use Default Profile",
      "copyCommand": "Copy Command",
      "copied": "Copied!",
      "close": "Close"
    }
  },
  "status": {
    "pending": "Pending",
    "in_progress": "In Progress",
    "completed": "Completed",
    "failed": "Failed",
    "running": "Running",
    "scheduled": "Scheduled",
    "draft": "Draft",
    "open": "Open",
    "waiting": "Waiting",
    "resolved": "Resolved",
    "closed": "Closed",
    "designing": "Planning",
    "planned": "Planned",
    "queued": "Queued"
  },
  "schedules": {
    "title": "Scheduled Tasks",
    "oneTimeTasks": "Tasks",
    "scheduledTasks": "Scheduled",
    "every": "Every",
    "minutes": "minutes",
    "hours": "hours",
    "days": "days",
    "daily": "Daily",
    "weekly": "Weekly",
    "monthly": "Monthly",
    "frequency": "Frequency",
    "atTime": "At time",
    "time": "Time",
    "dayOfWeek": "Day of Week",
    "dayOfMonth": "Day of Month",
    "active": "Active",
    "paused": "Paused",
    "system": "System",
    "pause": "Pause",
    "resume": "Resume",
    "trigger": "Run Now",
    "replan": "Re-plan",
    "triggerRunning": "A task is already running",
    "pendingQuestions_one": "{{count}} question",
    "pendingQuestions_other": "{{count}} questions",
    "planStatus": {
      "planning": "Planning",
      "stale": "Plan stale",
      "failed": "Plan failed",
      "ready": "Ready",
      "none": "No plan"
    },
    "planError": "Planning error",
    "plan": {
      "heading": "Plan",
      "statusLabel": "Status",
      "collapse": "Collapse",
      "expand": "Expand",
      "openPlanningTask": "Open planning task →",
      "startPlanning": "Start planning",
      "replan": "Re-plan",
      "planVersion": "Plan version {{n}}",
      "waitingForApproval": "Planning task is awaiting your approval.",
      "explainer": {
        "ready": "A plan is frozen on this schedule and will be reused for every fire.",
        "planning": "An agent is authoring the plan. Open the planning task to review and approve it.",
        "stale": "The schedule prompt changed — the previous plan is no longer used. Re-plan before the next fire.",
        "failed": "The planner failed. Re-plan to try again.",
        "none": "No plan has been authored yet. Start planning to create one."
      },
      "finalize": {
        "heading": "Finalize step (registered by the agent)",
        "explainer": "After all stores finish, one extra step runs to combine their results. No action needed."
      },
      "history": {
        "heading": "Planning history ({{count}})",
        "empty": "No prior planning attempts.",
        "attempt": "v{{n}} · {{status}} · {{when}}"
      }
    },
    "nextRun": "Next Run",
    "runs": "Runs",
    "newSchedule": "New Schedule",
    "newScheduleFor": "New Schedule for {{storeName}}",
    "newScheduleSubtitle": "What should the AI do on a recurring basis?",
    "backToSchedule": "Back to Schedule",
    "deleteConfirm": "Delete this schedule? Child tasks will be kept.",
    "noSchedules": "No scheduled tasks yet",
    "createFirstSchedule": "Create a schedule to automate recurring tasks",
    "mon": "Monday",
    "tue": "Tuesday",
    "wed": "Wednesday",
    "thu": "Thursday",
    "fri": "Friday",
    "sat": "Saturday",
    "sun": "Sunday",
    "timezone": "Timezone",
    "timezoneHint": "Schedule fires in this timezone",
    "editSchedule": "Edit Schedule",
    "hourSuffix": "h",
    "minuteSuffix": "m",
    "scheduleType": "Schedule Type",
    "description": "Description",
    "editSchedule": "Edit Schedule",
    "editScheduleFor": "Edit Schedule for {{storeName}}",
    "mode": "Mode",
    "fanoutMode": "Fan out (one task per store)",
    "fanoutModeDescription": "Create one task per active store on each tick — good for per-store work.",
    "singleMode": "Single (one task)",
    "singleModeDescription": "Create exactly one task (no store binding) on each tick — good for shared work like IMAP sweeps.",
    "modeLocked": "Mode and store are fixed at creation.",
    "defaultMode": "Default Mode",
    "defaultModeHelp": "Default mode pre-selected when creating a new 'All Stores' schedule."
  },
  "waiting": {
    "reason": "Waiting Reason",
    "since": "Waiting Since",
    "nextCheck": "Next Check",
    "keywords": "Monitoring Keywords",
    "wake": "Wake Now",
    "cancel": "Cancel Wait",
    "maxDays": "Max Wait",
    "interval": "Check Interval",
    "timedOut": "Timed out",
    "wokenBy": "Woken by",
    "emailMatch": "Email match",
    "manualWake": "Manual wake",
    "noWaiting": "No tasks waiting",
    "autoEmail": "Auto: Email",
    "manual": "Manual",
    "wakeMessage": "Optional message for the agent...",
    "daysRemaining": "{{days}}d remaining",
    "hours": "{{hours}}h"
  },
  "email": {
    "accounts": "Email Accounts",
    "addAccount": "Add Email",
    "imapHost": "IMAP Server",
    "imapPort": "Port",
    "password": "Password/App Key",
    "testConnection": "Test Connection",
    "autoDetected": "Auto-detected",
    "connectedEmails": "Connected Emails",
    "connectEmail": "Connect Email",
    "disconnect": "Disconnect",
    "pollNow": "Poll Now",
    "watermark": "Last Read",
    "noEmails": "No email accounts configured",
    "testSuccess": "Connection successful",
    "testFailed": "Connection failed",
    "linkedStores": "Linked Stores",
    "linkToStore": "Link to Store",
    "selectStore": "Select Store",
    "noStoresLinked": "Not linked to any store",
    "smtpHost": "SMTP Server",
    "smtpPort": "SMTP Port",
    "noSmtp": "No SMTP"
  },
  "language": {
    "title": "Language",
    "english": "English",
    "chinese": "中文"
  },
  "updateCheck": {
    "title": "Update available",
    "versionLine": "v{{current}} is out of date — v{{latest}} is now available.",
    "macLinuxInstructions": "Run this in your terminal:",
    "windowsInstructions": "Download the latest installer and run it — it upgrades in place:",
    "downloadButton": "Download latest release",
    "copyCommand": "Copy",
    "copied": "Copied!",
    "whatsNew": "What's new",
    "noReleaseNotes": "No release notes provided.",
    "viewFullChangelog": "View full changelog on GitHub",
    "remindLater": "Remind me later"
  }
}
