{ "agreement": true, "language": "zh-cn", "checkUpdates": true, "searchText": "", "sort": "0", "author": "", "mode": 0, "automaticUpdate": true, "llmApi": "openai", "llmResponseFormat": "text", "llmLanguage": "简体中文", "llmStyle": "无", "llmBatchSize": 10, "llmConcurrencyLimit": 3, "llmTimeout": 60000, "llmRegexPrompt": "# Role & Context\nYou are an expert Software Localization Specialist & Technical Translator.\nYour task is to translate extracted text snippets from source code and UI elements into the target language, while keeping all code-level syntax 100% intact.\n\n# Core Output Rules (CRITICAL: Failure will crash the system)\n1. ONLY return a valid JSON array string.\n - ❌ NO Markdown formatting (e.g., ```json).\n - ❌ NO conversational text.\n - ✅ Starts exactly with `[` and ends with `]`.\n2. Array Structure & Integrity\n - Input: Array of objects with `i` (ID) and `s` (Source).\n - Output: Array of objects with EXACTLY two fields: `i` and `t` (Target/Translation).\n - The output MUST be an array of objects matching the input length exactly.\n - The `i` fields MUST be kept EXACTLY as they are. DO NOT MODIFY OR OMIT THEM.\n\n# Translation & Safety Rules (CRITICAL)\n1. Absolute Code Protection (Highest Priority)\n - DO NOT translate any non-natural language syntax. This includes:\n * `camelCase` or `snake_case` variables\n * Interpolated variables and formatters (e.g., `${filename}`, `{{val}}`, `%s`, `{0}`)\n * HTML/XML tags (e.g., ``, `
`)\n * URLs, file paths, and regex symbols\n - Example: `Error occurred in ${moduleName}` -> `${moduleName} 中发生错误` (Variable preserved).\n2. Pure Code Key Recognition\n - If the `s` string looks entirely like a code key (e.g., `user_not_found_error`), DO NOT force a translation. Output it exactly as it is in the `t` field.\n3. Punctuation & Spacing Alignment\n - Preserve punctuation and spaces exactly.\n4. Unicode Encoding Preservation (CRITICAL)\n - If the source string `s` is formatted using Unicode escape sequences (e.g., `\\uXXXX`), your translated text `t` MUST ALSO be converted entirely into Unicode escape sequences.\n - ❌ Never return standard plain text if the source is Unicode-escaped.\n - Example: If `s` is `Hello` (\"Hello\"), and the translation is \"Hola\", `t` must be `Hola`.\n\n# Translation Requirements\n- **Target Language:** {{targetLanguage}}\n- **Translation Style:** {{translationStyle}}\n- Output must read naturally in the {{targetLanguage}} while adhering strictly to software UI and technical documentation conventions.\n\n# Example\n[Input]\n[{\"i\":101, \"s\":\"Settings\"}, {\"i\":102, \"s\":\"Save changes\"}, {\"i\":103, \"s\":\"Open\"}]\n\n[Output]\n[{\"i\":101, \"t\":\"设置\"}, {\"i\":102, \"t\":\"保存更改\"}, {\"i\":103, \"t\":\"打开\"}]\n\n{{glossarySection}}\n\n# Quality Checklist (Self-Verify Before Output)\n- [ ] Is the output a totally naked JSON array?\n- [ ] Does each object ONLY contain `i` and `t`?\n- [ ] Are all `i` fields present and unmodified?\n- [ ] Are all code variables (`${...}`) completely intact in the `t`?\n- [ ] If `s` used Unicode escapes (`\\uXXXX`), is `t` correctly encoded as Unicode escapes?", "llmAstPrompt": "# Role & Context\nYou are an expert Software Localization Specialist & UI Translator.\nYour task is to translate abstract syntax tree (AST) text nodes from a user interface into the target language, while keeping all code-level structure and syntax completely intact.\n\n# Core Output Rules (CRITICAL: Failure will crash the system)\n1. ONLY return a valid JSON array string.\n - ❌ NO Markdown formatting (e.g., ```json).\n - ❌ NO conversational text.\n - ✅ Starts exactly with `[` and ends with `]`.\n2. Property Gatekeeper (CRITICAL)\n - Input structure: `i` (ID), `s` (Source), `y` (Type), and `n` (Name).\n - Output structure: Return objects with EXACTLY two fields: `i` and `t` (Target/Translation).\n - DO NOT MODIFY `i`.\n - The `y` (type) and `n` (name) fields are for YOUR CONTEXT ONLY. Do not include them in output.\n\n# Translation & Safety Rules (CRITICAL)\n1. Absolute Code Protection\n - DO NOT translate any non-natural language syntax (e.g., `{{count}}`, ``, `\\n`).\n2. Context Awareness via y & n Fields\n - Use the `y` (node type) and `n` (node name) fields to infer context.\n - Example: `y=\"Button\"`, `n=\"submit\"` -> Translate as an action verb.\n3. Pure Code Key Handling\n - If `s` is a code key, return it as-is in `t`.\n\n# Translation Requirements\n- **Target Language:** {{targetLanguage}}\n- **Translation Style:** {{translationStyle}}\n\n{{glossarySection}}\n\n# Example\n[Input]\n[{\"i\":50, \"s\":\"Open\", \"y\":\"Button\", \"n\":\"openFile\"}, {\"i\":51, \"s\":\"⇧ Shift\", \"y\":\"Text\", \"n\":\"shortcut\"}]\n\n[Output]\n[{\"i\":50, \"t\":\"打开\"}, {\"i\":51, \"t\":\"⇧ Shift\"}]\n\n# Quality Checklist (Self-Verify Before Output)\n- [ ] Is the output a totally naked JSON array?\n- [ ] Does each object ONLY contain `i` and `t`?\n- [ ] Are `i` fields unaltered?\n- [ ] Are code variables/tags intact in `t`?", "llmThemePrompt": "# Role & Context\nYou are an expert CSS Theme Localizer & UI Translator.\nYour task is to translate Obsidian theme setting labels and descriptions into the target language.\n\n# Core Output Rules (CRITICAL: Failure will crash the system)\n1. ONLY return a valid JSON array string.\n - ❌ NO Markdown formatting (e.g., ```json).\n - ❌ NO conversational text.\n - ✅ Starts exactly with `[` and ends with `]`.\n2. Property Gatekeeper (CRITICAL)\n - Input structure: `i` (ID), `s` (Source), `y` (Type).\n - Output structure: Return objects with EXACTLY two fields: `i` and `t` (Target/Translation).\n - DO NOT MODIFY `i`.\n - The `y` (type) field is for YOUR CONTEXT ONLY. Do not include it in output.\n\n# Translation & Safety Rules (CRITICAL)\n1. Context Awareness via y Field\n - `y` value tells you if text is a `name`, `title`, `description`, `label`, or `markdown`.\n2. Code Protection\n - DO NOT translate CSS class names or variables.\n3. Brevity for UI\n - Keep translations concise for settings UI.\n4. Unicode Encoding Preservation (CRITICAL)\n - If the source string `s` is formatted using Unicode escape sequences (e.g., `\\uXXXX`), your translated text `t` MUST ALSO be converted entirely into Unicode escape sequences.\n - ❌ Never return standard plain text if the source is Unicode-escaped.\n - Example: If `s` is `\\u0048\\u0065\\u006c\\u006c\\u006f` (\"Hello\"), and the translation is \"Hola\", `t` must be `\\u0048\\u006f\\u006c\\u0061`.\n\n# Translation Requirements\n- **Target Language:** {{targetLanguage}}\n- **Translation Style:** {{translationStyle}}\n\n{{glossarySection}}\n\n# Example\n[Input]\n[{\"i\":201, \"s\":\"Accent color\", \"y\":\"name\"}, {\"i\":202, \"s\":\"The color of active elements.\", \"y\":\"description\"}]\n\n[Output]\n[{\"i\":201, \"t\":\"强调色\"}, {\"i\":202, \"t\":\"激活状态元素的颜色。\"}]\n\n# Quality Checklist (Self-Verify Before Output)\n- [ ] Is the output a totally naked JSON array?\n- [ ] Does each object ONLY contain `i` and `t`?\n- [ ] Are `i` fields unaltered?\n- [ ] If `s` used Unicode escapes (`\\uXXXX`), is `t` correctly encoded as Unicode escapes?", "llmOpenaiProfiles": [ { "id": "default", "name": "Default", "url": "", "key": "", "model": "gpt-4o-mini", "useCustomPrice": false, "priceInput": 0, "priceOutput": 0 } ], "llmOpenaiActiveProfileId": "default", "llmGeminiProfiles": [ { "id": "default", "name": "Default", "url": "", "key": "", "model": "gemini-2.0-flash", "useCustomPrice": false, "priceInput": 0, "priceOutput": 0 } ], "llmGeminiActiveProfileId": "default", "llmOllamaProfiles": [ { "id": "default", "name": "Default", "url": "http://localhost:11434", "key": "", "model": "", "useCustomPrice": false, "priceInput": 0, "priceOutput": 0 } ], "llmOllamaActiveProfileId": "default", "llmDeepseekProfiles": [ { "id": "default", "name": "Default", "url": "https://api.deepseek.com/v1", "key": "", "model": "deepseek-chat", "useCustomPrice": false, "priceInput": 0, "priceOutput": 0 } ], "llmDeepseekActiveProfileId": "default", "llmZhipuProfiles": [ { "id": "default", "name": "Default", "url": "https://open.bigmodel.cn/api/paas/v4", "key": "", "model": "glm-4-flash", "useCustomPrice": false, "priceInput": 0, "priceOutput": 0 } ], "llmZhipuActiveProfileId": "default", "llmMoonshotProfiles": [ { "id": "default", "name": "Default", "url": "https://api.moonshot.cn/v1", "key": "", "model": "moonshot-v1-8k", "useCustomPrice": false, "priceInput": 0, "priceOutput": 0 } ], "llmMoonshotActiveProfileId": "default", "llmAliyunProfiles": [ { "id": "default", "name": "Default", "url": "https://dashscope.aliyuncs.com/compatible-mode/v1", "key": "", "model": "qwen-plus", "useCustomPrice": false, "priceInput": 0, "priceOutput": 0 } ], "llmAliyunActiveProfileId": "default", "llmBaiduProfiles": [ { "id": "default", "name": "Default", "url": "https://qianfan.baidubce.com/v2", "key": "", "model": "ernie-4.0-8k-preview", "useCustomPrice": false, "priceInput": 0, "priceOutput": 0 } ], "llmBaiduActiveProfileId": "default", "llmBytedanceProfiles": [ { "id": "default", "name": "Default", "url": "https://ark.cn-beijing.volces.com/api/v3", "key": "", "model": "doubao-pro-4k", "useCustomPrice": false, "priceInput": 0, "priceOutput": 0 } ], "llmBytedanceActiveProfileId": "default", "llmGroqProfiles": [ { "id": "default", "name": "Default", "url": "https://api.groq.com/openai/v1", "key": "", "model": "llama-3.3-70b-versatile", "useCustomPrice": false, "priceInput": 0, "priceOutput": 0 } ], "llmGroqActiveProfileId": "default", "llmSiliconflowProfiles": [ { "id": "default", "name": "Default", "url": "https://api.siliconflow.cn/v1", "key": "", "model": "deepseek-ai/DeepSeek-V3", "useCustomPrice": false, "priceInput": 0, "priceOutput": 0 } ], "llmSiliconflowActiveProfileId": "default", "llmOpenrouterProfiles": [ { "id": "default", "name": "Default", "url": "https://openrouter.ai/api/v1", "key": "", "model": "anthropic/claude-3.5-sonnet", "useCustomPrice": false, "priceInput": 0, "priceOutput": 0 } ], "llmOpenrouterActiveProfileId": "default", "llmDeepinfraProfiles": [ { "id": "default", "name": "Default", "url": "https://api.deepinfra.com/v1/openai", "key": "", "model": "meta-llama/Llama-3.3-70B-Instruct", "useCustomPrice": false, "priceInput": 0, "priceOutput": 0 } ], "llmDeepinfraActiveProfileId": "default", "llmMistralProfiles": [ { "id": "default", "name": "Default", "url": "https://api.mistral.ai/v1", "key": "", "model": "mistral-small-latest", "useCustomPrice": false, "priceInput": 0, "priceOutput": 0 } ], "llmMistralActiveProfileId": "default", "llmMinimaxProfiles": [ { "id": "default", "name": "Default", "url": "https://api.minimax.chat/v1", "key": "", "model": "abab6.5-chat", "useCustomPrice": false, "priceInput": 0, "priceOutput": 0 } ], "llmMinimaxActiveProfileId": "default", "llmStepfunProfiles": [ { "id": "default", "name": "Default", "url": "https://api.stepfun.com/v1", "key": "", "model": "step-1-8k", "useCustomPrice": false, "priceInput": 0, "priceOutput": 0 } ], "llmStepfunActiveProfileId": "default", "modeImt": false, "imtPagerule": { "selectors": [ ".mod-settings", ".modal-container", ".menu", ".notice-container" ], "excludeSelectors": [ ".markdown-source-view", ".markdown-reading-view", ".cm-editor" ] }, "shareToken": "", "shareRepo": "obsidian-translations", "shareProfiles": [ { "id": "1776342005263", "name": "默认账号", "token": "", "repo": "obsidian-translations" } ], "shareActiveProfileId": "1776342005263", "reFlags": "gs", "reLength": 300, "reDatas": [ "(Notice|log|error|setText|setButtonText|setName|setDesc|setPlaceholder|setTooltip|appendText|setTitle|addHeading|renderMarkdown)\\(\\s*(['\"`])((?:[^\\\\2\\\\\\\\]|\\\\\\\\.)*?)\\2\\s*\\)", "(textContent|innerText|name|description|selection|annotation|link|text|search|speech|page|settings)\\s*[:=]\\s*(['\"`])((?:[^\\\\2\\\\\\\\]|\\\\\\\\.)*?)\\2" ], "reRejectRe": [ "^\\s*$", "^\\d+$", "^[\\w-]+\\.[\\w-]+\\.\\w+$", "^https?:\\/\\/", "^data:image\\/", "^#([0-9a-f]{3}|[0-9a-f]{6})$", "^[a-z0-9]+-[a-z0-9-]+$", "^[a-z]+[A-Z][a-zA-Z0-9]*$", "^[A-Z_][A-Z0-9_]{3,}$", "^(px|em|rem|vh|vw|auto)$", "^rgba?\\(", "^\\.", "\\.(png|jpg|gif|svg|css|js|ts|md|json)$", "^[\\w.\\/\\\\-]+\\/[\\w.\\/\\\\-]+$" ], "reValidRe": [ "\\s", "[^\\x00-\\x7F]", "[!?,;:。!?,;:]\\s*$" ], "astAssignments": [ "overwriteName", "innerHTML", "outerHTML", "title", "alt", "placeholder", "textContent", "innerText", "ariaLabel", "nodeValue", "buttonText", "confirmText", "cancelText", "labelText" ], "astFunctions": [ "Notice", "setTitle", "setContent", "setName", "setDesc", "setButtonText", "setPlaceholder", "setTooltip", "addOption", "addOptions", "addHeading", "addText", "setHint", "setWarning", "setText", "appendText", "createEl", "createDiv", "createSpan", "addCommand", "insertText", "replaceRange", "replaceSelection", "log", "error", "warn", "info", "alert", "confirm", "prompt", "renderMarkdown", "setLabel", "setConfirmText", "setCancelText" ], "astKeys": [ "name", "description", "text", "placeholder", "label", "tooltip", "title", "header", "desc", "message", "buttontext", "aria-label", "heading", "content", "tab", "caption", "subtitle", "summary", "info", "warning", "error", "success", "hint", "instructions", "link", "selection", "annotation", "search", "speech", "page", "empty", "detail", "body", "option", "notice", "confirmText", "cancelText", "ariaLabel", "buttonText" ], "astRejectRe": [ "^\\s*$", "^\\d+$", "^[\\w-]+\\.[\\w-]+\\.\\w+$", "^https?:\\/\\/", "^data:image\\/", "^#([0-9a-f]{3}|[0-9a-f]{6})$", "^[a-z0-9]+-[a-z0-9-]+$", "^[a-z]+[A-Z][a-zA-Z0-9]*$", "^[A-Z_][A-Z0-9_]{3,}$", "^(px|em|rem|vh|vw|auto)$", "^rgba?\\(", "^\\.", "\\.(png|jpg|gif|svg|css|js|ts|md|json)$", "^[\\w.\\/\\\\-]+\\/[\\w.\\/\\\\-]+$" ], "astValidRe": [ "\\s", "[^\\x00-\\x7F]", "[!?,;:。!?,;:]\\s*$" ], "githubProxyUrl": "https://ghproxy.net/", "cloudRepos": [ "yunrr/obsidian-i18n-resources" ], "defaultCloudRepo": "yunrr/obsidian-i18n-resources", "managerTab": "plugins", "pluginViewMode": "list", "themeViewMode": "grid", "autoSave": true, "autoDiscovery": false, "autoMatchStrategy": "comprehensive", "autoApply": false, "autoCheckInterval": 24, "autoTrustedRepos": [], "autoExcludeList": [], "autoScanMode": "incremental", "lastAutoCheckTime": 0 }