{
  "title": "Settings",
  "tabs": {
    "basic": "General",
    "ai": "AI Settings",
    "aiConfig": "Model Service",
    "aiDefaultModel": "Default Model",
    "aiPrompt": "Chat Config",
    "aiPreprocess": "Preprocess",
    "dataManage": "Data Management",
    "storage": "Storage",
    "storageManage": "Storage",
    "sessionManage": "Sessions",
    "about": "About",
    "api": "Automation",
    "apiSubTabs": {
      "autoSync": "Auto Sync",
      "apiService": "API Service"
    }
  },
  "basic": {
    "general": {
      "title": "General"
    },
    "preferences": {
      "title": "Preferences"
    },
    "language": {
      "title": "Language",
      "description": "Choose language"
    },
    "appearance": {
      "title": "Appearance",
      "themeMode": "Theme Mode",
      "auto": "System",
      "light": "Light",
      "dark": "Dark"
    },
    "defaultTab": {
      "title": "Default Tab",
      "description": "Default page when entering a chat conversation",
      "overview": "Overview",
      "aiChat": "AI Chat"
    },
    "autoLaunch": {
      "title": "Startup",
      "openAtLogin": "Launch at Login",
      "openAtLoginDesc": "Automatically start ChatLab when the system boots",
      "devModeHint": "Not available in dev mode"
    },
    "toolsPanel": {
      "positionLabel": "Tools Panel Position",
      "positionDesc": "Choose where the quick tools panel appears",
      "positionSide": "Side",
      "positionHeader": "Header"
    },
    "screenshot": {
      "title": "Screenshot",
      "mobileAdapt": "Mobile Adaptation",
      "mobileAdaptDesc": "Auto-scale width when taking screenshots for mobile viewing"
    },
    "network": {
      "title": "Network",
      "proxyMode": "Proxy Mode",
      "proxyModeDesc": "How to connect when accessing external services",
      "modeOff": "Off",
      "modeSystem": "System",
      "modeManual": "Manual",
      "proxyAddress": "Proxy Address",
      "proxyPlaceholder": "http://127.0.0.1:7890",
      "proxyHelp": "Supports HTTP/HTTPS proxy, e.g.: http://127.0.0.1:7890",
      "testConnection": "Test Connection",
      "testing": "Testing...",
      "connectionSuccess": "Proxy connection successful!",
      "connectionFailed": "Connection failed",
      "enterProxyFirst": "Please enter proxy address first",
      "invalidProxyUrl": "Please enter a valid proxy address, e.g. http://127.0.0.1:7890",
      "onlyHttpSupported": "Only http:// or https:// protocols are supported",
      "saveFailed": "Save failed"
    }
  },
  "defaultModel": {
    "title": "Default Model",
    "noConfigs": "Please add a model configuration in \"Model Service\" first",
    "selectProvider": "Select provider",
    "selectModel": "Select model",
    "assistantModel": {
      "label": "Default Assistant Model",
      "description": "Used for AI chat, tool calls, SQL assistant, and context compression"
    },
    "fastModel": {
      "label": "Fast Model",
      "description": "Used for session summary generation. Falls back to the default assistant model if not set",
      "followAssistant": "Follow default assistant model"
    }
  },
  "aiConfig": {
    "title": "Model Services",
    "providerTitle": "Service Providers",
    "loading": "Loading...",
    "inUse": "Active",
    "defaultModel": "Default Model",
    "localService": "Local Service",
    "edit": "Edit",
    "delete": "Delete",
    "empty": {
      "title": "No AI service configured",
      "description": "Add a configuration to start using AI features"
    },
    "addConfig": "Add New Service",
    "maxConfigs": "Maximum configurations reached (10)",
    "modal": {
      "addConfig": "Add New Service",
      "editConfig": "Edit Service",
      "officialApi": "Official API",
      "officialApiDesc": "DeepSeek, Gemini, etc.",
      "localService": "Local Service",
      "localServiceDesc": "Ollama, etc.",
      "openaiCompatible": "OpenAI Compatible",
      "openaiCompatibleDesc": "Custom endpoint",
      "configName": "Configuration Name",
      "optional": " (Optional)",
      "configNamePlaceholderPreset": "Leave empty to use provider name",
      "configNamePlaceholderCustom": "Leave empty to use API endpoint",
      "aiProvider": "AI Provider",
      "apiKeyPlaceholder": "Enter your API Key",
      "apiKeyPlaceholderEdit": "Enter new API Key (leave empty to keep current)",
      "apiKeyPlaceholderLocal": "Usually not required for local services",
      "apiKeyHintLocal": "Enter if the service requires authentication",
      "validate": "Validate",
      "validationSuccess": "Connection validated successfully",
      "validationFailed": "Connection validation failed",
      "validationFailedTitle": "API Connection Validation Failed",
      "saveAnywayHint": "Validation did not pass. The configuration may be incorrect. Save anyway?",
      "saveAnyway": "Save Anyway",
      "validationError": "Validation failed: ",
      "model": "Model",
      "modelName": "Model Name",
      "modelNamePlaceholder": "e.g. gpt-4, claude-3",
      "modelNamePlaceholderLocal": "e.g. qwen3, deepseek-r1",
      "modelNameHint": "Enter the model name supported by the API",
      "modelNameHintLocal": "Enter the locally deployed model name",
      "apiEndpoint": "API URL",
      "apiEndpointHint": "OpenAI-compatible API endpoint",
      "resolvedUrl": "Resolved URL:",
      "fetchModels": "Fetch from API",
      "fetchModelsTitle": "Browse Remote Models",
      "fetchModelsLoading": "Fetching model list...",
      "fetchModelsEmpty": "No models found",
      "fetchModelsError": "Failed to fetch models",
      "fetchModelsCount": "{total} models total, showing {shown}",
      "modelAdded": "Added",
      "addAllModels": "Add all",
      "searchModels": "Search models...",
      "apiEndpointOverrideHint": "Default URL is prefilled. Replace if needed",
      "disableThinking": "Disable Thinking Mode",
      "disableThinkingDesc": "For models like Qwen3, DeepSeek-R1. Uses standard tool calling format when disabled.",
      "isReasoningModel": "Reasoning Model",
      "isReasoningModelDesc": "Extracts thinking process and disables tool calling (e.g. DeepSeek-R1, QwQ)",
      "advancedOptions": "Advanced Options",
      "customService": "Custom Service",
      "unnamedConfig": "Unnamed Configuration",
      "visitWebsite": "Visit Website",
      "getApiKey": "Get API Key",
      "presetService": "Preset",
      "thirdPartyService": "Third-party",
      "customModelInput": "Enter model manually",
      "selectFromList": "Select from list",
      "addCustomModel": "Add Model",
      "deleteCustomModel": "Delete Selected",
      "customModelId": "Model Endpoint Name",
      "customModelIdHint": "The model identifier used in API calls",
      "customModelDisplayName": "Display Name",
      "customModelDisplayNamePlaceholder": "Custom display name",
      "editModel": "Edit Model",
      "contextWindow": "Context Window",
      "contextWindowPlaceholder": "e.g. 128000",
      "contextWindowHint": "Maximum context tokens supported by this model (used for context compression)",
      "contextWindowMissing": "Context window not set, will use default. Click \"Edit Model\" to set it manually",
      "modelRequired": "Add at least one model to save",
      "modelCapabilities": "Model Capabilities",
      "apiFormat": "API Format",
      "apiFormatOpenAI": "OpenAI Completions",
      "apiFormatAnthropic": "Anthropic",
      "apiFormatGemini": "Gemini",
      "apiFormatOpenAIResponses": "OpenAI Responses"
    },
    "providerKind": {
      "official": "Official",
      "aggregator": "Aggregator",
      "custom": "Custom"
    },
    "capabilities": {
      "chat": "Chat",
      "reasoning": "Reasoning",
      "vision": "Vision",
      "function_calling": "Function Calling",
      "embedding": "Embedding",
      "ranking": "Ranking"
    }
  },
  "storage": {
    "title": "Local Storage Management",
    "description": "Manage data files stored locally by ChatLab",
    "dataLocation": {
      "title": "Data Directory",
      "description": "Customize where local data and cache are stored",
      "choose": "Choose",
      "reset": "Reset",
      "open": "Open",
      "restartTip": "Please restart the app after switching. Data will be migrated from the old directory.",
      "confirmTitle": "Confirm Directory Change",
      "confirmMessage": "You are about to change the data storage location. Existing data will be migrated to the new directory.",
      "newPath": "New directory path",
      "defaultPath": "Default location",
      "confirmWarning": "After restarting, the old data directory will be automatically deleted. Please ensure the new path is correct.",
      "installDirForbidden": "Data directory cannot be placed inside the app installation directory, as it will be cleared during updates",
      "cancel": "Cancel",
      "confirm": "Confirm",
      "migrationSuccessTitle": "Migration Complete",
      "migrationSuccessMessage": "The app needs to restart for changes to take effect.",
      "relaunchNow": "Restart Now"
    },
    "totalUsage": "Total: ",
    "loading": "Loading...",
    "files": "files",
    "notExist": "Not exist",
    "clear": "Clear",
    "open": "Open",
    "cache": {
      "databases": {
        "name": "Chat Databases",
        "description": "Imported chat analysis data"
      },
      "ai": {
        "name": "AI Chat Databases",
        "description": "AI chat history and config files"
      },
      "downloads": {
        "name": "Downloads",
        "description": "Screenshots, analysis results, etc."
      },
      "statsCache": {
        "name": "Cache Data",
        "description": "Statistics cache for chat records, auto-rebuilt after clearing"
      },
      "logs": {
        "name": "Log Files",
        "description": "App logs including import, AI, error logs"
      }
    },
    "session": {
      "title": "Session Index Settings",
      "description": "Session index splits chat history into conversation segments by time gaps for better AI analysis",
      "defaultThreshold": "Default Gap Threshold",
      "thresholdUnit": "minutes",
      "thresholdHelp": "Messages exceeding this time gap will be split into a new session",
      "notGenerated": "Session index not generated",
      "generateHint": "Generate index to help AI better understand conversation context",
      "generate": "Generate Index",
      "regenerate": "Regenerate",
      "generating": "Generating",
      "sessionCount": "{count} sessions",
      "generated": "Session index generated",
      "generateSuccess": "Session index generated successfully, {count} sessions created",
      "generateError": "Generation failed",
      "batchTitle": "Batch Generate Index",
      "totalSessions": "{count} chats total",
      "generatedCount": "{count} generated",
      "notGeneratedCount": "{count} not generated",
      "loadingStatus": "Loading...",
      "batchGenerate": "Generate Missing",
      "batchRegenerate": "Regenerate All"
    }
  },
  "aiPrompt": {
    "chatSettings": {
      "title": "Tool Settings"
    },
    "exportSettings": {
      "title": "Export Settings"
    },
    "skillSettings": {
      "title": "Skill Settings",
      "enableAutoSkill": "AI Auto-Select Skills",
      "enableAutoSkillDesc": "When enabled, AI will automatically match and activate suitable analysis skills based on user queries; when disabled, skills only take effect when manually selected"
    },
    "maxMessages": {
      "title": "Max Messages per Request",
      "description": "Max number of messages sent to AI per request. Higher values consume more tokens but provide more accurate context (recommended: 2000)."
    },
    "searchContext": {
      "title": "Search Context Window",
      "description": "Automatically include surrounding messages for each search hit to help AI understand the context. Set to 0 to disable",
      "before": "Before",
      "after": "After"
    },
    "exportFormat": {
      "title": "Export Format",
      "description": "File format for exporting AI conversations",
      "txtLabel": "TXT"
    },
    "sqlExportFormat": {
      "title": "SQL Lab Export Format",
      "description": "File format for exporting SQL query results"
    },
    "compression": {
      "title": "Context Compression",
      "enable": "Auto-compress context",
      "enableDesc": "Automatically compress long conversation history into summaries to reduce token usage",
      "threshold": "Compression threshold",
      "thresholdDesc": "Trigger compression when context tokens reach this percentage of the model's context window",
      "buffer": "Buffer size",
      "bufferDesc": "Percentage of recent messages to keep uncompressed",
      "maxToolResultPercent": "Tool result limit",
      "maxToolResultPercentDesc": "Maximum data percentage per tool call sent to AI (based on model context window). Excess results are intelligently truncated"
    },
    "presets": {
      "title": "System Prompts",
      "add": "Add Preset",
      "import": "Import Presets",
      "description": "Prompts are used for both group and private chat analysis, system adjusts content based on analysis type"
    },
    "preset": {
      "builtIn": "Built-in",
      "groupOnly": "Group Only",
      "privateOnly": "Private Only",
      "view": "View",
      "edit": "Edit",
      "copy": "Copy",
      "delete": "Delete"
    },
    "modal": {
      "editBuiltin": "Edit System Prompt",
      "editCustom": "Edit Custom Prompt",
      "addCustom": "Add Custom Prompt",
      "presetName": "Preset Name",
      "presetNamePlaceholder": "Give your preset a name",
      "applicableTo": "Applicable To",
      "applicableToHint": " (Check to enable for corresponding analysis type)",
      "groupChat": "Group Chat",
      "privateChat": "Private Chat",
      "systemPrompt": "System Prompt",
      "systemPromptPlaceholder": "Define the AI assistant's role, tasks and response requirements...",
      "preview": "Full Prompt Preview",
      "previewHint": " (Preview shows group chat mode, actual will adjust based on analysis type)",
      "resetToDefault": "Reset to Default",
      "saveChanges": "Save Changes",
      "addPreset": "Add Preset"
    },
    "importPreset": {
      "title": "Import Presets",
      "description": "Get recommended system prompt presets from remote",
      "loading": "Loading remote presets...",
      "loadError": "Failed to load remote presets",
      "noPresets": "No remote presets available",
      "commonPresets": "Universal Presets",
      "groupPresets": "Group Chat Only",
      "privatePresets": "Private Chat Only",
      "add": "Add",
      "added": "Added",
      "preview": "Preview",
      "systemPrompt": "System Prompt",
      "noDescription": "No description",
      "fetchingContent": "Loading content...",
      "fetchError": "Failed to load content"
    }
  },
  "about": {
    "title": "About ChatLab",
    "description": "Chat records analysis tool",
    "version": "Version",
    "checkUpdate": "Check for Updates",
    "checking": "Checking...",
    "unknown": "Unknown",
    "privacy": {
      "title": "Privacy Settings",
      "analytics": "Anonymous Usage Statistics",
      "analyticsDesc": "When enabled, the app collects non-sensitive data like version number and OS version to help improve the product"
    },
    "developer": {
      "title": "Developer Options",
      "debugMode": "DEBUG Mode",
      "debugModeDesc": "When enabled, the debug panel and quick debugging tools will be shown. You can use them to view databases, run testing tools, and record more detailed debug logs."
    }
  },
  "aiPreprocess": {
    "title": "Chat Preprocessing",
    "description": "Preprocess chat records before sending to AI to save tokens and filter noise. Original data is not modified.",
    "dataCleaning": "Data Cleaning",
    "dataCleaningDesc": "Automatically clean XML card messages (shared links, mini-programs, etc.), extracting useful content and significantly saving tokens. Recommended to keep enabled.",
    "mergeConsecutive": "Merge Consecutive",
    "mergeConsecutiveDesc": "Merge consecutive messages from the same sender within a short time window",
    "mergeWindow": "Merge window (seconds)",
    "denoise": "Smart Denoise",
    "denoiseDesc": "Filter out meaningless messages like interjections, emojis, and system placeholders (e.g. [Image])",
    "desensitize": "Data Masking",
    "desensitizeDesc": "Replace sensitive information (phone numbers, emails, ID numbers, etc.) based on rules",
    "desensitizeRules": "Masking Rules",
    "desensitizeRulesDesc": "Check the rules to enable. Rules are matched in list order",
    "desensitizeBuiltin": "Built-in Rules",
    "desensitizeCustom": "Custom Rules",
    "desensitizeAddCustom": "Add Custom Rule",
    "desensitizeRuleName": "Rule Name",
    "desensitizeRulePattern": "Regex Pattern",
    "desensitizeRuleReplacement": "Replacement Text",
    "desensitizeRuleAdd": "Add",
    "desensitizeRuleInvalidRegex": "Invalid regex syntax",
    "desensitizeRuleNamePlaceholder": "e.g. Employee ID",
    "desensitizeRulePatternPlaceholder": "e.g. EMP-\\d+",
    "desensitizeRuleReplacementPlaceholder": "Replacement, e.g. [EmpID]",
    "anonymizeNames": "Anonymize Nicknames",
    "anonymizeNamesDesc": "Replace real nicknames with IDs (U1, U2…) when sending to AI, reducing hallucinations and saving tokens",
    "blacklist": "Blacklist Keywords",
    "blacklistDesc": "Messages containing any of these keywords will be filtered out entirely",
    "blacklistPlaceholder": "Type a keyword and press Enter to add",
    "blacklistAdd": "Add"
  },
  "desensitize": {
    "rules": {
      "cn_phone": "China Mobile Number",
      "cn_phone_desc": "11-digit starting with 1xx",
      "cn_id_card": "China ID Card Number",
      "cn_id_card_desc": "18-digit, may end with X",
      "cn_bank_card": "China Bank Card Number",
      "cn_bank_card_desc": "16-19 consecutive digits",
      "cn_landline": "China Landline Number",
      "cn_landline_desc": "Area code + number, e.g. 010-12345678",
      "us_ssn": "US Social Security Number (SSN)",
      "us_ssn_desc": "XXX-XX-XXXX format",
      "us_phone": "US Phone Number",
      "us_phone_desc": "+1 (XXX) XXX-XXXX format",
      "us_drivers_license": "US Driver's License",
      "us_drivers_license_desc": "Letter + 7-8 digits",
      "jp_phone": "Japan Phone Number",
      "jp_phone_desc": "0x0-XXXX-XXXX format",
      "jp_my_number": "Japan My Number",
      "jp_my_number_desc": "12-digit number (マイナンバー)",
      "kr_phone": "Korea Phone Number",
      "kr_phone_desc": "01X-XXXX-XXXX format",
      "kr_rrn": "Korea Resident Registration Number",
      "kr_rrn_desc": "XXXXXX-XXXXXXX format (주민번호)",
      "api_key_prefix": "API Key / Token (Known Prefixes)",
      "api_key_prefix_desc": "Strings starting with sk-, ghp_, AKIA, etc.",
      "bearer_token": "Bearer Token",
      "bearer_token_desc": "Authorization token after Bearer",
      "email": "Email Address",
      "email_desc": "Standard user{'@'}domain.com format",
      "credit_card": "Credit Card Number",
      "credit_card_desc": "Visa / MasterCard / AmEx card numbers",
      "ipv4": "IPv4 Address",
      "ipv4_desc": "e.g. 192.168.1.1",
      "url": "URL Link",
      "url_desc": "Links starting with http:// or https://"
    }
  },
  "api": {
    "betaWarning": "The current API version is in Beta, and endpoints may change at any time.",
    "service": {
      "title": "API Service",
      "enable": "Enable API Service",
      "enableDesc": "When enabled, external tools can query, export, and import chat data via HTTP API. Localhost only (127.0.0.1)",
      "portInUseHint": "Port is in use. Please change the port below or close the program using this port"
    },
    "status": {
      "running": "Running",
      "stopped": "Stopped",
      "starting": "Starting...",
      "portInUse": "Port in use",
      "error": "Failed to start"
    },
    "port": {
      "title": "Port Configuration",
      "label": "Listen Port",
      "desc": "Local port for the API service (1024-65535)",
      "edit": "Edit",
      "save": "Save",
      "cancel": "Cancel"
    },
    "token": {
      "title": "Access Token",
      "label": "Bearer Token",
      "desc": "All API requests must include this token in the Authorization header",
      "noToken": "No token generated yet. Please enable the service first",
      "regenerate": "Regenerate"
    },
    "dataSources": {
      "title": "Data Sources",
      "desc": "Configure external data source URLs. ChatLab will automatically pull and import chat data at the specified interval.",
      "empty": "No data sources",
      "noSessions": "No import sessions. Click \"Manage Sessions\" above to add.",
      "disabled": "Paused",
      "every": "Every",
      "minutes": "min",
      "lastSync": "Last sync",
      "addBtn": "Add Data Source",
      "form": {
        "modalTitle": "Add Data Source",
        "name": "Name",
        "namePlaceholder": "e.g., My Chat Server",
        "url": "Data Source URL",
        "token": "Access Token (optional)",
        "tokenPlaceholder": "Bearer Token for the remote API",
        "interval": "Pull Interval (minutes)",
        "pullLimit": "Messages per Pull",
        "pullLimitPlaceholder": "Default 1000",
        "targetSession": "Target Session ID (optional)",
        "targetSessionPlaceholder": "Leave empty to create new session each time",
        "add": "Add"
      },
      "discovery": {
        "directMode": "Direct URL",
        "remoteMode": "Remote Server",
        "baseUrl": "Server URL",
        "baseUrlPlaceholder": "e.g. http://127.0.0.1:2333/api/v1",
        "browse": "Browse Sessions",
        "found": "Found {count} sessions",
        "search": "Search",
        "searchPlaceholder": "Search by session name",
        "selectAll": "Select All",
        "deselectAll": "Deselect All",
        "selectByType": "Session type",
        "typeAll": "All",
        "typePrivate": "Private",
        "typeGroup": "Group",
        "typeOther": "Other",
        "loadMore": "Load More",
        "subscribe": "Subscribe {count} sessions",
        "messages": "messages",
        "error": "Failed to connect to remote server"
      },
      "edit": {
        "title": "Edit Data Source",
        "save": "Save",
        "cancel": "Cancel",
        "editSource": "Edit Config",
        "manageSessions": "Manage Subscriptions",
        "manageSessionsDesc": "Re-select remote sessions to sync",
        "syncAll": "Sync All",
        "subscribed": "Subscribed"
      },
      "deleteConfirm": {
        "title": "Delete Data Source",
        "message": "Are you sure you want to delete \"{name}\"? All import configurations under this data source will be removed. Already imported local conversations will not be deleted."
      }
    },
    "usage": {
      "title": "Usage Guide",
      "desc": "After enabling the service, external tools can query and import data via API. All requests require Bearer Token authentication.",
      "authHint": "Header example:",
      "docLink": "View full API documentation"
    }
  }
}
