From 13b5685fe59d0800880ce61460643cdbea5b6f04 Mon Sep 17 00:00:00 2001 From: Dusk Date: Sun, 3 May 2026 20:00:24 +0800 Subject: [PATCH] fix(review): satisfy Obsidian review bot lint MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 中文: 修复 Obsidian Review Bot 指出的英文文案 sentence case 问题,并调整设置页测试中的计时器类型,避免禁用 prefer-active-window-timers 规则。 English: Fix the remaining Obsidian Review Bot sentence-case findings and update the settings tab test timer shim so no prefer-active-window-timers disable comment is needed. --- main.js | 2 +- src/presentation/i18n/messages/en.ts | 6 +++--- src/presentation/settings/PluginSettingTab.test.ts | 12 ++++++------ 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/main.js b/main.js index c913582..3d75010 100644 --- a/main.js +++ b/main.js @@ -1,7 +1,7 @@ /* THIS IS A GENERATED/BUNDLED FILE BY ESBUILD */ -"use strict";var Tn=Object.defineProperty;var bo=Object.getOwnPropertyDescriptor;var yo=Object.getOwnPropertyNames;var xo=Object.prototype.hasOwnProperty;var Qe=(e,t)=>{for(var n in t)Tn(e,n,{get:t[n],enumerable:!0})},Co=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of yo(t))!xo.call(e,i)&&i!==n&&Tn(e,i,{get:()=>t[i],enumerable:!(r=bo(t,i))||r.enumerable});return e};var So=e=>Co(Tn({},"__esModule",{value:!0}),e);var Ml={};Qe(Ml,{default:()=>Fl});module.exports=So(Ml);var ho=require("obsidian");function B(e,t){return`${e}:${t}`}function Dn(e){return e?.cardType==="basic"}function ti(e){return e?.cardType==="cloze"}function O(e){return e?.cardType==="qa-group"}var ni=require("obsidian");function se(e=(0,ni.getLanguage)()){let t=e.toLowerCase();return t==="zh"||t.startsWith("zh-")?"zh":"en"}function de(e,t){return t.join(e==="zh"?"\u3001":", ")}var An={commands:{syncCurrentFileToAnki:"Sync current file to Anki",syncVaultToAnki:"Sync vault to Anki",clearCurrentFileSyncedCards:"Clear synced cards in current file",cleanupEmptyDecks:"Clean up empty decks"},settings:{pluginTitle:"Anki heading sync",ankiConnectUrl:{name:"AnkiConnect URL",desc:"Default: http://127.0.0.1:8765",placeholder:"Example: http://127.0.0.1:8765"},qaHeadingLevel:{name:"Heading level for question-and-answer cards",desc:"Use heading level 4 by default."},clozeHeadingLevel:{name:"Cloze heading level",desc:"Use heading level 5 by default."},cardAnswerCutoffMode:{name:"Card answer cutoff mode",desc:"A valid sync marker always wins. Without a valid marker, either keep the whole heading block or stop before the first 2+ consecutive blank lines.",options:{headingBlock:"Heading-block: whole heading block",doubleBlankLines:"Double-blank-lines: stop before the first 2+ blank lines"}},qaGroup:{title:"List notes for question-and-answer groups",marker:{name:"Marker for question-and-answer groups",desc:"When a question-and-answer heading ends with this hashtag marker, the whole heading block syncs as one list note for that group.",placeholder:"Hashtag marker"},managedNoteType:"Current note type: {{modelName}}. This route syncs QA Group list notes using the field mapping shown below.",managedModelContract:"Current note type summary: {{fieldCount}} fields and {{templateCount}} templates are available for this route."},syncOptions:{addObsidianBacklink:{name:"Add Obsidian backlink",desc:"Append a backlink to the source heading into synced cards."},obsidianBacklinkLabel:{name:"Obsidian backlink label",desc:"The text shown for the backlink. Blank input uses the default backlink label.",placeholder:"Open in Obsidian"},obsidianBacklinkPlacement:{name:"Obsidian backlink placement",desc:"Choose whether the backlink is appended to the question field or placed at the start or end of the answer body.",options:{questionLastLine:"Last line of question field",answerFirstLine:"First line of answer body",answerLastLine:"Last line of answer body"}},highlightsToCloze:{name:"Highlights to cloze",desc:"Convert ==highlight== segments into cloze deletions for cloze cards."},syncObsidianTagsToAnki:{name:"Sync Obsidian tags to Anki",desc:"Sync Obsidian-recognized tags from the current note into Anki note tags, including nested tags. On each sync, these tags overwrite the managed tags in Anki based on the current Obsidian content."},keepPureTagLinesInCardBody:{name:"Keep pure tag lines in card body",desc:'When turned off, remove every line in the card body that contains only tags, such as "#example #tag/case". Inline tags like "this is a #tag example" and lines with ordinary text like "tag label: #project" are kept. Extra blank lines created by removal are cleaned up automatically.'}},mapping:{title:"Note type field mappings",refresh:{name:"Refresh note types from Anki",button:"Refresh note types"},status:{idle:"Refresh note types from Anki to load the available note types.",loadedCount:"Loaded {{count}} note types from Anki.",empty:"Anki returned no note types.",failedLoadNoteTypes:"Failed to load note types from Anki.",loadedSavedMapping:"Loaded saved mapping for {{modelName}}.",selectedModel:"Selected {{modelName}}. Read fields from Anki to create or refresh its mapping.",loadedFieldsForModel:"Loaded fields for {{modelName}}. Review the suggested mapping and save it.",failedLoadFields:"Failed to load fields for {{modelName}}.",noLoadedFields:"No loaded fields for {{modelName}}. Read fields from Anki first.",savedMapping:"Saved mapping for {{modelName}}.",failedSaveMapping:"Failed to save mapping for {{modelName}}.",savedMappingReady:"Saved mapping is ready for {{title}}.",noSavedMapping:"No saved mapping for {{title}}. Read fields from Anki first."},section:{basic:{title:"Basic and question-and-answer",description:"Choose the note type for question-and-answer cards, read its fields from Anki, then confirm the title and body mapping."},cloze:{title:"Cloze",description:"Choose the cloze note type, read its fields from Anki, then confirm the main field mapping."}},noteTypeLabel:"{{title}} note type",noteTypeDesc:"Loaded from Anki note types. Refresh if the latest models are not shown.",fieldsLabel:"{{title}} fields",fieldsDesc:"Load the current note type fields from Anki, then review the suggested mapping.",readFieldsButton:"Read fields from Anki",loadedFields:"Loaded fields: {{fields}}",loadedFieldsNone:"Loaded fields: none. Read fields from Anki first.",mappingLabel:"{{title}} mapping",mappingDesc:"Save the current field mapping for this specific note type.",saveMappingButton:"Save mapping",titleFieldLabel:"{{title}} title field",titleFieldDesc:"Which Anki field should receive the heading/title fragment.",bodyFieldLabel:"{{title}} body field",bodyFieldDesc:"Which Anki field should receive the body fragment.",mainField:{name:"Cloze main field",desc:"The selected field receives title +

+ body during sync."},selectFieldPlaceholder:"-- select field --"},deck:{defaultSectionTitle:"Default deck",defaultDeck:{name:"Default deck",desc:"Lowest priority: used when neither a file-level deck nor a folder mapping matches."},fileDeckSectionTitle:"File-level custom deck",fileDeckEnabled:{name:"Enable file-level custom deck",desc:"When enabled, a shared marker can define one deck for the whole note in YAML or body."},marker:{name:"Deck marker name",desc:"YAML key and body marker share the same identifier. By default, use the built-in target deck marker."},template:{name:"Default deck template",desc:"Only the filename variable is supported. It expands to the current file name without .md when inserted."},insertLocation:{name:"Template insert location",desc:"Choose whether the deck template is written into YAML frontmatter or the body header area.",options:{body:"Body header",yaml:"YAML frontmatter"}},insertTemplate:{name:"Insert deck template into the current file",desc:"Write the deck declaration into the current active Markdown file using the current marker, template, and insert location.",button:"Insert deck template"},folderMappingSectionTitle:"Advanced: folder mapping",folderDeckMode:{name:"Folder mapping mode",desc:"Off / parent folders only / parent folders plus current file name.",options:{off:"Off",folder:"Folder-based mapping",folderAndFile:"Folder-and-file mapping"}},examplesTitle:"Examples:",folderExample:"Folder-based mapping example: \u6570\u5B66/\u7B2C\u4E00\u7AE0/\u7B2C\u4E00\u8282.md -> \u6570\u5B66::\u7B2C\u4E00\u7AE0",folderAndFileExample:"Folder-and-file mapping example: \u6570\u5B66/\u7B2C\u4E00\u7AE0/\u7B2C\u4E00\u8282.md -> \u6570\u5B66::\u7B2C\u4E00\u7AE0::\u7B2C\u4E00\u8282",fallbackDesc:"If neither folder-and-file mapping nor file-level custom decks are used, the default deck name is used as the Anki deck.",priorityTitle:"Final priority",priorityDesc:"Final deck priority: file-level custom deck > folder-mapped deck > default deck."},scope:{name:"Plugin run scope",summary:{all:"Process Markdown files across the whole vault",include:"Only process Markdown files in the checked folders below",exclude:"Process the whole vault, but skip Markdown files in the checked folders below"},unconfiguredWarning:"Run scope is not configured yet. Include mode requires at least one selected folder before sync can run.",option:{all:"All files",include:"Only in selected folders",exclude:"Exclude selected folders"},treeDescription:{include:"Only in selected folders: only process Markdown files in the checked folders below",exclude:"Exclude selected folders: process the whole vault, but skip Markdown files in the checked folders below"},loading:"Loading folders from the current vault...",empty:"There are no selectable folders in the current vault.",failedLoad:"Failed to load folders from the current vault.",expandFolder:"Expand {{name}}",collapseFolder:"Collapse {{name}}",folderDeckModeOverride:{ariaLabel:"Toggle the alternate folder deck mapping mode for {{name}}",hint:{folder:"This folder uses the folder-only deck name by itself",folderAndFile:"This folder uses the folder-and-file deck name by itself"},title:{folder:"Global mode is folder-and-file; enable this to use folder-only deck names for this folder",folderAndFile:"Global mode is folder-only; enable this to use folder-and-file deck names for this folder"}}},cards:{cardTypes:{title:"Card types and basics",desc:"Edit recognition rules directly. Changes save automatically.",advancedHint:"Advanced: keep AnkiConnect URL here without promoting it to a separate status card.",markerPlaceholder:"/",fieldsUnavailable:"-- read fields first --",autoManagedField:"Written automatically",autoComposedAnswer:"Auto composed",qaGroupManagedNoteType:"{{modelName}} (for QA Group list notes)",statusLabel:"Status: ",cacheEmpty:"There are no cached Anki note templates yet. Read the Anki template config manually.",cacheSummary:"Currently using {{noteTypeCount}} cached note templates with {{configuredCount}} selected card modes configured.",cacheChanged:"Anki currently reports {{liveCount}} note templates, which differs from the {{cachedCount}} cached templates on this page. The UI is still using the cache with {{configuredCount}} selected card modes configured; read the Anki template config manually to refresh.",cacheCheckFailed:"Still using {{noteTypeCount}} cached note templates with {{configuredCount}} selected card modes configured. The background check for the latest template list failed; read the Anki template config manually if you need a refresh.",loadedSummary:"Loaded {{noteTypeCount}} note templates and configured {{configuredCount}} selected card modes.",loadedFieldsStatus:"Refreshed fields for {{count}} selected note types.",failedLoad:"Failed to load note types or fields from Anki.",failedSave:"Failed to save card type settings.",loadAnki:{button:"Read Anki note types and fields manually",loading:"Loading Anki note types and fields..."},columns:{enabled:"Enabled",type:"Card type",headingLevel:"Heading marker",extraMarker:"Extra marker",noteType:"Anki note type",questionField:"Question field",answerField:"Answer field"},labels:{headingLevel:"Card marker:",extraMarker:"Extra marker:",noteType:"Anki note type:",questionField:"Question field:",answerField:"Answer field:",mainField:"Main field:",fields:"Fields:",qaGroupTitleField:"Title field:",qaGroupFirstQuestionField:"First question field:",qaGroupFirstAnswerField:"First answer field:",qaGroupConfiguredSlots:"Configured pairs:",qaGroupSlotFields:"Question/answer fields:",qaGroupWarnings:"Warnings:"},qaGroup:{noModel:"Select an Anki note type first",unavailable:"Read fields from Anki first",detectedSlots:"Configured {{count}} pair(s)",configuredSlots:"Configured {{count}} pair(s)",configuredSlotExample:"First {{firstQuestionField}} / {{firstAnswerField}}, last {{lastQuestionField}} / {{lastAnswerField}}",acceptWarnings:"I confirm these warnings can be ignored and sync may continue",warning:{missingAnswer:"Slot {{index}} is missing its answer field, so {{questionField}} / {{answerField}} was ignored.",missingQuestion:"Slot {{index}} is missing its question field, so {{questionField}} / {{answerField}} was ignored."}},sharedClozeMappingHint:"Reuse the current Anki note type and main field from the sequential cloze row. No separate setup is needed.",rows:{basic:"Question and answer (regular paragraph)",qaGroup:"Question and answer (nested list)",cloze:"Cloze (sequential deletions)",clozeAll:"Cloze (all deletions)"}},syncContent:{title:"Card body sync content",desc:"These options affect rendered content only. Updating them refreshes this card only.",sections:{bodyRange:"1. Choose the card body range",backlink:"2. Add backlinks for card-level jumps from Anki to Obsidian",tags:"3. Read tags",clozeSpecial:"4. Cloze-specific options"}},scope:{title:"Plugin run scope",desc:"Keep the existing scope modes and folder tree. The tree is loaded lazily and can be refreshed locally.",refreshFolders:"Refresh folder list"},deck:{title:"Card deck settings",desc:"Card deck settings are grouped by recommended workflow.",sections:{folderMapping:"1. Recommended: use folder-and-file mapping for Anki decks",fileDeck:"2. Optional: enable file-level custom decks",defaultDeck:"3. Fallback: use the default deck"}},commands:{title:"Command guide",desc:"These are the current commands exposed in the command palette.",items:{syncCurrentFile:"Sync only the active Markdown file to Anki.",syncVault:"Sync all in-scope Markdown files in the vault to Anki.",clearCurrentFile:"Clear synced card markers and tracked sync state for the active file.",cleanupDecks:"Delete selected empty decks from Anki."}}}},modal:{emptyDeck:{title:"Clean up empty decks",description:"Select the empty decks to delete. A deck is deleted only if it is still empty at deletion time.",selectAll:"Select all",clearAll:"Clear all",invert:"Invert selection",cancel:"Cancel",deleteSelected:"Delete selected empty decks",selectionCount:"Selected {{selected}} / {{total}} empty decks"}},notice:{invalidSettingsRestored:"Invalid plugin settings were detected. Default settings were restored in memory.",failedSavePluginSettings:"Failed to save plugin settings.",noActiveMarkdownForSync:"No active Markdown file is available for sync.",syncUseCaseNotInitialized:"Sync use case is not initialized.",currentFileSyncFailed:"Current file sync failed.",vaultSyncFailed:"Vault sync failed.",noActiveMarkdownForDeckTemplateInsertion:"No active Markdown file is available for deck template insertion.",vaultGatewayNotInitialized:"Vault gateway is not initialized.",markdownFileNotFound:"Markdown file not found: {{filePath}}",deckTemplateAlreadyCurrent:"The deck template in the current file is already up to date.",deckTemplateInserted:"Inserted deck template into the current file: {{deck}}",deckTemplateInsertionFailed:"Deck template insertion failed.",noActiveMarkdownForReset:"No active Markdown file is available for reset.",clearCurrentFileUseCaseNotInitialized:"Clear-current-file use case is not initialized.",noTrackedCardsInCurrentFile:"There are no synced cards in the current file.",clearCurrentFileFailed:"Clear current file synced cards failed.",cleanupEmptyDecksUseCaseNotInitialized:"Empty-deck cleanup use case is not initialized.",noEmptyDeckCandidates:"No empty decks were found for cleanup.",cleanupEmptyDecksCancelled:"Empty-deck cleanup was cancelled.",cleanupEmptyDecksFailed:"Cleanup empty decks failed.",summary:{currentFileSync:"Current file sync completed: files {{scannedFiles}}, cards {{scannedCards}}, created {{created}}, rebuilt {{rebuilt}}, updated {{updated}}, migrated note types {{migratedNoteTypes}}, migrated decks {{migratedDecks}}, orphaned {{orphaned}}, media {{uploadedMedia}}, skipped {{skippedUnchangedCards}}.",vaultSync:"Vault sync completed: files {{scannedFiles}}, cards {{scannedCards}}, created {{created}}, rebuilt {{rebuilt}}, updated {{updated}}, migrated note types {{migratedNoteTypes}}, migrated decks {{migratedDecks}}, orphaned {{orphaned}}, media {{uploadedMedia}}, skipped {{skippedUnchangedCards}}.",clearCurrentFile:"Current file synced cards cleared: tracked cards {{trackedCards}}, tracked groups {{trackedGroups}}, deleted notes {{deletedNotes}}, removed markers {{removedMarkers}}, removed ID markers {{removedCardMarkers}}, removed GI markers {{removedGroupMarkers}}, deleted local records {{deletedLocalRecords}}.",cleanupEmptyDecks:"Empty-deck cleanup completed: candidates {{candidateCount}}, selected {{selectedCount}}, deleted {{deletedCount}}, skipped {{skippedCount}}.",markerWriteConflicts:"Marker write conflicts: {{files}}.",warningsCount:"Warnings: {{count}}.",markerRemovalConflicts:"Marker removal conflicts: {{files}}.",failures:"Failures: {{items}}.",skippedDecks:"Skipped decks: {{decks}}."}},errors:{runScopeNotConfigured:"Run scope is not configured. In include mode, select at least one folder before syncing.",currentFileOutOfScope:"The current file is outside the plugin scope: {{filePath}}",deck:{emptyName:"Deck name cannot be empty. Check the file-level deck declaration or default deck setting."},settings:{headingLevelsRange:"Heading levels must be integers between 1 and 6.",headingLevelsDifferent:"The question-and-answer and cloze heading levels must be different.",cardTypeConfigsObject:"Card type configs must be an object.",cardTypeEnabledBoolean:"Each card type enabled flag must be a boolean.",cardTypeExtraMarkerString:"Each card type extra marker must be a string.",cardTypeDefaultConflict:"Only one enabled default card type is allowed at heading H{{headingLevel}}.",cardAnswerCutoffModeInvalid:"Card answer cutoff mode must be heading-block or double-blank-lines.",qaNoteTypeRequired:"A question-and-answer note type is required.",qaGroupMarkerRequired:"A question-and-answer group marker is required.",qaGroupMarkerInvalid:"The question-and-answer group marker must be a hashtag-style token.",clozeNoteTypeRequired:"Cloze note type is required.",defaultDeckRequired:"Default deck is required.",fileDeckEnabledBoolean:"File deck enabled must be a boolean.",syncObsidianTagsToAnkiBoolean:"Sync Obsidian tags to Anki must be a boolean.",keepPureTagLinesInCardBodyBoolean:"Keep pure tag lines in card body must be a boolean.",fileDeckMarkerString:"File deck marker must be a string.",fileDeckTemplateString:"File deck template must be a string.",fileDeckInsertLocationInvalid:"File deck insert location must be YAML or body.",folderDeckModeInvalid:"Folder deck mode must be off, folder, or folder-and-file.",scopeModeInvalid:"Scope mode must be one of all, include, or exclude.",obsidianBacklinkPlacementInvalid:"Obsidian backlink placement must be question-last-line, answer-first-line, or answer-last-line.",includeFoldersArray:"Include folders must be an array.",includeFoldersStrings:"Include folders must only contain strings.",excludeFoldersArray:"Exclude folders must be an array.",excludeFoldersStrings:"Exclude folders must only contain strings.",alternateFolderDeckModeFoldersArray:"Alternate folder deck mode folders must be an array.",alternateFolderDeckModeFoldersStrings:"Alternate folder deck mode folders must only contain strings.",ankiConnectUrlRequired:"AnkiConnect URL is required.",ankiNoteTypeCacheArray:"Anki note type cache must be an array.",ankiNoteTypeCacheStrings:"Anki note type cache can only contain strings.",ankiModelFieldCacheObject:"Anki model field cache must be an object.",ankiModelFieldCacheEntryObject:"Each Anki model field cache entry must be an object.",ankiModelFieldCacheFieldNamesArray:"Anki model field cache fieldNames must be an array.",ankiModelFieldCacheFieldNamesStrings:"Anki model field cache fieldNames can only contain strings.",ankiModelFieldCacheLoadedAt:"Anki model field cache loadedAt must be a finite number.",noteFieldMappingsObject:"Note field mappings must be an object.",noteFieldMappingsCardType:"Note field mappings must use a supported card type.",noteFieldMappingsModelName:"Note field mappings must include a model name.",noteFieldMappingsLoadedFieldNames:"Note field mappings must include loaded field names.",noteFieldMappingsLoadedAt:"Note field mappings must include a loaded timestamp.",noteFieldMappingsQaGroupSlotsArray:"Question-and-answer group field mapping slots must be an array.",noteFieldMappingsQaGroupSlotObject:"Each question-and-answer group field mapping slot must be an object.",noteFieldMappingsQaGroupSlotIndex:"Each question-and-answer group field mapping slot.index must be an integer greater than 0.",noteFieldMappingsQaGroupSlotQuestionField:"Each question-and-answer group field mapping slot.questionField must be a string.",noteFieldMappingsQaGroupSlotAnswerField:"Each question-and-answer group field mapping slot.answerField must be a string.",noteFieldMappingsQaGroupWarningsArray:"Question-and-answer group field mapping warnings must be an array.",noteFieldMappingsQaGroupWarningsStrings:"Question-and-answer group field mapping warnings can only contain strings.",noteFieldMappingsQaGroupAcceptedWarningsArray:"Question-and-answer group field mapping acceptedWarnings must be an array.",noteFieldMappingsQaGroupAcceptedWarningsStrings:"Question-and-answer group field mapping acceptedWarnings can only contain strings.",noteFieldMappingsQaGroupDerivationObject:"Question-and-answer group field mapping derivation must be an object.",noteFieldMappingsQaGroupDerivationMode:"Question-and-answer group field mapping derivation.mode must be first-pair.",noteFieldMappingsQaGroupDerivationFirstQuestionField:"Question-and-answer group field mapping derivation.firstQuestionField must be a string.",noteFieldMappingsQaGroupDerivationFirstAnswerField:"Question-and-answer group field mapping derivation.firstAnswerField must be a string."},noteFieldMapping:{noteTypeNotSelected:{basic:"No Anki note type is selected for basic cards. Choose one in settings before syncing.",cloze:"No Anki note type is selected for cloze cards. Choose one in settings before syncing.",qaGroup:"No Anki note type is selected for question-and-answer group cards. Choose one in settings before syncing."},missingSavedMapping:{basic:'No saved field mapping found for basic note type "{{modelName}}". Open plugin settings and read fields from Anki first.',cloze:'No saved field mapping found for cloze note type "{{modelName}}". Open plugin settings and read fields from Anki first.',qaGroup:'No saved field mapping found for QA Group note type "{{modelName}}". Open plugin settings, read fields from Anki, and save the mapping first.'},incompleteSavedMapping:{basic:'Saved field mapping for basic note type "{{modelName}}" is incomplete. Open plugin settings and save both title and body fields.',cloze:'Saved field mapping for cloze note type "{{modelName}}" is incomplete. Open plugin settings and save the main field.'},titleBodyMustDiffer:{basic:'Basic note type "{{modelName}}" must use different title and body fields.'},stale:'Saved field mapping for note type "{{modelName}}" is stale because these fields no longer exist in Anki: {{fields}}. Open plugin settings and read fields from Anki again.',qaGroupMissingTitle:'Saved field mapping for QA Group note type "{{modelName}}" is incomplete because the title field is missing. Save the mapping again in settings.',qaGroupNoCompleteSlots:'Saved field mapping for QA Group note type "{{modelName}}" is incomplete because it has no saved question/answer slot pairs. Save the mapping again in settings.',qaGroupNonContinuousSlots:'QA Group note type "{{modelName}}" must start its question/answer slots at pair {{firstIndex}} = 1. Renumber the first pair to 1.',qaGroupSelectedFieldMissing:'The selected field "{{field}}" for QA Group note type "{{modelName}}" is no longer present in Anki. Read fields again and save the mapping again.',qaGroupDuplicateFields:'QA Group note type "{{modelName}}" cannot reuse the same title, question, or answer field.',qaGroupFirstPairNumberMismatch:'The first question field "{{questionField}}" and first answer field "{{answerField}}" for QA Group note type "{{modelName}}" do not use the same pair number.',qaGroupFirstPairMustStartAtOne:'QA Group note type "{{modelName}}" must start its first selected pair at 1, but the current pair starts at {{firstIndex}}.',qaGroupWarningsUnaccepted:'QA Group note type "{{modelName}}" still has unconfirmed field warnings. Confirm them in settings before syncing.',qaGroupSlotCapacityExceeded:'Saved field mapping for QA Group note type "{{modelName}}" only includes {{capacity}} question/answer pair(s), but the current block has {{itemCount}} item(s): {{filePath}}:{{blockStartLine}}.'},noteTypeMigration:{failed:'Failed to migrate Anki note {{noteId}} from "{{fromModel}}" to "{{toModel}}"{{location}}: {{reason}}',unsupported:'The current AnkiConnect does not support migrating Anki note {{noteId}} from "{{fromModel}}" to "{{toModel}}"{{location}}. Upgrade AnkiConnect, or clear the Anki ID and sync again. Reason: {{reason}}'},writeBack:{summary:"Markdown marker write-back failed for {{fileCount}} file(s).",markdownFileNotFound:"Markdown file was not found.",missingSourceContent:"Scanned source content is missing for marker write-back.",noteIdMissing:"Cannot write a marker because note ID is missing for the block at line {{blockStartLine}}."},markerRemoval:{markdownFileNotFound:"Markdown file was not found."}},warnings:{deck:{conflictYamlBody:"Conflicting {{marker}} declarations were found in YAML and body. This sync used the YAML value.",multipleBodyDeclarations:"Multiple {{marker}} declarations were found in the file. This sync used the first body declaration.",invalidFolderSegment:"A folder or file name contains ::, so folder-based deck mapping was skipped and the default deck was used.",fallbackDefault:"No explicit deck was found and a folder-based deck could not be generated, so the default deck was used."}}};var ri={commands:{syncCurrentFileToAnki:"\u540C\u6B65\u5F53\u524D\u6587\u4EF6\u5230 Anki",syncVaultToAnki:"\u540C\u6B65\u5168\u5E93\u5230 Anki",clearCurrentFileSyncedCards:"\u6E05\u7A7A\u5F53\u524D\u6587\u4EF6\u5DF2\u540C\u6B65\u5361\u7247",cleanupEmptyDecks:"\u6E05\u7406\u7A7A\u724C\u7EC4"},settings:{pluginTitle:"Anki Heading Sync",ankiConnectUrl:{name:"AnkiConnect URL",desc:"\u9ED8\u8BA4\u662F http://127.0.0.1:8765",placeholder:"http://127.0.0.1:8765"},qaHeadingLevel:{name:"QA \u6807\u9898\u5C42\u7EA7",desc:"\u9ED8\u8BA4\u662F H4"},clozeHeadingLevel:{name:"\u586B\u7A7A\u9898\u6807\u9898\u5C42\u7EA7",desc:"\u9ED8\u8BA4\u662F H5"},cardAnswerCutoffMode:{name:"\u5361\u7247\u6B63\u6587\u622A\u6B62\u6A21\u5F0F",desc:"\u6709\u6548\u540C\u6B65\u6807\u8BB0\u59CB\u7EC8\u4F18\u5148\u3002\u6CA1\u6709\u6709\u6548\u6807\u8BB0\u65F6\uFF0C\u9009\u62E9\u7EE7\u7EED\u5230\u6574\u4E2A\u6807\u9898\u5757\u672B\u5C3E\uFF0C\u6216\u5728\u9996\u4E2A 2+ \u8FDE\u7EED\u7A7A\u884C\u524D\u622A\u6B62\u3002",options:{headingBlock:"heading-block\uFF1A\u6574\u4E2A\u6807\u9898\u5757",doubleBlankLines:"double-blank-lines\uFF1A\u5728\u9996\u4E2A 2+ \u8FDE\u7EED\u7A7A\u884C\u524D\u622A\u6B62"}},qaGroup:{title:"\u95EE\u7B54\u9898\uFF08\u591A\u7EA7\u5217\u8868\u5F62\u5F0F\uFF09",marker:{name:"QA Group \u6807\u8BB0",desc:"\u5F53 QA \u6807\u9898\u4EE5\u8FD9\u4E2A hashtag \u6807\u8BB0\u7ED3\u5C3E\u65F6\uFF0C\u6574\u4E2A\u6807\u9898\u5757\u4F1A\u540C\u6B65\u4E3A\u4E00\u6761\u591A\u7EA7\u5217\u8868\u95EE\u7B54\u7B14\u8BB0\u3002",placeholder:"#anki-list"},managedNoteType:"\u5F53\u524D\u7B14\u8BB0\u7C7B\u578B\uFF1A{{modelName}}\u3002\u8FD9\u6761\u8DEF\u7EBF\u4F1A\u6309\u4E0B\u65B9\u5B57\u6BB5\u6620\u5C04\u540C\u6B65\u591A\u7EA7\u5217\u8868\u95EE\u7B54\u5185\u5BB9\u3002",managedModelContract:"\u5F53\u524D\u7B14\u8BB0\u7C7B\u578B\u6458\u8981\uFF1A\u8FD9\u6761\u8DEF\u7EBF\u53EF\u7528 {{fieldCount}} \u4E2A\u5B57\u6BB5\u548C {{templateCount}} \u4E2A\u6A21\u677F\u3002"},syncOptions:{addObsidianBacklink:{name:"\u6DFB\u52A0 Obsidian \u56DE\u94FE",desc:"\u628A\u6765\u6E90\u6807\u9898\u7684\u56DE\u94FE\u8FFD\u52A0\u5230\u540C\u6B65\u540E\u7684\u5361\u7247\u4E2D\u3002"},obsidianBacklinkLabel:{name:"Obsidian \u56DE\u94FE\u663E\u793A\u540D\u79F0",desc:"\u8BBE\u7F6E\u56DE\u94FE\u663E\u793A\u7684\u6587\u5B57\u3002\u7559\u7A7A\u6216\u53EA\u586B\u7A7A\u683C\u65F6\u4F1A\u56DE\u9000\u4E3A Open in Obsidian\u3002",placeholder:"Open in Obsidian"},obsidianBacklinkPlacement:{name:"Obsidian \u56DE\u94FE\u653E\u7F6E\u4F4D\u7F6E",desc:"\u9009\u62E9\u628A\u56DE\u94FE\u8FFD\u52A0\u5230\u95EE\u9898\u680F\u6700\u540E\u4E00\u884C\uFF0C\u6216\u653E\u5230\u7B54\u6848\u6B63\u6587\u7684\u7B2C\u4E00\u884C / \u6700\u540E\u4E00\u884C\u3002",options:{questionLastLine:"\u95EE\u9898\u680F\u7684\u6700\u540E\u4E00\u884C",answerFirstLine:"\u7B54\u6848\u6B63\u6587\u7684\u7B2C\u4E00\u884C",answerLastLine:"\u7B54\u6848\u6B63\u6587\u7684\u6700\u540E\u4E00\u884C"}},highlightsToCloze:{name:"\u9AD8\u4EAE\u8F6C\u586B\u7A7A\u9898",desc:"\u628A ==highlight== \u7247\u6BB5\u8F6C\u6362\u6210\u586B\u7A7A\u9898\u4F7F\u7528\u7684\u6316\u7A7A\u683C\u5F0F\u3002"},syncObsidianTagsToAnki:{name:"\u540C\u6B65 Obsidian \u6807\u7B7E\u5230 Anki",desc:"\u5C06\u5F53\u524D\u7B14\u8BB0\u4E2D Obsidian \u8BC6\u522B\u5230\u7684\u6807\u7B7E\u540C\u6B65\u4E3A Anki \u7B14\u8BB0\u6807\u7B7E\uFF0C\u652F\u6301\u5D4C\u5957\u6807\u7B7E\u3002\u6BCF\u6B21\u540C\u6B65\u65F6\uFF0C\u8FD9\u4E9B\u6807\u7B7E\u90FD\u4F1A\u4EE5\u5F53\u524D Obsidian \u5185\u5BB9\u4E3A\u51C6\u8986\u76D6 Anki\u3002"},keepPureTagLinesInCardBody:{name:"\u5728\u5361\u7247\u6B63\u6587\u4E2D\u4FDD\u7559\u7EAF\u6807\u7B7E\u884C",desc:"\u5173\u95ED\u540E\uFF0C\u4F1A\u5220\u9664\u6B63\u6587\u4E2D\u6240\u6709\u53EA\u5305\u542B\u6807\u7B7E\u7684\u6574\u884C\uFF0C\u4F8B\u5982 \u201C#\u9879\u76EEA #\u91CD\u70B9/\u6848\u4F8B\u201D\u3002\u50CF\u201C\u8FD9\u662F #\u6807\u7B7E \u7684\u6848\u4F8B\u201D\u8FD9\u7C7B\u884C\u5185\u6807\u7B7E\uFF0C\u6216\u201C\u6807\u7B7E\uFF1A#\u9879\u76EEA\u201D\u8FD9\u7C7B\u5E26\u666E\u901A\u6587\u5B57\u7684\u884C\uFF0C\u4E0D\u4F1A\u88AB\u5220\u9664\u3002\u5220\u9664\u540E\u4F1A\u81EA\u52A8\u6E05\u7406\u591A\u4F59\u7A7A\u884C\u3002"}},mapping:{title:"\u7B14\u8BB0\u7C7B\u578B\u5B57\u6BB5\u6620\u5C04",refresh:{name:"\u4ECE Anki \u5237\u65B0\u7B14\u8BB0\u7C7B\u578B",button:"\u5237\u65B0\u7B14\u8BB0\u7C7B\u578B"},status:{idle:"\u8BF7\u5148\u4ECE Anki \u5237\u65B0\u7B14\u8BB0\u7C7B\u578B\uFF0C\u4EE5\u52A0\u8F7D\u53EF\u7528\u7684\u7B14\u8BB0\u7C7B\u578B\u5217\u8868\u3002",loadedCount:"\u5DF2\u4ECE Anki \u52A0\u8F7D {{count}} \u4E2A\u7B14\u8BB0\u7C7B\u578B\u3002",empty:"Anki \u6CA1\u6709\u8FD4\u56DE\u4EFB\u4F55\u7B14\u8BB0\u7C7B\u578B\u3002",failedLoadNoteTypes:"\u4ECE Anki \u52A0\u8F7D\u7B14\u8BB0\u7C7B\u578B\u5931\u8D25\u3002",loadedSavedMapping:"\u5DF2\u52A0\u8F7D {{modelName}} \u7684\u5DF2\u4FDD\u5B58\u6620\u5C04\u3002",selectedModel:"\u5DF2\u9009\u62E9 {{modelName}}\u3002\u8BF7\u4ECE Anki \u8BFB\u53D6\u5B57\u6BB5\u4EE5\u521B\u5EFA\u6216\u5237\u65B0\u5B83\u7684\u6620\u5C04\u3002",loadedFieldsForModel:"\u5DF2\u52A0\u8F7D {{modelName}} \u7684\u5B57\u6BB5\u3002\u8BF7\u68C0\u67E5\u5EFA\u8BAE\u6620\u5C04\u540E\u4FDD\u5B58\u3002",failedLoadFields:"\u52A0\u8F7D {{modelName}} \u7684\u5B57\u6BB5\u5931\u8D25\u3002",noLoadedFields:"{{modelName}} \u8FD8\u6CA1\u6709\u5DF2\u52A0\u8F7D\u5B57\u6BB5\u3002\u8BF7\u5148\u4ECE Anki \u8BFB\u53D6\u5B57\u6BB5\u3002",savedMapping:"\u5DF2\u4FDD\u5B58 {{modelName}} \u7684\u6620\u5C04\u3002",failedSaveMapping:"\u4FDD\u5B58 {{modelName}} \u7684\u6620\u5C04\u5931\u8D25\u3002",savedMappingReady:"{{title}} \u7684\u5DF2\u4FDD\u5B58\u6620\u5C04\u5DF2\u5C31\u7EEA\u3002",noSavedMapping:"{{title}} \u8FD8\u6CA1\u6709\u5DF2\u4FDD\u5B58\u6620\u5C04\u3002\u8BF7\u5148\u4ECE Anki \u8BFB\u53D6\u5B57\u6BB5\u3002"},section:{basic:{title:"QA / \u57FA\u7840\u5361",description:"\u9009\u62E9 QA \u7B14\u8BB0\u7C7B\u578B\uFF0C\u4ECE Anki \u8BFB\u53D6\u5B57\u6BB5\uFF0C\u7136\u540E\u786E\u8BA4\u6807\u9898/\u6B63\u6587\u6620\u5C04\u3002"},cloze:{title:"\u586B\u7A7A\u9898",description:"\u9009\u62E9\u586B\u7A7A\u9898\u7B14\u8BB0\u7C7B\u578B\uFF0C\u4ECE Anki \u8BFB\u53D6\u5B57\u6BB5\uFF0C\u7136\u540E\u786E\u8BA4\u4E3B\u5B57\u6BB5\u6620\u5C04\u3002"}},noteTypeLabel:"{{title}} \u7B14\u8BB0\u7C7B\u578B",noteTypeDesc:"\u4ECE Anki \u7684\u7B14\u8BB0\u7C7B\u578B\u5217\u8868\u52A0\u8F7D\u3002\u5982\u679C\u6700\u65B0\u6A21\u578B\u6CA1\u6709\u663E\u793A\uFF0C\u8BF7\u5148\u5237\u65B0\u3002",fieldsLabel:"{{title}} \u5B57\u6BB5",fieldsDesc:"\u4ECE Anki \u8BFB\u53D6\u5F53\u524D\u7B14\u8BB0\u7C7B\u578B\u7684\u5B57\u6BB5\uFF0C\u7136\u540E\u68C0\u67E5\u5EFA\u8BAE\u6620\u5C04\u3002",readFieldsButton:"\u4ECE Anki \u8BFB\u53D6\u5B57\u6BB5",loadedFields:"\u5DF2\u52A0\u8F7D\u5B57\u6BB5\uFF1A{{fields}}",loadedFieldsNone:"\u5DF2\u52A0\u8F7D\u5B57\u6BB5\uFF1A\u65E0\u3002\u8BF7\u5148\u4ECE Anki \u8BFB\u53D6\u5B57\u6BB5\u3002",mappingLabel:"{{title}} \u6620\u5C04",mappingDesc:"\u4FDD\u5B58\u5F53\u524D\u7B14\u8BB0\u7C7B\u578B\u7684\u5B57\u6BB5\u6620\u5C04\u3002",saveMappingButton:"\u4FDD\u5B58\u6620\u5C04",titleFieldLabel:"{{title}} \u6807\u9898\u5B57\u6BB5",titleFieldDesc:"\u9009\u62E9\u63A5\u6536\u6807\u9898\u7247\u6BB5\u7684 Anki \u5B57\u6BB5\u3002",bodyFieldLabel:"{{title}} \u6B63\u6587\u5B57\u6BB5",bodyFieldDesc:"\u9009\u62E9\u63A5\u6536\u6B63\u6587\u7247\u6BB5\u7684 Anki \u5B57\u6BB5\u3002",mainField:{name:"\u586B\u7A7A\u9898\u4E3B\u5B57\u6BB5",desc:"\u540C\u6B65\u65F6\uFF0C\u6240\u9009\u5B57\u6BB5\u4F1A\u63A5\u6536 \u6807\u9898 +

+ \u6B63\u6587\u3002"},selectFieldPlaceholder:"-- \u9009\u62E9\u5B57\u6BB5 --"},deck:{defaultSectionTitle:"\u9ED8\u8BA4\u724C\u7EC4",defaultDeck:{name:"\u9ED8\u8BA4\u724C\u7EC4",desc:"\u4F18\u5148\u7EA7\u6700\u4F4E\uFF1A\u5F53\u6587\u4EF6\u7EA7\u81EA\u5B9A\u4E49\u724C\u7EC4\u4E0E\u6587\u4EF6\u5939\u6620\u5C04\u724C\u7EC4\u90FD\u672A\u547D\u4E2D\u65F6\u4F7F\u7528\u3002"},fileDeckSectionTitle:"\u6587\u4EF6\u7EA7\u81EA\u5B9A\u4E49\u724C\u7EC4",fileDeckEnabled:{name:"\u5F00\u542F\u6587\u4EF6\u7EA7\u81EA\u5B9A\u4E49\u724C\u7EC4",desc:"\u5F00\u542F\u540E\uFF0C\u53EF\u5728 YAML \u6216\u6B63\u6587\u4E2D\u7528\u7EDF\u4E00\u8BC6\u522B\u540D\u4E3A\u6574\u7BC7\u7B14\u8BB0\u6307\u5B9A\u4E00\u4E2A\u724C\u7EC4\u3002"},marker:{name:"\u724C\u7EC4\u8BC6\u522B\u540D",desc:"YAML key \u4E0E\u6B63\u6587\u6807\u8BB0\u5171\u7528\u540C\u4E00\u4E2A\u8BC6\u522B\u540D\u3002\u9ED8\u8BA4\u503C\u662F TARGET DECK\u3002"},template:{name:"\u9ED8\u8BA4\u724C\u7EC4\u6A21\u677F",desc:"\u53EA\u652F\u6301 filename \u53D8\u91CF\u3002\u63D2\u5165\u65F6\u4F1A\u5C55\u5F00\u4E3A\u5F53\u524D\u6587\u4EF6\u540D\uFF08\u4E0D\u542B .md\uFF09\u3002"},insertLocation:{name:"\u6A21\u677F\u63D2\u5165\u4F4D\u7F6E",desc:"\u9009\u62E9\u5C06\u724C\u7EC4\u6A21\u677F\u5199\u5165 YAML frontmatter \u8FD8\u662F\u6B63\u6587\u524D\u90E8\u3002",options:{body:"\u6B63\u6587\u524D\u90E8",yaml:"YAML frontmatter"}},insertTemplate:{name:"\u5411\u5F53\u524D\u6587\u4EF6\u63D2\u5165\u724C\u7EC4\u6A21\u677F",desc:"\u6309\u5F53\u524D\u8BC6\u522B\u540D\u3001\u6A21\u677F\u548C\u63D2\u5165\u4F4D\u7F6E\uFF0C\u628A\u724C\u7EC4\u58F0\u660E\u5199\u5165\u5F53\u524D\u6D3B\u52A8 Markdown \u6587\u4EF6\u3002",button:"\u63D2\u5165\u724C\u7EC4\u6A21\u677F"},folderMappingSectionTitle:"\u9AD8\u7EA7\uFF1A\u6587\u4EF6\u5939\u6620\u5C04\u724C\u7EC4",folderDeckMode:{name:"\u6587\u4EF6\u5939\u6620\u5C04\u6A21\u5F0F",desc:"\u5173\u95ED / \u4EC5\u7236\u6587\u4EF6\u5939 / \u6587\u4EF6\u5939\u53CA\u6587\u4EF6\u540D\u3002",options:{off:"\u5173\u95ED",folder:"\u6587\u4EF6\u5939\u7EA7\u6620\u5C04",folderAndFile:"\u6587\u4EF6\u5939\u53CA\u6587\u4EF6\u540D\u7EA7\u6620\u5C04"}},examplesTitle:"\u793A\u4F8B\uFF1A",folderExample:"\u6587\u4EF6\u5939\u6620\u5C04\u724C\u7EC4\u793A\u4F8B\uFF1A\u6570\u5B66/\u7B2C\u4E00\u7AE0/\u7B2C\u4E00\u8282.md -> \u6570\u5B66::\u7B2C\u4E00\u7AE0",folderAndFileExample:"\u6587\u4EF6\u5939\u53CA\u6587\u4EF6\u540D\u6620\u5C04\u724C\u7EC4\u793A\u4F8B\uFF1A\u6570\u5B66/\u7B2C\u4E00\u7AE0/\u7B2C\u4E00\u8282.md -> \u6570\u5B66::\u7B2C\u4E00\u7AE0::\u7B2C\u4E00\u8282",fallbackDesc:"\u82E5\u5747\u4E0D\u6253\u5F00\u300C\u6587\u4EF6\u5939\u53CA\u6587\u4EF6\u540D\u300D\u53CA\u300C\u6587\u4EF6\u7EA7\u300D\u724C\u7EC4\uFF0C\u5219\u4EE5\u300C\u9ED8\u8BA4\u724C\u7EC4\u540D\u79F0\u300D\u4F5C\u4E3A Anki \u7684\u724C\u7EC4\u540D\u3002",priorityTitle:"\u6700\u7EC8\u724C\u7EC4\u4F18\u5148\u7EA7\u8BF4\u660E",priorityDesc:"\u6700\u7EC8\u724C\u7EC4\u4F18\u5148\u7EA7\uFF1A\u6587\u4EF6\u7EA7\u81EA\u5B9A\u4E49\u724C\u7EC4 > \u6587\u4EF6\u5939\u6620\u5C04\u724C\u7EC4 > \u9ED8\u8BA4\u724C\u7EC4\u3002"},scope:{name:"\u63D2\u4EF6\u8FD0\u884C\u8303\u56F4",summary:{all:"\u5904\u7406\u6574\u4E2A vault \u4E2D\u7684 Markdown \u6587\u4EF6",include:"\u4EC5\u5904\u7406\u4E0B\u65B9\u52FE\u9009\u6587\u4EF6\u5939\u4E2D\u7684 Markdown \u6587\u4EF6",exclude:"\u5904\u7406\u6574\u4E2A vault\uFF0C\u4F46\u8DF3\u8FC7\u4E0B\u65B9\u52FE\u9009\u6587\u4EF6\u5939\u4E2D\u7684 Markdown \u6587\u4EF6"},unconfiguredWarning:"\u8FD0\u884C\u8303\u56F4\u5C1A\u672A\u914D\u7F6E\u3002\u5F53\u524D\u662F include \u6A21\u5F0F\uFF0C\u81F3\u5C11\u9009\u62E9\u4E00\u4E2A\u6587\u4EF6\u5939\u540E\u624D\u80FD\u540C\u6B65\u3002",option:{all:"\u5168\u90E8\u6587\u4EF6",include:"\u4EC5\u5728\u6307\u5B9A\u6587\u4EF6\u5939",exclude:"\u6392\u9664\u6307\u5B9A\u6587\u4EF6\u5939"},treeDescription:{include:"\u4EC5\u5728\u6307\u5B9A\u6587\u4EF6\u5939\uFF1A\u53EA\u5904\u7406\u4E0B\u65B9\u52FE\u9009\u6587\u4EF6\u5939\u4E2D\u7684 Markdown \u6587\u4EF6",exclude:"\u6392\u9664\u6307\u5B9A\u6587\u4EF6\u5939\uFF1A\u5904\u7406\u6574\u4E2A vault\uFF0C\u4F46\u8DF3\u8FC7\u4E0B\u65B9\u52FE\u9009\u6587\u4EF6\u5939\u4E2D\u7684 Markdown \u6587\u4EF6"},loading:"\u6B63\u5728\u8BFB\u53D6\u5F53\u524D vault \u6587\u4EF6\u5939...",empty:"\u5F53\u524D vault \u4E2D\u6CA1\u6709\u53EF\u9009\u6587\u4EF6\u5939\u3002",failedLoad:"\u8BFB\u53D6\u5F53\u524D vault \u6587\u4EF6\u5939\u5931\u8D25\u3002",expandFolder:"\u5C55\u5F00 {{name}}",collapseFolder:"\u6536\u8D77 {{name}}",folderDeckModeOverride:{ariaLabel:"\u5207\u6362 {{name}} \u7684\u6587\u4EF6\u5939\u724C\u7EC4\u6620\u5C04\u6A21\u5F0F",hint:{folder:"\u672C\u6587\u4EF6\u5939\u5355\u72EC\u91C7\u7528\u300C\u6587\u4EF6\u5939\u300D\u4F5C\u4E3A\u724C\u7EC4\u540D",folderAndFile:"\u672C\u6587\u4EF6\u5939\u5355\u72EC\u91C7\u7528\u300C\u6587\u4EF6\u5939\u53CA\u6587\u4EF6\u540D\u300D\u4F5C\u4E3A\u724C\u7EC4\u540D"},title:{folder:"\u5F53\u524D\u5168\u5C40\u4E3A\u300C\u6587\u4EF6\u5939\u53CA\u6587\u4EF6\u540D\u300D\uFF0C\u52FE\u9009\u540E\u6B64\u6587\u4EF6\u5939\u6539\u7528\u300C\u6587\u4EF6\u5939\u300D\u4F5C\u4E3A\u724C\u7EC4\u540D",folderAndFile:"\u5F53\u524D\u5168\u5C40\u4E3A\u300C\u6587\u4EF6\u5939\u300D\uFF0C\u52FE\u9009\u540E\u6B64\u6587\u4EF6\u5939\u6539\u7528\u300C\u6587\u4EF6\u5939\u53CA\u6587\u4EF6\u540D\u300D\u4F5C\u4E3A\u724C\u7EC4\u540D"}}},cards:{cardTypes:{title:"\u5361\u7247\u7C7B\u578B\u53CA\u57FA\u7840\u8BBE\u7F6E",desc:"\u76F4\u63A5\u7F16\u8F91\u8BC6\u522B\u89C4\u5219\uFF0C\u4FEE\u6539\u540E\u81EA\u52A8\u4FDD\u5B58\u3002",advancedHint:"\u9AD8\u7EA7\u9879\uFF1A\u5C06 AnkiConnect URL \u4FDD\u7559\u5728\u8FD9\u91CC\uFF0C\u4E0D\u5355\u72EC\u505A\u8FDE\u63A5\u72B6\u6001\u5361\u7247\u3002",markerPlaceholder:"/",fieldsUnavailable:"-- \u8BF7\u5148\u8BFB\u53D6\u5B57\u6BB5 --",autoManagedField:"\u81EA\u52A8\u5199\u5165",autoComposedAnswer:"\u81EA\u52A8\u62FC\u63A5",qaGroupManagedNoteType:"{{modelName}}\uFF08\u7528\u4E8E\u591A\u7EA7\u5217\u8868\u95EE\u7B54\uFF09",statusLabel:"\u72B6\u6001\uFF1A",cacheEmpty:"\u5F53\u524D\u6CA1\u6709\u5DF2\u7F13\u5B58\u7684 Anki \u7B14\u8BB0\u6A21\u677F\u3002\u8BF7\u624B\u52A8\u8BFB\u53D6 Anki \u91CC\u7684\u6A21\u677F\u914D\u7F6E\u3002",cacheSummary:"\u5F53\u524D\u4F7F\u7528\u7F13\u5B58\u7684 {{noteTypeCount}} \u4E2A\u7B14\u8BB0\u6A21\u677F\uFF0C\u5DF2\u9009\u62E9\u5E76\u914D\u7F6E {{configuredCount}} \u4E2A\u5361\u7247\u6A21\u5F0F\u3002",cacheChanged:"\u68C0\u6D4B\u5230 Anki \u5F53\u524D\u6709 {{liveCount}} \u4E2A\u7B14\u8BB0\u6A21\u677F\uFF0C\u548C\u672C\u9875\u7F13\u5B58\u7684 {{cachedCount}} \u4E2A\u6A21\u677F\u4E0D\u4E00\u81F4\u3002\u5F53\u524D\u4ECD\u5728\u4F7F\u7528\u7F13\u5B58\uFF0C\u5DF2\u9009\u62E9\u5E76\u914D\u7F6E {{configuredCount}} \u4E2A\u5361\u7247\u6A21\u5F0F\uFF1B\u5982\u9700\u66F4\u65B0\u8BF7\u624B\u52A8\u8BFB\u53D6 Anki \u91CC\u7684\u6A21\u677F\u914D\u7F6E\u3002",cacheCheckFailed:"\u5F53\u524D\u7EE7\u7EED\u4F7F\u7528\u7F13\u5B58\u7684 {{noteTypeCount}} \u4E2A\u7B14\u8BB0\u6A21\u677F\uFF0C\u5DF2\u9009\u62E9\u5E76\u914D\u7F6E {{configuredCount}} \u4E2A\u5361\u7247\u6A21\u5F0F\uFF1B\u540E\u53F0\u68C0\u67E5\u6700\u65B0\u6A21\u677F\u5217\u8868\u5931\u8D25\uFF0C\u5982\u9700\u66F4\u65B0\u8BF7\u624B\u52A8\u8BFB\u53D6 Anki \u91CC\u7684\u6A21\u677F\u914D\u7F6E\u3002",loadedSummary:"\u5DF2\u83B7\u53D6 {{noteTypeCount}} \u4E2A\u7B14\u8BB0\u6A21\u677F\uFF0C\u5DF2\u9009\u62E9\u5E76\u914D\u7F6E {{configuredCount}} \u4E2A\u5361\u7247\u6A21\u5F0F\u3002",loadedFieldsStatus:"\u5DF2\u5237\u65B0 {{count}} \u4E2A\u5F53\u524D\u6240\u9009\u6A21\u677F\u7684\u5B57\u6BB5\u3002",failedLoad:"\u4ECE Anki \u8BFB\u53D6\u6A21\u677F\u6216\u5B57\u6BB5\u5931\u8D25\u3002",failedSave:"\u4FDD\u5B58\u5361\u7247\u7C7B\u578B\u8BBE\u7F6E\u5931\u8D25\u3002",loadAnki:{button:"\u624B\u52A8\u8BFB\u53D6 Anki \u91CC\u7684\u6A21\u677F\u914D\u7F6E",loading:"\u6B63\u5728\u8BFB\u53D6 Anki \u6A21\u677F\u548C\u5B57\u6BB5..."},columns:{enabled:"\u542F\u7528",type:"\u5361\u7247\u7C7B\u578B",headingLevel:"\u5361\u7247\u6807\u8BB0",extraMarker:"\u989D\u5916\u6807\u8BB0",noteType:"Anki \u7B14\u8BB0\u6A21\u677F",questionField:"\u95EE\u9898\u5B57\u6BB5",answerField:"\u7B54\u6848\u5B57\u6BB5"},labels:{headingLevel:"\u5361\u7247\u6807\u8BB0\uFF1A",extraMarker:"\u989D\u5916\u6807\u8BB0\uFF1A",noteType:"Anki \u7B14\u8BB0\u6A21\u677F\uFF1A",questionField:"\u95EE\u9898\u5B57\u6BB5\uFF1A",answerField:"\u7B54\u6848\u5B57\u6BB5\uFF1A",mainField:"\u4E3B\u5B57\u6BB5\uFF1A",fields:"\u5B57\u6BB5\uFF1A",qaGroupTitleField:"\u9898\u76EE\u5B57\u6BB5\uFF1A",qaGroupFirstQuestionField:"\u9996\u4E2A\u95EE\u9898\u5B57\u6BB5\uFF1A",qaGroupFirstAnswerField:"\u9996\u4E2A\u7B54\u6848\u5B57\u6BB5\uFF1A",qaGroupConfiguredSlots:"\u5DF2\u914D\u7F6E\u7EC4\u6570\uFF1A",qaGroupSlotFields:"\u95EE\u9898/\u7B54\u6848\u5B57\u6BB5\uFF1A",qaGroupWarnings:"\u8B66\u544A\uFF1A"},qaGroup:{noModel:"\u8BF7\u5148\u9009\u62E9 Anki \u7B14\u8BB0\u6A21\u677F",unavailable:"\u8BF7\u5148\u624B\u52A8\u8BFB\u53D6\u5B57\u6BB5",detectedSlots:"\u5DF2\u914D\u7F6E{{count}}\u7EC4",configuredSlots:"\u5DF2\u914D\u7F6E{{count}}\u7EC4",configuredSlotExample:"\u9996\u7EC4 {{firstQuestionField}} / {{firstAnswerField}}\uFF0C\u672B\u7EC4 {{lastQuestionField}} / {{lastAnswerField}}",acceptWarnings:"\u6211\u5DF2\u786E\u8BA4\u5FFD\u7565\u5F53\u524D\u8B66\u544A\uFF0C\u5E76\u5141\u8BB8\u540C\u6B65",warning:{missingAnswer:"\u7B2C {{index}} \u7EC4\u7F3A\u5C11\u7B54\u6848\u5B57\u6BB5\uFF0C\u5DF2\u5FFD\u7565 {{questionField}} / {{answerField}}\u3002",missingQuestion:"\u7B2C {{index}} \u7EC4\u7F3A\u5C11\u95EE\u9898\u5B57\u6BB5\uFF0C\u5DF2\u5FFD\u7565 {{questionField}} / {{answerField}}\u3002"}},sharedClozeMappingHint:"\u590D\u7528\u201C\u586B\u7A7A\u9898\uFF08\u9010\u4E2A\u6316\u7A7A\uFF09\u201D\u5F53\u524D\u9009\u62E9\u7684 Anki \u7B14\u8BB0\u6A21\u677F\u548C\u4E3B\u5B57\u6BB5\uFF0C\u65E0\u9700\u5355\u72EC\u8BBE\u7F6E\u3002",rows:{basic:"\u95EE\u7B54\u9898\uFF08\u5E38\u89C4\u6BB5\u843D\u5F62\u5F0F\uFF09",qaGroup:"\u95EE\u7B54\u9898\uFF08\u591A\u7EA7\u5217\u8868\u5F62\u5F0F\uFF09",cloze:"\u586B\u7A7A\u9898\uFF08\u9010\u4E2A\u6316\u7A7A\uFF09",clozeAll:"\u586B\u7A7A\u9898\uFF08\u5168\u90E8\u6316\u7A7A\uFF09"}},syncContent:{title:"\u5361\u7247\u6B63\u6587\u540C\u6B65\u5185\u5BB9",desc:"\u8FD9\u4E9B\u9009\u9879\u53EA\u5F71\u54CD\u5361\u7247\u6E32\u67D3\u5185\u5BB9\uFF0C\u4FEE\u6539\u540E\u4EC5\u5237\u65B0\u8FD9\u4E00\u5F20\u5361\u7247\u3002",sections:{bodyRange:"1. \u786E\u5B9A\u300C\u5361\u7247\u6B63\u6587\u300D\u8303\u56F4",backlink:"2. \u786E\u5B9A\u662F\u5426\u589E\u52A0\u56DE\u94FE\uFF0C\u65B9\u4FBF\u4ECE Anki\u300C\u5361\u7247\u7EA7\u8DF3\u8F6C\u300D\u56DE Obsidian",tags:"3. \u786E\u5B9A\u662F\u5426\u8BFB\u53D6\u300C\u6807\u7B7E\u300D",clozeSpecial:"4. \u300C\u586B\u7A7A\u9898\u300D\u4E13\u9879"}},scope:{title:"\u63D2\u4EF6\u8FD0\u884C\u8303\u56F4",desc:"\u4FDD\u7559\u73B0\u6709\u4F5C\u7528\u8303\u56F4\u548C\u6587\u4EF6\u5939\u6811\u903B\u8F91\uFF1B\u6587\u4EF6\u5939\u6811\u6309\u9700\u52A0\u8F7D\uFF0C\u5E76\u652F\u6301\u5C40\u90E8\u5237\u65B0\u3002",refreshFolders:"\u5237\u65B0\u6587\u4EF6\u5939\u5217\u8868"},deck:{title:"\u5361\u7247\u724C\u7EC4\u8BBE\u7F6E",desc:"\u5361\u7247\u724C\u7EC4\u8BBE\u7F6E\u6309\u63A8\u8350\u8DEF\u5F84\u5206\u7EC4\u5C55\u793A\u3002",sections:{folderMapping:"1\uFF0C\u63A8\u8350\u7528\u300C\u6587\u4EF6\u5939\u53CA\u6587\u4EF6\u540D\u300D\u4F5C\u4E3A\u300CAnki\u724C\u7EC4\u300D",fileDeck:"2\uFF0C\u53EF\u6253\u5F00\u300C\u6587\u4EF6\u7EA7\u81EA\u5B9A\u4E49\u724C\u7EC4\u300D\uFF0C\u4F5C\u4E3A\u4E2A\u6027\u5316\u5B9A\u5236",defaultDeck:"3\uFF0C\u9ED8\u8BA4\u724C\u7EC4\u4F5C\u4E3A\u515C\u5E95"}},commands:{title:"\u547D\u4EE4\u8BF4\u660E",desc:"\u4E0B\u9762\u5C55\u793A\u5F53\u524D\u547D\u4EE4\u9762\u677F\u4E2D\u53EF\u7528\u7684\u63D2\u4EF6\u547D\u4EE4\u3002",items:{syncCurrentFile:"\u53EA\u628A\u5F53\u524D\u6D3B\u52A8 Markdown \u6587\u4EF6\u540C\u6B65\u5230 Anki\u3002",syncVault:"\u628A\u5168\u5E93\u4E2D\u6240\u6709\u5904\u4E8E\u4F5C\u7528\u8303\u56F4\u5185\u7684 Markdown \u6587\u4EF6\u540C\u6B65\u5230 Anki\u3002",clearCurrentFile:"\u6E05\u7A7A\u5F53\u524D\u6587\u4EF6\u7684\u5DF2\u540C\u6B65\u6807\u8BB0\u548C\u672C\u5730\u8DDF\u8E2A\u72B6\u6001\u3002",cleanupDecks:"\u4ECE Anki \u5220\u9664\u6240\u9009\u7A7A\u724C\u7EC4\u3002"}}}},modal:{emptyDeck:{title:"\u6E05\u7406\u7A7A\u724C\u7EC4",description:"\u52FE\u9009\u8981\u5220\u9664\u7684\u7A7A\u724C\u7EC4\u3002\u53EA\u6709\u5220\u9664\u65F6\u4ECD\u4E3A\u7A7A\u7684\u724C\u7EC4\u4F1A\u88AB\u771F\u6B63\u5220\u9664\u3002",selectAll:"\u5168\u9009\u5168\u90E8",clearAll:"\u5168\u90E8\u4E0D\u9009",invert:"\u53CD\u9009",cancel:"\u53D6\u6D88",deleteSelected:"\u5220\u9664\u6240\u9009\u7A7A\u724C\u7EC4",selectionCount:"\u5DF2\u9009 {{selected}} / \u5171 {{total}} \u4E2A\u7A7A\u724C\u7EC4"}},notice:{invalidSettingsRestored:"\u68C0\u6D4B\u5230\u65E0\u6548\u7684\u63D2\u4EF6\u8BBE\u7F6E\uFF0C\u5DF2\u5728\u5185\u5B58\u4E2D\u6062\u590D\u9ED8\u8BA4\u8BBE\u7F6E\u3002",failedSavePluginSettings:"\u4FDD\u5B58\u63D2\u4EF6\u8BBE\u7F6E\u5931\u8D25\u3002",noActiveMarkdownForSync:"\u5F53\u524D\u6CA1\u6709\u53EF\u7528\u4E8E\u540C\u6B65\u7684\u6D3B\u52A8 Markdown \u6587\u4EF6\u3002",syncUseCaseNotInitialized:"\u540C\u6B65\u7528\u4F8B\u5C1A\u672A\u521D\u59CB\u5316\u3002",currentFileSyncFailed:"\u5F53\u524D\u6587\u4EF6\u540C\u6B65\u5931\u8D25\u3002",vaultSyncFailed:"\u5168\u5E93\u540C\u6B65\u5931\u8D25\u3002",noActiveMarkdownForDeckTemplateInsertion:"\u5F53\u524D\u6CA1\u6709\u53EF\u7528\u4E8E\u63D2\u5165\u724C\u7EC4\u6A21\u677F\u7684\u6D3B\u52A8 Markdown \u6587\u4EF6\u3002",vaultGatewayNotInitialized:"Vault \u7F51\u5173\u5C1A\u672A\u521D\u59CB\u5316\u3002",markdownFileNotFound:"\u672A\u627E\u5230 Markdown \u6587\u4EF6\uFF1A{{filePath}}",deckTemplateAlreadyCurrent:"\u5F53\u524D\u6587\u4EF6\u4E2D\u7684\u724C\u7EC4\u6A21\u677F\u5DF2\u662F\u6700\u65B0\uFF0C\u65E0\u9700\u91CD\u590D\u5199\u5165\u3002",deckTemplateInserted:"\u5DF2\u5411\u5F53\u524D\u6587\u4EF6\u5199\u5165\u724C\u7EC4\u6A21\u677F\uFF1A{{deck}}",deckTemplateInsertionFailed:"\u63D2\u5165\u724C\u7EC4\u6A21\u677F\u5931\u8D25\u3002",noActiveMarkdownForReset:"\u5F53\u524D\u6CA1\u6709\u53EF\u7528\u4E8E\u91CD\u7F6E\u7684\u6D3B\u52A8 Markdown \u6587\u4EF6\u3002",clearCurrentFileUseCaseNotInitialized:"\u6E05\u7A7A\u5F53\u524D\u6587\u4EF6\u7528\u4F8B\u5C1A\u672A\u521D\u59CB\u5316\u3002",noTrackedCardsInCurrentFile:"\u5F53\u524D\u6587\u4EF6\u6CA1\u6709\u5DF2\u540C\u6B65\u5361\u7247\u3002",clearCurrentFileFailed:"\u6E05\u7A7A\u5F53\u524D\u6587\u4EF6\u5DF2\u540C\u6B65\u5361\u7247\u5931\u8D25\u3002",cleanupEmptyDecksUseCaseNotInitialized:"\u7A7A\u724C\u7EC4\u6E05\u7406\u7528\u4F8B\u5C1A\u672A\u521D\u59CB\u5316\u3002",noEmptyDeckCandidates:"\u672A\u53D1\u73B0\u53EF\u6E05\u7406\u7684\u7A7A\u724C\u7EC4\u3002",cleanupEmptyDecksCancelled:"\u5DF2\u53D6\u6D88\u7A7A\u724C\u7EC4\u6E05\u7406\u3002",cleanupEmptyDecksFailed:"\u6E05\u7406\u7A7A\u724C\u7EC4\u5931\u8D25\u3002",summary:{currentFileSync:"\u5F53\u524D\u6587\u4EF6\u540C\u6B65\u5B8C\u6210\uFF1A\u6587\u4EF6 {{scannedFiles}}\uFF0C\u5361\u7247 {{scannedCards}}\uFF0C\u65B0\u5EFA {{created}}\uFF0C\u91CD\u5EFA {{rebuilt}}\uFF0C\u66F4\u65B0 {{updated}}\uFF0C\u8FC1\u79FB\u6A21\u677F {{migratedNoteTypes}}\uFF0C\u8FC1\u79FB\u724C\u7EC4 {{migratedDecks}}\uFF0C\u5B64\u513F {{orphaned}}\uFF0C\u5A92\u4F53 {{uploadedMedia}}\uFF0C\u8DF3\u8FC7 {{skippedUnchangedCards}}\u3002",vaultSync:"\u5168\u5E93\u540C\u6B65\u5B8C\u6210\uFF1A\u6587\u4EF6 {{scannedFiles}}\uFF0C\u5361\u7247 {{scannedCards}}\uFF0C\u65B0\u5EFA {{created}}\uFF0C\u91CD\u5EFA {{rebuilt}}\uFF0C\u66F4\u65B0 {{updated}}\uFF0C\u8FC1\u79FB\u6A21\u677F {{migratedNoteTypes}}\uFF0C\u8FC1\u79FB\u724C\u7EC4 {{migratedDecks}}\uFF0C\u5B64\u513F {{orphaned}}\uFF0C\u5A92\u4F53 {{uploadedMedia}}\uFF0C\u8DF3\u8FC7 {{skippedUnchangedCards}}\u3002",clearCurrentFile:"\u5F53\u524D\u6587\u4EF6\u5DF2\u540C\u6B65\u5361\u7247\u6E05\u7A7A\u5B8C\u6210\uFF1A\u5DF2\u8DDF\u8E2A\u5361\u7247 {{trackedCards}}\uFF0C\u5DF2\u8DDF\u8E2A\u5206\u7EC4 {{trackedGroups}}\uFF0C\u5220\u9664\u7B14\u8BB0 {{deletedNotes}}\uFF0C\u79FB\u9664\u6807\u8BB0 {{removedMarkers}}\uFF0C\u79FB\u9664 ID \u6807\u8BB0 {{removedCardMarkers}}\uFF0C\u79FB\u9664 GI \u6807\u8BB0 {{removedGroupMarkers}}\uFF0C\u5220\u9664\u672C\u5730\u8BB0\u5F55 {{deletedLocalRecords}}\u3002",cleanupEmptyDecks:"\u7A7A\u724C\u7EC4\u6E05\u7406\u5B8C\u6210\uFF1A\u5019\u9009 {{candidateCount}}\uFF0C\u5DF2\u9009 {{selectedCount}}\uFF0C\u5DF2\u5220 {{deletedCount}}\uFF0C\u8DF3\u8FC7 {{skippedCount}}\u3002",markerWriteConflicts:"\u6807\u8BB0\u5199\u56DE\u51B2\u7A81\uFF1A{{files}}\u3002",warningsCount:"\u8B66\u544A\uFF1A{{count}}\u3002",markerRemovalConflicts:"\u6807\u8BB0\u79FB\u9664\u51B2\u7A81\uFF1A{{files}}\u3002",failures:"\u5931\u8D25\u9879\uFF1A{{items}}\u3002",skippedDecks:"\u8DF3\u8FC7\u7684\u724C\u7EC4\uFF1A{{decks}}\u3002"}},errors:{runScopeNotConfigured:"\u8FD0\u884C\u8303\u56F4\u5C1A\u672A\u914D\u7F6E\u3002\u5F53\u524D\u662F include \u6A21\u5F0F\uFF0C\u8BF7\u81F3\u5C11\u9009\u62E9\u4E00\u4E2A\u6587\u4EF6\u5939\u540E\u518D\u540C\u6B65\u3002",currentFileOutOfScope:"\u5F53\u524D\u6587\u4EF6\u4E0D\u5728\u63D2\u4EF6\u4F5C\u7528\u8303\u56F4\u5185\uFF1A{{filePath}}",deck:{emptyName:"\u724C\u7EC4\u4E0D\u80FD\u4E3A\u7A7A\uFF0C\u8BF7\u68C0\u67E5\u6587\u4EF6\u7EA7\u724C\u7EC4\u58F0\u660E\u6216\u9ED8\u8BA4\u724C\u7EC4\u8BBE\u7F6E\u3002"},settings:{headingLevelsRange:"\u6807\u9898\u5C42\u7EA7\u5FC5\u987B\u662F 1 \u5230 6 \u4E4B\u95F4\u7684\u6574\u6570\u3002",headingLevelsDifferent:"QA \u548C\u586B\u7A7A\u9898\u7684\u6807\u9898\u5C42\u7EA7\u5FC5\u987B\u4E0D\u540C\u3002",cardTypeConfigsObject:"\u5361\u7247\u7C7B\u578B\u914D\u7F6E\u5FC5\u987B\u662F\u5BF9\u8C61\u3002",cardTypeEnabledBoolean:"\u6BCF\u79CD\u5361\u7247\u7C7B\u578B\u7684\u542F\u7528\u72B6\u6001\u5FC5\u987B\u662F\u5E03\u5C14\u503C\u3002",cardTypeExtraMarkerString:"\u6BCF\u79CD\u5361\u7247\u7C7B\u578B\u7684\u989D\u5916\u6807\u8BB0\u5FC5\u987B\u662F\u5B57\u7B26\u4E32\u3002",cardTypeDefaultConflict:"\u540C\u4E00\u4E2A H{{headingLevel}} \u53EA\u80FD\u6709\u4E00\u4E2A\u542F\u7528\u7684\u9ED8\u8BA4\u5361\u7247\u7C7B\u578B\u3002",cardAnswerCutoffModeInvalid:"\u5361\u7247\u6B63\u6587\u622A\u6B62\u6A21\u5F0F\u53EA\u80FD\u662F heading-block \u6216 double-blank-lines\u3002",qaNoteTypeRequired:"QA \u7B14\u8BB0\u7C7B\u578B\u4E0D\u80FD\u4E3A\u7A7A\u3002",qaGroupMarkerRequired:"QA Group \u6807\u8BB0\u4E0D\u80FD\u4E3A\u7A7A\u3002",qaGroupMarkerInvalid:"QA Group \u6807\u8BB0\u5FC5\u987B\u662F\u7C7B\u4F3C #anki-list \u7684 hashtag \u6837\u5F0F token\u3002",clozeNoteTypeRequired:"\u586B\u7A7A\u9898\u7B14\u8BB0\u7C7B\u578B\u4E0D\u80FD\u4E3A\u7A7A\u3002",defaultDeckRequired:"\u9ED8\u8BA4\u724C\u7EC4\u4E0D\u80FD\u4E3A\u7A7A\u3002",fileDeckEnabledBoolean:"\u6587\u4EF6\u7EA7\u724C\u7EC4\u5F00\u5173\u5FC5\u987B\u662F\u5E03\u5C14\u503C\u3002",syncObsidianTagsToAnkiBoolean:"\u540C\u6B65 Obsidian \u6807\u7B7E\u5230 Anki \u5F00\u5173\u5FC5\u987B\u662F\u5E03\u5C14\u503C\u3002",keepPureTagLinesInCardBodyBoolean:"\u4FDD\u7559\u6B63\u6587\u7EAF\u6807\u7B7E\u884C\u5F00\u5173\u5FC5\u987B\u662F\u5E03\u5C14\u503C\u3002",fileDeckMarkerString:"\u6587\u4EF6\u7EA7\u724C\u7EC4\u8BC6\u522B\u540D\u5FC5\u987B\u662F\u5B57\u7B26\u4E32\u3002",fileDeckTemplateString:"\u6587\u4EF6\u7EA7\u724C\u7EC4\u6A21\u677F\u5FC5\u987B\u662F\u5B57\u7B26\u4E32\u3002",fileDeckInsertLocationInvalid:"\u6587\u4EF6\u7EA7\u724C\u7EC4\u6A21\u677F\u63D2\u5165\u4F4D\u7F6E\u53EA\u80FD\u662F yaml \u6216 body\u3002",folderDeckModeInvalid:"\u6587\u4EF6\u5939\u724C\u7EC4\u6A21\u5F0F\u53EA\u80FD\u662F off\u3001folder \u6216 folder-and-file\u3002",scopeModeInvalid:"\u8FD0\u884C\u8303\u56F4\u6A21\u5F0F\u53EA\u80FD\u662F all\u3001include \u6216 exclude\u3002",obsidianBacklinkPlacementInvalid:"Obsidian \u56DE\u94FE\u653E\u7F6E\u4F4D\u7F6E\u53EA\u80FD\u662F question-last-line\u3001answer-first-line \u6216 answer-last-line\u3002",includeFoldersArray:"\u5305\u542B\u6587\u4EF6\u5939\u5FC5\u987B\u662F\u6570\u7EC4\u3002",includeFoldersStrings:"\u5305\u542B\u6587\u4EF6\u5939\u5217\u8868\u4E2D\u53EA\u80FD\u5305\u542B\u5B57\u7B26\u4E32\u3002",excludeFoldersArray:"\u6392\u9664\u6587\u4EF6\u5939\u5FC5\u987B\u662F\u6570\u7EC4\u3002",excludeFoldersStrings:"\u6392\u9664\u6587\u4EF6\u5939\u5217\u8868\u4E2D\u53EA\u80FD\u5305\u542B\u5B57\u7B26\u4E32\u3002",alternateFolderDeckModeFoldersArray:"\u6587\u4EF6\u5939\u724C\u7EC4\u6A21\u5F0F\u8986\u76D6\u5217\u8868\u5FC5\u987B\u662F\u6570\u7EC4\u3002",alternateFolderDeckModeFoldersStrings:"\u6587\u4EF6\u5939\u724C\u7EC4\u6A21\u5F0F\u8986\u76D6\u5217\u8868\u4E2D\u53EA\u80FD\u5305\u542B\u5B57\u7B26\u4E32\u3002",ankiConnectUrlRequired:"AnkiConnect URL \u4E0D\u80FD\u4E3A\u7A7A\u3002",ankiNoteTypeCacheArray:"Anki \u7B14\u8BB0\u6A21\u677F\u7F13\u5B58\u5FC5\u987B\u662F\u6570\u7EC4\u3002",ankiNoteTypeCacheStrings:"Anki \u7B14\u8BB0\u6A21\u677F\u7F13\u5B58\u4E2D\u53EA\u80FD\u5305\u542B\u5B57\u7B26\u4E32\u3002",ankiModelFieldCacheObject:"Anki \u6A21\u677F\u5B57\u6BB5\u7F13\u5B58\u5FC5\u987B\u662F\u5BF9\u8C61\u3002",ankiModelFieldCacheEntryObject:"\u6BCF\u4E2A Anki \u6A21\u677F\u5B57\u6BB5\u7F13\u5B58\u9879\u90FD\u5FC5\u987B\u662F\u5BF9\u8C61\u3002",ankiModelFieldCacheFieldNamesArray:"Anki \u6A21\u677F\u5B57\u6BB5\u7F13\u5B58\u4E2D\u7684 fieldNames \u5FC5\u987B\u662F\u6570\u7EC4\u3002",ankiModelFieldCacheFieldNamesStrings:"Anki \u6A21\u677F\u5B57\u6BB5\u7F13\u5B58\u4E2D\u7684 fieldNames \u53EA\u80FD\u5305\u542B\u5B57\u7B26\u4E32\u3002",ankiModelFieldCacheLoadedAt:"Anki \u6A21\u677F\u5B57\u6BB5\u7F13\u5B58\u4E2D\u7684 loadedAt \u5FC5\u987B\u662F\u6709\u9650\u6570\u5B57\u3002",noteFieldMappingsObject:"\u5B57\u6BB5\u6620\u5C04\u5FC5\u987B\u662F\u5BF9\u8C61\u3002",noteFieldMappingsCardType:"\u5B57\u6BB5\u6620\u5C04\u5FC5\u987B\u4F7F\u7528\u53D7\u652F\u6301\u7684\u5361\u7247\u7C7B\u578B\u3002",noteFieldMappingsModelName:"\u5B57\u6BB5\u6620\u5C04\u5FC5\u987B\u5305\u542B\u6A21\u578B\u540D\u79F0\u3002",noteFieldMappingsLoadedFieldNames:"\u5B57\u6BB5\u6620\u5C04\u5FC5\u987B\u5305\u542B\u5DF2\u52A0\u8F7D\u5B57\u6BB5\u540D\u3002",noteFieldMappingsLoadedAt:"\u5B57\u6BB5\u6620\u5C04\u5FC5\u987B\u5305\u542B\u5DF2\u52A0\u8F7D\u65F6\u95F4\u6233\u3002",noteFieldMappingsQaGroupSlotsArray:"QA Group \u5B57\u6BB5\u6620\u5C04\u4E2D\u7684 slots \u5FC5\u987B\u662F\u6570\u7EC4\u3002",noteFieldMappingsQaGroupSlotObject:"QA Group \u5B57\u6BB5\u6620\u5C04\u4E2D\u7684\u6BCF\u4E2A slot \u90FD\u5FC5\u987B\u662F\u5BF9\u8C61\u3002",noteFieldMappingsQaGroupSlotIndex:"QA Group \u5B57\u6BB5\u6620\u5C04\u4E2D\u7684 slot.index \u5FC5\u987B\u662F\u5927\u4E8E 0 \u7684\u6574\u6570\u3002",noteFieldMappingsQaGroupSlotQuestionField:"QA Group \u5B57\u6BB5\u6620\u5C04\u4E2D\u7684 slot.questionField \u5FC5\u987B\u662F\u5B57\u7B26\u4E32\u3002",noteFieldMappingsQaGroupSlotAnswerField:"QA Group \u5B57\u6BB5\u6620\u5C04\u4E2D\u7684 slot.answerField \u5FC5\u987B\u662F\u5B57\u7B26\u4E32\u3002",noteFieldMappingsQaGroupWarningsArray:"QA Group \u5B57\u6BB5\u6620\u5C04\u4E2D\u7684 warnings \u5FC5\u987B\u662F\u6570\u7EC4\u3002",noteFieldMappingsQaGroupWarningsStrings:"QA Group \u5B57\u6BB5\u6620\u5C04\u4E2D\u7684 warnings \u53EA\u80FD\u5305\u542B\u5B57\u7B26\u4E32\u3002",noteFieldMappingsQaGroupAcceptedWarningsArray:"QA Group \u5B57\u6BB5\u6620\u5C04\u4E2D\u7684 acceptedWarnings \u5FC5\u987B\u662F\u6570\u7EC4\u3002",noteFieldMappingsQaGroupAcceptedWarningsStrings:"QA Group \u5B57\u6BB5\u6620\u5C04\u4E2D\u7684 acceptedWarnings \u53EA\u80FD\u5305\u542B\u5B57\u7B26\u4E32\u3002",noteFieldMappingsQaGroupDerivationObject:"QA Group \u5B57\u6BB5\u6620\u5C04\u4E2D\u7684 derivation \u5FC5\u987B\u662F\u5BF9\u8C61\u3002",noteFieldMappingsQaGroupDerivationMode:"QA Group \u5B57\u6BB5\u6620\u5C04\u4E2D\u7684 derivation.mode \u53EA\u80FD\u662F first-pair\u3002",noteFieldMappingsQaGroupDerivationFirstQuestionField:"QA Group \u5B57\u6BB5\u6620\u5C04\u4E2D\u7684 derivation.firstQuestionField \u5FC5\u987B\u662F\u5B57\u7B26\u4E32\u3002",noteFieldMappingsQaGroupDerivationFirstAnswerField:"QA Group \u5B57\u6BB5\u6620\u5C04\u4E2D\u7684 derivation.firstAnswerField \u5FC5\u987B\u662F\u5B57\u7B26\u4E32\u3002"},noteFieldMapping:{noteTypeNotSelected:{basic:"\u57FA\u7840\u5361\u5C1A\u672A\u9009\u62E9 Anki \u7B14\u8BB0\u6A21\u677F\u3002\u8BF7\u5148\u5728\u8BBE\u7F6E\u9875\u9009\u62E9\u6A21\u677F\u540E\u518D\u540C\u6B65\u3002",cloze:"\u586B\u7A7A\u9898\u5C1A\u672A\u9009\u62E9 Anki \u7B14\u8BB0\u6A21\u677F\u3002\u8BF7\u5148\u5728\u8BBE\u7F6E\u9875\u9009\u62E9\u6A21\u677F\u540E\u518D\u540C\u6B65\u3002",qaGroup:"\u95EE\u7B54\u9898\uFF08\u591A\u7EA7\u5217\u8868\uFF09\u5C1A\u672A\u9009\u62E9 Anki \u7B14\u8BB0\u6A21\u677F\u3002\u8BF7\u5148\u5728\u8BBE\u7F6E\u9875\u9009\u62E9\u6A21\u677F\u540E\u518D\u540C\u6B65\u3002"},missingSavedMapping:{basic:'\u627E\u4E0D\u5230\u57FA\u7840\u5361\u7B14\u8BB0\u7C7B\u578B "{{modelName}}" \u7684\u5DF2\u4FDD\u5B58\u5B57\u6BB5\u6620\u5C04\u3002\u8BF7\u6253\u5F00\u63D2\u4EF6\u8BBE\u7F6E\u5E76\u5148\u4ECE Anki \u8BFB\u53D6\u5B57\u6BB5\u3002',cloze:'\u627E\u4E0D\u5230\u586B\u7A7A\u9898\u7B14\u8BB0\u7C7B\u578B "{{modelName}}" \u7684\u5DF2\u4FDD\u5B58\u5B57\u6BB5\u6620\u5C04\u3002\u8BF7\u6253\u5F00\u63D2\u4EF6\u8BBE\u7F6E\u5E76\u5148\u4ECE Anki \u8BFB\u53D6\u5B57\u6BB5\u3002',qaGroup:'\u627E\u4E0D\u5230\u95EE\u7B54\u9898\uFF08\u591A\u7EA7\u5217\u8868\uFF09\u7B14\u8BB0\u6A21\u677F "{{modelName}}" \u7684\u5DF2\u4FDD\u5B58\u5B57\u6BB5\u6620\u5C04\u3002\u8BF7\u5148\u5728\u8BBE\u7F6E\u9875\u4ECE Anki \u8BFB\u53D6\u5B57\u6BB5\u5E76\u4FDD\u5B58\u6620\u5C04\u3002'},incompleteSavedMapping:{basic:'\u57FA\u7840\u5361\u7B14\u8BB0\u7C7B\u578B "{{modelName}}" \u7684\u5DF2\u4FDD\u5B58\u5B57\u6BB5\u6620\u5C04\u4E0D\u5B8C\u6574\u3002\u8BF7\u6253\u5F00\u63D2\u4EF6\u8BBE\u7F6E\u5E76\u4FDD\u5B58\u6807\u9898\u5B57\u6BB5\u548C\u6B63\u6587\u5B57\u6BB5\u3002',cloze:'\u586B\u7A7A\u9898\u7B14\u8BB0\u7C7B\u578B "{{modelName}}" \u7684\u5DF2\u4FDD\u5B58\u5B57\u6BB5\u6620\u5C04\u4E0D\u5B8C\u6574\u3002\u8BF7\u6253\u5F00\u63D2\u4EF6\u8BBE\u7F6E\u5E76\u4FDD\u5B58\u4E3B\u5B57\u6BB5\u3002'},titleBodyMustDiffer:{basic:'\u57FA\u7840\u5361\u7B14\u8BB0\u7C7B\u578B "{{modelName}}" \u7684\u6807\u9898\u5B57\u6BB5\u548C\u6B63\u6587\u5B57\u6BB5\u5FC5\u987B\u4E0D\u540C\u3002'},stale:'\u7B14\u8BB0\u7C7B\u578B "{{modelName}}" \u7684\u5DF2\u4FDD\u5B58\u5B57\u6BB5\u6620\u5C04\u5DF2\u8FC7\u671F\uFF0C\u56E0\u4E3A\u8FD9\u4E9B\u5B57\u6BB5\u5728 Anki \u4E2D\u5DF2\u4E0D\u5B58\u5728\uFF1A{{fields}}\u3002\u8BF7\u91CD\u65B0\u4ECE Anki \u8BFB\u53D6\u5B57\u6BB5\u3002',qaGroupMissingTitle:'\u95EE\u7B54\u9898\uFF08\u591A\u7EA7\u5217\u8868\uFF09\u7B14\u8BB0\u6A21\u677F "{{modelName}}" \u7684\u5DF2\u4FDD\u5B58\u5B57\u6BB5\u6620\u5C04\u4E0D\u5B8C\u6574\uFF0C\u7F3A\u5C11\u6807\u9898\u5B57\u6BB5\u3002\u8BF7\u5728\u8BBE\u7F6E\u9875\u91CD\u65B0\u4FDD\u5B58\u5B57\u6BB5\u6620\u5C04\u3002',qaGroupNoCompleteSlots:'\u95EE\u7B54\u9898\uFF08\u591A\u7EA7\u5217\u8868\uFF09\u7B14\u8BB0\u6A21\u677F "{{modelName}}" \u7684\u5DF2\u4FDD\u5B58\u5B57\u6BB5\u6620\u5C04\u4E0D\u5B8C\u6574\uFF0C\u81F3\u5C11\u9700\u8981\u4E00\u7EC4\u95EE\u9898/\u7B54\u6848\u5B57\u6BB5\u3002\u8BF7\u5728\u8BBE\u7F6E\u9875\u91CD\u65B0\u4FDD\u5B58\u5B57\u6BB5\u6620\u5C04\u3002',qaGroupNonContinuousSlots:'\u95EE\u7B54\u9898\uFF08\u591A\u7EA7\u5217\u8868\uFF09\u7B14\u8BB0\u6A21\u677F "{{modelName}}" \u7684\u7B2C\u4E00\u7EC4\u95EE\u9898/\u7B54\u6848\u5B57\u6BB5\u4E0D\u662F\u4ECE\u7B2C {{firstIndex}} \u7EC4\u5F00\u59CB\u8FDE\u7EED\u7F16\u53F7\u3002\u8BF7\u4ECE\u7B2C 1 \u7EC4\u5F00\u59CB\u3002',qaGroupSelectedFieldMissing:'\u95EE\u7B54\u9898\uFF08\u591A\u7EA7\u5217\u8868\uFF09\u7B14\u8BB0\u6A21\u677F "{{modelName}}" \u4E2D\u5DF2\u9009\u62E9\u5B57\u6BB5 "{{field}}"\uFF0C\u4F46\u5B83\u5F53\u524D\u4E0D\u5728 Anki \u5B57\u6BB5\u5217\u8868\u91CC\u3002\u8BF7\u91CD\u65B0\u8BFB\u53D6\u5B57\u6BB5\u540E\u518D\u4FDD\u5B58\u3002',qaGroupDuplicateFields:'\u95EE\u7B54\u9898\uFF08\u591A\u7EA7\u5217\u8868\uFF09\u7B14\u8BB0\u6A21\u677F "{{modelName}}" \u7684\u9898\u76EE\u5B57\u6BB5\u3001\u95EE\u9898\u5B57\u6BB5\u548C\u7B54\u6848\u5B57\u6BB5\u4E0D\u80FD\u91CD\u590D\u3002',qaGroupFirstPairNumberMismatch:'\u95EE\u7B54\u9898\uFF08\u591A\u7EA7\u5217\u8868\uFF09\u7B14\u8BB0\u6A21\u677F "{{modelName}}" \u7684\u9996\u4E2A\u95EE\u9898\u5B57\u6BB5 "{{questionField}}" \u4E0E\u9996\u4E2A\u7B54\u6848\u5B57\u6BB5 "{{answerField}}" \u7F16\u53F7\u4E0D\u4E00\u81F4\u3002\u8BF7\u9009\u62E9\u540C\u4E00\u7EC4\u5B57\u6BB5\u3002',qaGroupFirstPairMustStartAtOne:'\u95EE\u7B54\u9898\uFF08\u591A\u7EA7\u5217\u8868\uFF09\u7B14\u8BB0\u6A21\u677F "{{modelName}}" \u7684\u9996\u7EC4\u5B57\u6BB5\u5FC5\u987B\u4ECE\u7B2C 1 \u7EC4\u5F00\u59CB\uFF0C\u5F53\u524D\u662F\u7B2C {{firstIndex}} \u7EC4\u3002',qaGroupWarningsUnaccepted:'\u95EE\u7B54\u9898\uFF08\u591A\u7EA7\u5217\u8868\uFF09\u7B14\u8BB0\u6A21\u677F "{{modelName}}" \u4ECD\u6709\u672A\u786E\u8BA4\u7684\u5B57\u6BB5\u8B66\u544A\u3002\u8BF7\u5148\u5728\u8BBE\u7F6E\u9875\u786E\u8BA4\u540E\u518D\u540C\u6B65\u3002',qaGroupSlotCapacityExceeded:'\u95EE\u7B54\u9898\uFF08\u591A\u7EA7\u5217\u8868\uFF09\u7B14\u8BB0\u6A21\u677F "{{modelName}}" \u7684\u5DF2\u4FDD\u5B58\u5B57\u6BB5\u6620\u5C04\u53EA\u5305\u542B {{capacity}} \u7EC4\u95EE\u9898/\u7B54\u6848\u5B57\u6BB5\uFF0C\u4F46\u5F53\u524D\u5757\u6709 {{itemCount}} \u9879\uFF1A{{filePath}}:{{blockStartLine}}\u3002'},noteTypeMigration:{failed:"\u65E0\u6CD5\u5C06 Anki \u7B14\u8BB0 {{noteId}} \u4ECE\u201C{{fromModel}}\u201D\u8FC1\u79FB\u5230\u201C{{toModel}}\u201D{{location}}\uFF1A{{reason}}",unsupported:"\u5F53\u524D AnkiConnect \u4E0D\u652F\u6301\u5C06 Anki \u7B14\u8BB0 {{noteId}} \u4ECE\u201C{{fromModel}}\u201D\u8FC1\u79FB\u5230\u201C{{toModel}}\u201D{{location}}\u3002\u8BF7\u5347\u7EA7 AnkiConnect\uFF0C\u6216\u6E05\u7406\u8BE5\u5361\u7247\u7684 Anki ID \u540E\u91CD\u65B0\u540C\u6B65\u3002\u539F\u56E0\uFF1A{{reason}}"},writeBack:{summary:"Markdown \u6807\u8BB0\u5199\u56DE\u5931\u8D25\uFF0C\u5171 {{fileCount}} \u4E2A\u6587\u4EF6\u3002",markdownFileNotFound:"Markdown \u6587\u4EF6\u4E0D\u5B58\u5728\u3002",missingSourceContent:"\u7F3A\u5C11\u7528\u4E8E\u5199\u56DE\u6807\u8BB0\u7684\u626B\u63CF\u6E90\u7801\u5185\u5BB9\u3002",noteIdMissing:"\u65E0\u6CD5\u4E3A\u7B2C {{blockStartLine}} \u884C\u6240\u5728\u5757\u5199\u5165\u6807\u8BB0\uFF0C\u56E0\u4E3A\u7F3A\u5C11 note ID\u3002"},markerRemoval:{markdownFileNotFound:"Markdown \u6587\u4EF6\u4E0D\u5B58\u5728\u3002"}},warnings:{deck:{conflictYamlBody:"\u68C0\u6D4B\u5230 YAML \u548C\u6B63\u6587\u4E2D\u7684 {{marker}} \u58F0\u660E\u4E92\u76F8\u51B2\u7A81\uFF0C\u672C\u6B21\u540C\u6B65\u5DF2\u4F7F\u7528 YAML \u7684\u503C\u3002",multipleBodyDeclarations:"\u68C0\u6D4B\u5230\u6587\u4EF6\u4E2D\u5B58\u5728\u591A\u4E2A {{marker}} \u58F0\u660E\uFF0C\u672C\u6B21\u540C\u6B65\u53EA\u4F7F\u7528\u7B2C\u4E00\u4E2A\u6B63\u6587\u58F0\u660E\u3002",invalidFolderSegment:"\u68C0\u6D4B\u5230\u6587\u4EF6\u5939\u540D\u6216\u6587\u4EF6\u540D\u5305\u542B ::\uFF0C\u5DF2\u8DF3\u8FC7\u6587\u4EF6\u5939\u6620\u5C04\u5E76\u56DE\u9000\u5230\u9ED8\u8BA4\u724C\u7EC4\u3002",fallbackDefault:"\u8BE5\u6587\u4EF6\u6CA1\u6709\u663E\u5F0F\u724C\u7EC4\uFF0C\u4E14\u65E0\u6CD5\u751F\u6210\u6587\u4EF6\u5939\u6620\u5C04\u724C\u7EC4\uFF0C\u5DF2\u56DE\u9000\u5230\u9ED8\u8BA4\u724C\u7EC4\u3002"}}};function ii(e,t){let n=t.split("."),r=e;for(let i of n){if(!r||typeof r!="object"||!(i in r))return;r=r[i]}return typeof r=="string"?r:void 0}function Fo(e,t,n){return t?e.replace(/\{\{\s*([\w.]+)\s*\}\}/g,(r,i)=>{let a=t[i];return a===void 0?"":Array.isArray(a)?de(n,a.filter(o=>o!==void 0).map(o=>String(o))):String(a)}):e}function g(e,t){let n=se(),i=ii(n==="zh"?ri:An,e)??ii(An,e)??e;return Fo(i,t,n)}var S=class extends Error{constructor(t,n,r){super(t),this.name="PluginUserError",this.userMessage={key:t,params:n},this.details=r}};function En(e){return e instanceof S}function Le(e){return"rawMessage"in e?e.rawMessage:g(e.key,e.params)}function ai(e){return"rawMessage"in e?e.rawMessage:g(e.key,e.params)}function lt(e){let t=Le(e.userMessage);if(!e.details?.failures?.length)return t;let n=e.details.failures.map(r=>`${r.filePath}: ${ai(r)}`).join(` +"use strict";var Tn=Object.defineProperty;var bo=Object.getOwnPropertyDescriptor;var yo=Object.getOwnPropertyNames;var xo=Object.prototype.hasOwnProperty;var Qe=(e,t)=>{for(var n in t)Tn(e,n,{get:t[n],enumerable:!0})},Co=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of yo(t))!xo.call(e,i)&&i!==n&&Tn(e,i,{get:()=>t[i],enumerable:!(r=bo(t,i))||r.enumerable});return e};var So=e=>Co(Tn({},"__esModule",{value:!0}),e);var Ml={};Qe(Ml,{default:()=>Fl});module.exports=So(Ml);var ho=require("obsidian");function B(e,t){return`${e}:${t}`}function Dn(e){return e?.cardType==="basic"}function ti(e){return e?.cardType==="cloze"}function O(e){return e?.cardType==="qa-group"}var ni=require("obsidian");function se(e=(0,ni.getLanguage)()){let t=e.toLowerCase();return t==="zh"||t.startsWith("zh-")?"zh":"en"}function de(e,t){return t.join(e==="zh"?"\u3001":", ")}var An={commands:{syncCurrentFileToAnki:"Sync current file to Anki",syncVaultToAnki:"Sync vault to Anki",clearCurrentFileSyncedCards:"Clear synced cards in current file",cleanupEmptyDecks:"Clean up empty decks"},settings:{pluginTitle:"Anki heading sync",ankiConnectUrl:{name:"AnkiConnect URL",desc:"Default: http://127.0.0.1:8765",placeholder:"Example: http://127.0.0.1:8765"},qaHeadingLevel:{name:"Heading level for question-and-answer cards",desc:"Default question-and-answer heading level is 4."},clozeHeadingLevel:{name:"Cloze heading level",desc:"Default cloze heading level is 5."},cardAnswerCutoffMode:{name:"Card answer cutoff mode",desc:"A valid sync marker always wins. Without a valid marker, either keep the whole heading block or stop before the first 2+ consecutive blank lines.",options:{headingBlock:"Heading-block: whole heading block",doubleBlankLines:"Double-blank-lines: stop before the first 2+ blank lines"}},qaGroup:{title:"List notes for question-and-answer groups",marker:{name:"Marker for question-and-answer groups",desc:"When a question-and-answer heading ends with this hashtag marker, the whole heading block syncs as one list note for that group.",placeholder:"Hashtag marker"},managedNoteType:"Current note type: {{modelName}}. This route syncs QA Group list notes using the field mapping shown below.",managedModelContract:"Current note type summary: {{fieldCount}} fields and {{templateCount}} templates are available for this route."},syncOptions:{addObsidianBacklink:{name:"Add Obsidian backlink",desc:"Append a backlink to the source heading into synced cards."},obsidianBacklinkLabel:{name:"Obsidian backlink label",desc:"The text shown for the backlink. Blank input uses the default backlink label.",placeholder:"Open in Obsidian"},obsidianBacklinkPlacement:{name:"Obsidian backlink placement",desc:"Choose whether the backlink is appended to the question field or placed at the start or end of the answer body.",options:{questionLastLine:"Last line of question field",answerFirstLine:"First line of answer body",answerLastLine:"Last line of answer body"}},highlightsToCloze:{name:"Highlights to cloze",desc:"Convert ==highlight== segments into cloze deletions for cloze cards."},syncObsidianTagsToAnki:{name:"Sync Obsidian tags to Anki",desc:"Sync Obsidian-recognized tags from the current note into Anki note tags, including nested tags. On each sync, these tags overwrite the managed tags in Anki based on the current Obsidian content."},keepPureTagLinesInCardBody:{name:"Keep pure tag lines in card body",desc:'When turned off, remove every line in the card body that contains only tags, such as "#example #tag/case". Inline tags like "this is a #tag example" and lines with ordinary text like "tag label: #project" are kept. Extra blank lines created by removal are cleaned up automatically.'}},mapping:{title:"Note type field mappings",refresh:{name:"Refresh note types from Anki",button:"Refresh note types"},status:{idle:"Refresh note types from Anki to load the available note types.",loadedCount:"Loaded {{count}} note types from Anki.",empty:"Anki returned no note types.",failedLoadNoteTypes:"Failed to load note types from Anki.",loadedSavedMapping:"Loaded saved mapping for {{modelName}}.",selectedModel:"Selected {{modelName}}. Read fields from Anki to create or refresh its mapping.",loadedFieldsForModel:"Loaded fields for {{modelName}}. Review the suggested mapping and save it.",failedLoadFields:"Failed to load fields for {{modelName}}.",noLoadedFields:"No loaded fields for {{modelName}}. Read fields from Anki first.",savedMapping:"Saved mapping for {{modelName}}.",failedSaveMapping:"Failed to save mapping for {{modelName}}.",savedMappingReady:"Saved mapping is ready for {{title}}.",noSavedMapping:"No saved mapping for {{title}}. Read fields from Anki first."},section:{basic:{title:"Basic and question-and-answer",description:"Choose the note type for question-and-answer cards, read its fields from Anki, then confirm the title and body mapping."},cloze:{title:"Cloze",description:"Choose the cloze note type, read its fields from Anki, then confirm the main field mapping."}},noteTypeLabel:"{{title}} note type",noteTypeDesc:"Loaded from Anki note types. Refresh if the latest models are not shown.",fieldsLabel:"{{title}} fields",fieldsDesc:"Load the current note type fields from Anki, then review the suggested mapping.",readFieldsButton:"Read fields from Anki",loadedFields:"Loaded fields: {{fields}}",loadedFieldsNone:"Loaded fields: none. Read fields from Anki first.",mappingLabel:"{{title}} mapping",mappingDesc:"Save the current field mapping for this specific note type.",saveMappingButton:"Save mapping",titleFieldLabel:"{{title}} title field",titleFieldDesc:"Which Anki field should receive the heading/title fragment.",bodyFieldLabel:"{{title}} body field",bodyFieldDesc:"Which Anki field should receive the body fragment.",mainField:{name:"Cloze main field",desc:"The selected field receives title +

+ body during sync."},selectFieldPlaceholder:"-- select field --"},deck:{defaultSectionTitle:"Default deck",defaultDeck:{name:"Default deck",desc:"Lowest priority: used when neither a file-level deck nor a folder mapping matches."},fileDeckSectionTitle:"File-level custom deck",fileDeckEnabled:{name:"Enable file-level custom deck",desc:"When enabled, a shared marker can define one deck for the whole note in YAML or body."},marker:{name:"Deck marker name",desc:"YAML key and body marker share the same identifier. By default, use the built-in target deck marker."},template:{name:"Default deck template",desc:"Only the filename variable is supported. It expands to the current file name without .md when inserted."},insertLocation:{name:"Template insert location",desc:"Choose whether the deck template is written into YAML frontmatter or the body header area.",options:{body:"Body header",yaml:"YAML frontmatter"}},insertTemplate:{name:"Insert deck template into the current file",desc:"Write the deck declaration into the current active Markdown file using the current marker, template, and insert location.",button:"Insert deck template"},folderMappingSectionTitle:"Advanced: folder mapping",folderDeckMode:{name:"Folder mapping mode",desc:"Off / parent folders only / parent folders plus current file name.",options:{off:"Off",folder:"Folder-based mapping",folderAndFile:"Folder-and-file mapping"}},examplesTitle:"Examples:",folderExample:"Folder-based mapping example: \u6570\u5B66/\u7B2C\u4E00\u7AE0/\u7B2C\u4E00\u8282.md -> \u6570\u5B66::\u7B2C\u4E00\u7AE0",folderAndFileExample:"Folder-and-file mapping example: \u6570\u5B66/\u7B2C\u4E00\u7AE0/\u7B2C\u4E00\u8282.md -> \u6570\u5B66::\u7B2C\u4E00\u7AE0::\u7B2C\u4E00\u8282",fallbackDesc:"If neither folder-and-file mapping nor file-level custom decks are used, the default deck name is used as the Anki deck.",priorityTitle:"Final priority",priorityDesc:"Final deck priority: file-level custom deck > folder-mapped deck > default deck."},scope:{name:"Plugin run scope",summary:{all:"Process Markdown files across the whole vault",include:"Only process Markdown files in the checked folders below",exclude:"Process the whole vault, but skip Markdown files in the checked folders below"},unconfiguredWarning:"Run scope is not configured yet. Include mode requires at least one selected folder before sync can run.",option:{all:"All files",include:"Only in selected folders",exclude:"Exclude selected folders"},treeDescription:{include:"Only in selected folders: only process Markdown files in the checked folders below",exclude:"Exclude selected folders: process the whole vault, but skip Markdown files in the checked folders below"},loading:"Loading folders from the current vault...",empty:"There are no selectable folders in the current vault.",failedLoad:"Failed to load folders from the current vault.",expandFolder:"Expand {{name}}",collapseFolder:"Collapse {{name}}",folderDeckModeOverride:{ariaLabel:"Toggle the alternate folder deck mapping mode for {{name}}",hint:{folder:"This folder uses the folder-only deck name by itself",folderAndFile:"This folder uses the folder-and-file deck name by itself"},title:{folder:"Global mode is folder-and-file; enable this to use folder-only deck names for this folder",folderAndFile:"Global mode is folder-only; enable this to use folder-and-file deck names for this folder"}}},cards:{cardTypes:{title:"Card types and basics",desc:"Edit recognition rules directly. Changes save automatically.",advancedHint:"Advanced: keep AnkiConnect URL here without promoting it to a separate status card.",markerPlaceholder:"/",fieldsUnavailable:"-- read fields first --",autoManagedField:"Written automatically",autoComposedAnswer:"Auto composed",qaGroupManagedNoteType:"{{modelName}} (for QA Group list notes)",statusLabel:"Status: ",cacheEmpty:"There are no cached Anki note templates yet. Read the Anki template config manually.",cacheSummary:"Currently using {{noteTypeCount}} cached note templates with {{configuredCount}} selected card modes configured.",cacheChanged:"Anki currently reports {{liveCount}} note templates, which differs from the {{cachedCount}} cached templates on this page. The UI is still using the cache with {{configuredCount}} selected card modes configured; read the Anki template config manually to refresh.",cacheCheckFailed:"Still using {{noteTypeCount}} cached note templates with {{configuredCount}} selected card modes configured. The background check for the latest template list failed; read the Anki template config manually if you need a refresh.",loadedSummary:"Loaded {{noteTypeCount}} note templates and configured {{configuredCount}} selected card modes.",loadedFieldsStatus:"Refreshed fields for {{count}} selected note types.",failedLoad:"Failed to load note types or fields from Anki.",failedSave:"Failed to save card type settings.",loadAnki:{button:"Read Anki note types and fields manually",loading:"Loading Anki note types and fields..."},columns:{enabled:"Enabled",type:"Card type",headingLevel:"Heading marker",extraMarker:"Extra marker",noteType:"Anki note type",questionField:"Question field",answerField:"Answer field"},labels:{headingLevel:"Card marker:",extraMarker:"Extra marker:",noteType:"Anki note type:",questionField:"Question field:",answerField:"Answer field:",mainField:"Main field:",fields:"Fields:",qaGroupTitleField:"Title field:",qaGroupFirstQuestionField:"First question field:",qaGroupFirstAnswerField:"First answer field:",qaGroupConfiguredSlots:"Configured pairs:",qaGroupSlotFields:"Question/answer fields:",qaGroupWarnings:"Warnings:"},qaGroup:{noModel:"Select an Anki note type first",unavailable:"Read fields from Anki first",detectedSlots:"Configured {{count}} pair(s)",configuredSlots:"Configured {{count}} pair(s)",configuredSlotExample:"First {{firstQuestionField}} / {{firstAnswerField}}, last {{lastQuestionField}} / {{lastAnswerField}}",acceptWarnings:"I confirm these warnings can be ignored and sync may continue",warning:{missingAnswer:"Slot {{index}} is missing its answer field, so {{questionField}} / {{answerField}} was ignored.",missingQuestion:"Slot {{index}} is missing its question field, so {{questionField}} / {{answerField}} was ignored."}},sharedClozeMappingHint:"Reuse the current Anki note type and main field from the sequential cloze row. No separate setup is needed.",rows:{basic:"Question and answer (regular paragraph)",qaGroup:"Question and answer (nested list)",cloze:"Cloze (sequential deletions)",clozeAll:"Cloze (all deletions)"}},syncContent:{title:"Card body sync content",desc:"These options affect rendered content only. Updating them refreshes this card only.",sections:{bodyRange:"1. Choose the card body range",backlink:"2. Add backlinks for card-level jumps from Anki to Obsidian",tags:"3. Read tags",clozeSpecial:"4. Cloze-specific options"}},scope:{title:"Plugin run scope",desc:"Keep the existing scope modes and folder tree. The tree is loaded lazily and can be refreshed locally.",refreshFolders:"Refresh folder list"},deck:{title:"Card deck settings",desc:"Card deck settings are grouped by recommended workflow.",sections:{folderMapping:"1. Recommended: use folder-and-file mapping for Anki decks",fileDeck:"2. Optional: enable file-level custom decks",defaultDeck:"3. Fallback: use the default deck"}},commands:{title:"Command guide",desc:"These are the current commands exposed in the command palette.",items:{syncCurrentFile:"Sync only the active Markdown file to Anki.",syncVault:"Sync all in-scope Markdown files in the vault to Anki.",clearCurrentFile:"Clear synced card markers and tracked sync state for the active file.",cleanupDecks:"Delete selected empty decks from Anki."}}}},modal:{emptyDeck:{title:"Clean up empty decks",description:"Select the empty decks to delete. A deck is deleted only if it is still empty at deletion time.",selectAll:"Select all",clearAll:"Clear all",invert:"Invert selection",cancel:"Cancel",deleteSelected:"Delete selected empty decks",selectionCount:"Selected {{selected}} / {{total}} empty decks"}},notice:{invalidSettingsRestored:"Invalid plugin settings were detected. Default settings were restored in memory.",failedSavePluginSettings:"Failed to save plugin settings.",noActiveMarkdownForSync:"No active Markdown file is available for sync.",syncUseCaseNotInitialized:"Sync use case is not initialized.",currentFileSyncFailed:"Current file sync failed.",vaultSyncFailed:"Vault sync failed.",noActiveMarkdownForDeckTemplateInsertion:"No active Markdown file is available for deck template insertion.",vaultGatewayNotInitialized:"Vault gateway is not initialized.",markdownFileNotFound:"Markdown file not found: {{filePath}}",deckTemplateAlreadyCurrent:"The deck template in the current file is already up to date.",deckTemplateInserted:"Inserted deck template into the current file: {{deck}}",deckTemplateInsertionFailed:"Deck template insertion failed.",noActiveMarkdownForReset:"No active Markdown file is available for reset.",clearCurrentFileUseCaseNotInitialized:"Clear-current-file use case is not initialized.",noTrackedCardsInCurrentFile:"There are no synced cards in the current file.",clearCurrentFileFailed:"Clear current file synced cards failed.",cleanupEmptyDecksUseCaseNotInitialized:"Empty-deck cleanup use case is not initialized.",noEmptyDeckCandidates:"No empty decks were found for cleanup.",cleanupEmptyDecksCancelled:"Empty-deck cleanup was cancelled.",cleanupEmptyDecksFailed:"Cleanup empty decks failed.",summary:{currentFileSync:"Current file sync completed: files {{scannedFiles}}, cards {{scannedCards}}, created {{created}}, rebuilt {{rebuilt}}, updated {{updated}}, migrated note types {{migratedNoteTypes}}, migrated decks {{migratedDecks}}, orphaned {{orphaned}}, media {{uploadedMedia}}, skipped {{skippedUnchangedCards}}.",vaultSync:"Vault sync completed: files {{scannedFiles}}, cards {{scannedCards}}, created {{created}}, rebuilt {{rebuilt}}, updated {{updated}}, migrated note types {{migratedNoteTypes}}, migrated decks {{migratedDecks}}, orphaned {{orphaned}}, media {{uploadedMedia}}, skipped {{skippedUnchangedCards}}.",clearCurrentFile:"Current file synced cards cleared: tracked cards {{trackedCards}}, tracked groups {{trackedGroups}}, deleted notes {{deletedNotes}}, removed markers {{removedMarkers}}, removed ID markers {{removedCardMarkers}}, removed GI markers {{removedGroupMarkers}}, deleted local records {{deletedLocalRecords}}.",cleanupEmptyDecks:"Empty-deck cleanup completed: candidates {{candidateCount}}, selected {{selectedCount}}, deleted {{deletedCount}}, skipped {{skippedCount}}.",markerWriteConflicts:"Marker write conflicts: {{files}}.",warningsCount:"Warnings: {{count}}.",markerRemovalConflicts:"Marker removal conflicts: {{files}}.",failures:"Failures: {{items}}.",skippedDecks:"Skipped decks: {{decks}}."}},errors:{runScopeNotConfigured:"Run scope is not configured. In include mode, select at least one folder before syncing.",currentFileOutOfScope:"The current file is outside the plugin scope: {{filePath}}",deck:{emptyName:"Deck name cannot be empty. Check the file-level deck declaration or default deck setting."},settings:{headingLevelsRange:"Heading levels must be integers between 1 and 6.",headingLevelsDifferent:"The question-and-answer and cloze heading levels must be different.",cardTypeConfigsObject:"Card type configs must be an object.",cardTypeEnabledBoolean:"Each card type enabled flag must be a boolean.",cardTypeExtraMarkerString:"Each card type extra marker must be a string.",cardTypeDefaultConflict:"Only one enabled default card type is allowed at heading H{{headingLevel}}.",cardAnswerCutoffModeInvalid:"Card answer cutoff mode must be heading-block or double-blank-lines.",qaNoteTypeRequired:"A question-and-answer note type is required.",qaGroupMarkerRequired:"A question-and-answer group marker is required.",qaGroupMarkerInvalid:"The question-and-answer group marker must be a hashtag-style token.",clozeNoteTypeRequired:"Cloze note type is required.",defaultDeckRequired:"Default deck is required.",fileDeckEnabledBoolean:"File deck enabled must be a boolean.",syncObsidianTagsToAnkiBoolean:"Sync Obsidian tags to Anki must be a boolean.",keepPureTagLinesInCardBodyBoolean:"Keep pure tag lines in card body must be a boolean.",fileDeckMarkerString:"File deck marker must be a string.",fileDeckTemplateString:"File deck template must be a string.",fileDeckInsertLocationInvalid:"File deck insert location must be YAML or body.",folderDeckModeInvalid:"Folder deck mode must be off, folder, or folder-and-file.",scopeModeInvalid:"Scope mode must be one of all, include, or exclude.",obsidianBacklinkPlacementInvalid:"Obsidian backlink placement must be question-last-line, answer-first-line, or answer-last-line.",includeFoldersArray:"Include folders must be an array.",includeFoldersStrings:"Include folders must only contain strings.",excludeFoldersArray:"Exclude folders must be an array.",excludeFoldersStrings:"Exclude folders must only contain strings.",alternateFolderDeckModeFoldersArray:"Alternate folder deck mode folders must be an array.",alternateFolderDeckModeFoldersStrings:"Alternate folder deck mode folders must only contain strings.",ankiConnectUrlRequired:"AnkiConnect URL is required.",ankiNoteTypeCacheArray:"Anki note type cache must be an array.",ankiNoteTypeCacheStrings:"Anki note type cache can only contain strings.",ankiModelFieldCacheObject:"Anki model field cache must be an object.",ankiModelFieldCacheEntryObject:"Each Anki model field cache entry must be an object.",ankiModelFieldCacheFieldNamesArray:"Anki model field cache fieldNames must be an array.",ankiModelFieldCacheFieldNamesStrings:"Anki model field cache fieldNames can only contain strings.",ankiModelFieldCacheLoadedAt:"Anki model field cache loadedAt must be a finite number.",noteFieldMappingsObject:"Note field mappings must be an object.",noteFieldMappingsCardType:"Note field mappings must use a supported card type.",noteFieldMappingsModelName:"Note field mappings must include a model name.",noteFieldMappingsLoadedFieldNames:"Note field mappings must include loaded field names.",noteFieldMappingsLoadedAt:"Note field mappings must include a loaded timestamp.",noteFieldMappingsQaGroupSlotsArray:"Question-and-answer group field mapping slots must be an array.",noteFieldMappingsQaGroupSlotObject:"Each question-and-answer group field mapping slot must be an object.",noteFieldMappingsQaGroupSlotIndex:"Each question-and-answer group field mapping slot.index must be an integer greater than 0.",noteFieldMappingsQaGroupSlotQuestionField:"Each question-and-answer group field mapping slot.questionField must be a string.",noteFieldMappingsQaGroupSlotAnswerField:"Each question-and-answer group field mapping slot.answerField must be a string.",noteFieldMappingsQaGroupWarningsArray:"Question-and-answer group field mapping warnings must be an array.",noteFieldMappingsQaGroupWarningsStrings:"Question-and-answer group field mapping warnings can only contain strings.",noteFieldMappingsQaGroupAcceptedWarningsArray:"Question-and-answer group field mapping acceptedWarnings must be an array.",noteFieldMappingsQaGroupAcceptedWarningsStrings:"Question-and-answer group field mapping acceptedWarnings can only contain strings.",noteFieldMappingsQaGroupDerivationObject:"Question-and-answer group field mapping derivation must be an object.",noteFieldMappingsQaGroupDerivationMode:"Question-and-answer group field mapping derivation mode must be first-pair.",noteFieldMappingsQaGroupDerivationFirstQuestionField:"Question-and-answer group field mapping derivation.firstQuestionField must be a string.",noteFieldMappingsQaGroupDerivationFirstAnswerField:"Question-and-answer group field mapping derivation.firstAnswerField must be a string."},noteFieldMapping:{noteTypeNotSelected:{basic:"No Anki note type is selected for basic cards. Choose one in settings before syncing.",cloze:"No Anki note type is selected for cloze cards. Choose one in settings before syncing.",qaGroup:"No Anki note type is selected for question-and-answer group cards. Choose one in settings before syncing."},missingSavedMapping:{basic:'No saved field mapping found for basic note type "{{modelName}}". Open plugin settings and read fields from Anki first.',cloze:'No saved field mapping found for cloze note type "{{modelName}}". Open plugin settings and read fields from Anki first.',qaGroup:'No saved field mapping found for QA Group note type "{{modelName}}". Open plugin settings, read fields from Anki, and save the mapping first.'},incompleteSavedMapping:{basic:'Saved field mapping for basic note type "{{modelName}}" is incomplete. Open plugin settings and save both title and body fields.',cloze:'Saved field mapping for cloze note type "{{modelName}}" is incomplete. Open plugin settings and save the main field.'},titleBodyMustDiffer:{basic:'Basic note type "{{modelName}}" must use different title and body fields.'},stale:'Saved field mapping for note type "{{modelName}}" is stale because these fields no longer exist in Anki: {{fields}}. Open plugin settings and read fields from Anki again.',qaGroupMissingTitle:'Saved field mapping for QA Group note type "{{modelName}}" is incomplete because the title field is missing. Save the mapping again in settings.',qaGroupNoCompleteSlots:'Saved field mapping for QA Group note type "{{modelName}}" is incomplete because it has no saved question/answer slot pairs. Save the mapping again in settings.',qaGroupNonContinuousSlots:'QA Group note type "{{modelName}}" must start its question/answer slots at pair {{firstIndex}} = 1. Renumber the first pair to 1.',qaGroupSelectedFieldMissing:'The selected field "{{field}}" for QA Group note type "{{modelName}}" is no longer present in Anki. Read fields again and save the mapping again.',qaGroupDuplicateFields:'QA Group note type "{{modelName}}" cannot reuse the same title, question, or answer field.',qaGroupFirstPairNumberMismatch:'The first question field "{{questionField}}" and first answer field "{{answerField}}" for QA Group note type "{{modelName}}" do not use the same pair number.',qaGroupFirstPairMustStartAtOne:'QA Group note type "{{modelName}}" must start its first selected pair at 1, but the current pair starts at {{firstIndex}}.',qaGroupWarningsUnaccepted:'QA Group note type "{{modelName}}" still has unconfirmed field warnings. Confirm them in settings before syncing.',qaGroupSlotCapacityExceeded:'Saved field mapping for QA Group note type "{{modelName}}" only includes {{capacity}} question/answer pair(s), but the current block has {{itemCount}} item(s): {{filePath}}:{{blockStartLine}}.'},noteTypeMigration:{failed:'Failed to migrate Anki note {{noteId}} from "{{fromModel}}" to "{{toModel}}"{{location}}: {{reason}}',unsupported:'The current AnkiConnect does not support migrating Anki note {{noteId}} from "{{fromModel}}" to "{{toModel}}"{{location}}. Upgrade AnkiConnect, or clear the Anki ID and sync again. Reason: {{reason}}'},writeBack:{summary:"Markdown marker write-back failed for {{fileCount}} file(s).",markdownFileNotFound:"Markdown file was not found.",missingSourceContent:"Scanned source content is missing for marker write-back.",noteIdMissing:"Cannot write a marker because note ID is missing for the block at line {{blockStartLine}}."},markerRemoval:{markdownFileNotFound:"Markdown file was not found."}},warnings:{deck:{conflictYamlBody:"Conflicting {{marker}} declarations were found in YAML and body. This sync used the YAML value.",multipleBodyDeclarations:"Multiple {{marker}} declarations were found in the file. This sync used the first body declaration.",invalidFolderSegment:"A folder or file name contains ::, so folder-based deck mapping was skipped and the default deck was used.",fallbackDefault:"No explicit deck was found and a folder-based deck could not be generated, so the default deck was used."}}};var ri={commands:{syncCurrentFileToAnki:"\u540C\u6B65\u5F53\u524D\u6587\u4EF6\u5230 Anki",syncVaultToAnki:"\u540C\u6B65\u5168\u5E93\u5230 Anki",clearCurrentFileSyncedCards:"\u6E05\u7A7A\u5F53\u524D\u6587\u4EF6\u5DF2\u540C\u6B65\u5361\u7247",cleanupEmptyDecks:"\u6E05\u7406\u7A7A\u724C\u7EC4"},settings:{pluginTitle:"Anki Heading Sync",ankiConnectUrl:{name:"AnkiConnect URL",desc:"\u9ED8\u8BA4\u662F http://127.0.0.1:8765",placeholder:"http://127.0.0.1:8765"},qaHeadingLevel:{name:"QA \u6807\u9898\u5C42\u7EA7",desc:"\u9ED8\u8BA4\u662F H4"},clozeHeadingLevel:{name:"\u586B\u7A7A\u9898\u6807\u9898\u5C42\u7EA7",desc:"\u9ED8\u8BA4\u662F H5"},cardAnswerCutoffMode:{name:"\u5361\u7247\u6B63\u6587\u622A\u6B62\u6A21\u5F0F",desc:"\u6709\u6548\u540C\u6B65\u6807\u8BB0\u59CB\u7EC8\u4F18\u5148\u3002\u6CA1\u6709\u6709\u6548\u6807\u8BB0\u65F6\uFF0C\u9009\u62E9\u7EE7\u7EED\u5230\u6574\u4E2A\u6807\u9898\u5757\u672B\u5C3E\uFF0C\u6216\u5728\u9996\u4E2A 2+ \u8FDE\u7EED\u7A7A\u884C\u524D\u622A\u6B62\u3002",options:{headingBlock:"heading-block\uFF1A\u6574\u4E2A\u6807\u9898\u5757",doubleBlankLines:"double-blank-lines\uFF1A\u5728\u9996\u4E2A 2+ \u8FDE\u7EED\u7A7A\u884C\u524D\u622A\u6B62"}},qaGroup:{title:"\u95EE\u7B54\u9898\uFF08\u591A\u7EA7\u5217\u8868\u5F62\u5F0F\uFF09",marker:{name:"QA Group \u6807\u8BB0",desc:"\u5F53 QA \u6807\u9898\u4EE5\u8FD9\u4E2A hashtag \u6807\u8BB0\u7ED3\u5C3E\u65F6\uFF0C\u6574\u4E2A\u6807\u9898\u5757\u4F1A\u540C\u6B65\u4E3A\u4E00\u6761\u591A\u7EA7\u5217\u8868\u95EE\u7B54\u7B14\u8BB0\u3002",placeholder:"#anki-list"},managedNoteType:"\u5F53\u524D\u7B14\u8BB0\u7C7B\u578B\uFF1A{{modelName}}\u3002\u8FD9\u6761\u8DEF\u7EBF\u4F1A\u6309\u4E0B\u65B9\u5B57\u6BB5\u6620\u5C04\u540C\u6B65\u591A\u7EA7\u5217\u8868\u95EE\u7B54\u5185\u5BB9\u3002",managedModelContract:"\u5F53\u524D\u7B14\u8BB0\u7C7B\u578B\u6458\u8981\uFF1A\u8FD9\u6761\u8DEF\u7EBF\u53EF\u7528 {{fieldCount}} \u4E2A\u5B57\u6BB5\u548C {{templateCount}} \u4E2A\u6A21\u677F\u3002"},syncOptions:{addObsidianBacklink:{name:"\u6DFB\u52A0 Obsidian \u56DE\u94FE",desc:"\u628A\u6765\u6E90\u6807\u9898\u7684\u56DE\u94FE\u8FFD\u52A0\u5230\u540C\u6B65\u540E\u7684\u5361\u7247\u4E2D\u3002"},obsidianBacklinkLabel:{name:"Obsidian \u56DE\u94FE\u663E\u793A\u540D\u79F0",desc:"\u8BBE\u7F6E\u56DE\u94FE\u663E\u793A\u7684\u6587\u5B57\u3002\u7559\u7A7A\u6216\u53EA\u586B\u7A7A\u683C\u65F6\u4F1A\u56DE\u9000\u4E3A Open in Obsidian\u3002",placeholder:"Open in Obsidian"},obsidianBacklinkPlacement:{name:"Obsidian \u56DE\u94FE\u653E\u7F6E\u4F4D\u7F6E",desc:"\u9009\u62E9\u628A\u56DE\u94FE\u8FFD\u52A0\u5230\u95EE\u9898\u680F\u6700\u540E\u4E00\u884C\uFF0C\u6216\u653E\u5230\u7B54\u6848\u6B63\u6587\u7684\u7B2C\u4E00\u884C / \u6700\u540E\u4E00\u884C\u3002",options:{questionLastLine:"\u95EE\u9898\u680F\u7684\u6700\u540E\u4E00\u884C",answerFirstLine:"\u7B54\u6848\u6B63\u6587\u7684\u7B2C\u4E00\u884C",answerLastLine:"\u7B54\u6848\u6B63\u6587\u7684\u6700\u540E\u4E00\u884C"}},highlightsToCloze:{name:"\u9AD8\u4EAE\u8F6C\u586B\u7A7A\u9898",desc:"\u628A ==highlight== \u7247\u6BB5\u8F6C\u6362\u6210\u586B\u7A7A\u9898\u4F7F\u7528\u7684\u6316\u7A7A\u683C\u5F0F\u3002"},syncObsidianTagsToAnki:{name:"\u540C\u6B65 Obsidian \u6807\u7B7E\u5230 Anki",desc:"\u5C06\u5F53\u524D\u7B14\u8BB0\u4E2D Obsidian \u8BC6\u522B\u5230\u7684\u6807\u7B7E\u540C\u6B65\u4E3A Anki \u7B14\u8BB0\u6807\u7B7E\uFF0C\u652F\u6301\u5D4C\u5957\u6807\u7B7E\u3002\u6BCF\u6B21\u540C\u6B65\u65F6\uFF0C\u8FD9\u4E9B\u6807\u7B7E\u90FD\u4F1A\u4EE5\u5F53\u524D Obsidian \u5185\u5BB9\u4E3A\u51C6\u8986\u76D6 Anki\u3002"},keepPureTagLinesInCardBody:{name:"\u5728\u5361\u7247\u6B63\u6587\u4E2D\u4FDD\u7559\u7EAF\u6807\u7B7E\u884C",desc:"\u5173\u95ED\u540E\uFF0C\u4F1A\u5220\u9664\u6B63\u6587\u4E2D\u6240\u6709\u53EA\u5305\u542B\u6807\u7B7E\u7684\u6574\u884C\uFF0C\u4F8B\u5982 \u201C#\u9879\u76EEA #\u91CD\u70B9/\u6848\u4F8B\u201D\u3002\u50CF\u201C\u8FD9\u662F #\u6807\u7B7E \u7684\u6848\u4F8B\u201D\u8FD9\u7C7B\u884C\u5185\u6807\u7B7E\uFF0C\u6216\u201C\u6807\u7B7E\uFF1A#\u9879\u76EEA\u201D\u8FD9\u7C7B\u5E26\u666E\u901A\u6587\u5B57\u7684\u884C\uFF0C\u4E0D\u4F1A\u88AB\u5220\u9664\u3002\u5220\u9664\u540E\u4F1A\u81EA\u52A8\u6E05\u7406\u591A\u4F59\u7A7A\u884C\u3002"}},mapping:{title:"\u7B14\u8BB0\u7C7B\u578B\u5B57\u6BB5\u6620\u5C04",refresh:{name:"\u4ECE Anki \u5237\u65B0\u7B14\u8BB0\u7C7B\u578B",button:"\u5237\u65B0\u7B14\u8BB0\u7C7B\u578B"},status:{idle:"\u8BF7\u5148\u4ECE Anki \u5237\u65B0\u7B14\u8BB0\u7C7B\u578B\uFF0C\u4EE5\u52A0\u8F7D\u53EF\u7528\u7684\u7B14\u8BB0\u7C7B\u578B\u5217\u8868\u3002",loadedCount:"\u5DF2\u4ECE Anki \u52A0\u8F7D {{count}} \u4E2A\u7B14\u8BB0\u7C7B\u578B\u3002",empty:"Anki \u6CA1\u6709\u8FD4\u56DE\u4EFB\u4F55\u7B14\u8BB0\u7C7B\u578B\u3002",failedLoadNoteTypes:"\u4ECE Anki \u52A0\u8F7D\u7B14\u8BB0\u7C7B\u578B\u5931\u8D25\u3002",loadedSavedMapping:"\u5DF2\u52A0\u8F7D {{modelName}} \u7684\u5DF2\u4FDD\u5B58\u6620\u5C04\u3002",selectedModel:"\u5DF2\u9009\u62E9 {{modelName}}\u3002\u8BF7\u4ECE Anki \u8BFB\u53D6\u5B57\u6BB5\u4EE5\u521B\u5EFA\u6216\u5237\u65B0\u5B83\u7684\u6620\u5C04\u3002",loadedFieldsForModel:"\u5DF2\u52A0\u8F7D {{modelName}} \u7684\u5B57\u6BB5\u3002\u8BF7\u68C0\u67E5\u5EFA\u8BAE\u6620\u5C04\u540E\u4FDD\u5B58\u3002",failedLoadFields:"\u52A0\u8F7D {{modelName}} \u7684\u5B57\u6BB5\u5931\u8D25\u3002",noLoadedFields:"{{modelName}} \u8FD8\u6CA1\u6709\u5DF2\u52A0\u8F7D\u5B57\u6BB5\u3002\u8BF7\u5148\u4ECE Anki \u8BFB\u53D6\u5B57\u6BB5\u3002",savedMapping:"\u5DF2\u4FDD\u5B58 {{modelName}} \u7684\u6620\u5C04\u3002",failedSaveMapping:"\u4FDD\u5B58 {{modelName}} \u7684\u6620\u5C04\u5931\u8D25\u3002",savedMappingReady:"{{title}} \u7684\u5DF2\u4FDD\u5B58\u6620\u5C04\u5DF2\u5C31\u7EEA\u3002",noSavedMapping:"{{title}} \u8FD8\u6CA1\u6709\u5DF2\u4FDD\u5B58\u6620\u5C04\u3002\u8BF7\u5148\u4ECE Anki \u8BFB\u53D6\u5B57\u6BB5\u3002"},section:{basic:{title:"QA / \u57FA\u7840\u5361",description:"\u9009\u62E9 QA \u7B14\u8BB0\u7C7B\u578B\uFF0C\u4ECE Anki \u8BFB\u53D6\u5B57\u6BB5\uFF0C\u7136\u540E\u786E\u8BA4\u6807\u9898/\u6B63\u6587\u6620\u5C04\u3002"},cloze:{title:"\u586B\u7A7A\u9898",description:"\u9009\u62E9\u586B\u7A7A\u9898\u7B14\u8BB0\u7C7B\u578B\uFF0C\u4ECE Anki \u8BFB\u53D6\u5B57\u6BB5\uFF0C\u7136\u540E\u786E\u8BA4\u4E3B\u5B57\u6BB5\u6620\u5C04\u3002"}},noteTypeLabel:"{{title}} \u7B14\u8BB0\u7C7B\u578B",noteTypeDesc:"\u4ECE Anki \u7684\u7B14\u8BB0\u7C7B\u578B\u5217\u8868\u52A0\u8F7D\u3002\u5982\u679C\u6700\u65B0\u6A21\u578B\u6CA1\u6709\u663E\u793A\uFF0C\u8BF7\u5148\u5237\u65B0\u3002",fieldsLabel:"{{title}} \u5B57\u6BB5",fieldsDesc:"\u4ECE Anki \u8BFB\u53D6\u5F53\u524D\u7B14\u8BB0\u7C7B\u578B\u7684\u5B57\u6BB5\uFF0C\u7136\u540E\u68C0\u67E5\u5EFA\u8BAE\u6620\u5C04\u3002",readFieldsButton:"\u4ECE Anki \u8BFB\u53D6\u5B57\u6BB5",loadedFields:"\u5DF2\u52A0\u8F7D\u5B57\u6BB5\uFF1A{{fields}}",loadedFieldsNone:"\u5DF2\u52A0\u8F7D\u5B57\u6BB5\uFF1A\u65E0\u3002\u8BF7\u5148\u4ECE Anki \u8BFB\u53D6\u5B57\u6BB5\u3002",mappingLabel:"{{title}} \u6620\u5C04",mappingDesc:"\u4FDD\u5B58\u5F53\u524D\u7B14\u8BB0\u7C7B\u578B\u7684\u5B57\u6BB5\u6620\u5C04\u3002",saveMappingButton:"\u4FDD\u5B58\u6620\u5C04",titleFieldLabel:"{{title}} \u6807\u9898\u5B57\u6BB5",titleFieldDesc:"\u9009\u62E9\u63A5\u6536\u6807\u9898\u7247\u6BB5\u7684 Anki \u5B57\u6BB5\u3002",bodyFieldLabel:"{{title}} \u6B63\u6587\u5B57\u6BB5",bodyFieldDesc:"\u9009\u62E9\u63A5\u6536\u6B63\u6587\u7247\u6BB5\u7684 Anki \u5B57\u6BB5\u3002",mainField:{name:"\u586B\u7A7A\u9898\u4E3B\u5B57\u6BB5",desc:"\u540C\u6B65\u65F6\uFF0C\u6240\u9009\u5B57\u6BB5\u4F1A\u63A5\u6536 \u6807\u9898 +

+ \u6B63\u6587\u3002"},selectFieldPlaceholder:"-- \u9009\u62E9\u5B57\u6BB5 --"},deck:{defaultSectionTitle:"\u9ED8\u8BA4\u724C\u7EC4",defaultDeck:{name:"\u9ED8\u8BA4\u724C\u7EC4",desc:"\u4F18\u5148\u7EA7\u6700\u4F4E\uFF1A\u5F53\u6587\u4EF6\u7EA7\u81EA\u5B9A\u4E49\u724C\u7EC4\u4E0E\u6587\u4EF6\u5939\u6620\u5C04\u724C\u7EC4\u90FD\u672A\u547D\u4E2D\u65F6\u4F7F\u7528\u3002"},fileDeckSectionTitle:"\u6587\u4EF6\u7EA7\u81EA\u5B9A\u4E49\u724C\u7EC4",fileDeckEnabled:{name:"\u5F00\u542F\u6587\u4EF6\u7EA7\u81EA\u5B9A\u4E49\u724C\u7EC4",desc:"\u5F00\u542F\u540E\uFF0C\u53EF\u5728 YAML \u6216\u6B63\u6587\u4E2D\u7528\u7EDF\u4E00\u8BC6\u522B\u540D\u4E3A\u6574\u7BC7\u7B14\u8BB0\u6307\u5B9A\u4E00\u4E2A\u724C\u7EC4\u3002"},marker:{name:"\u724C\u7EC4\u8BC6\u522B\u540D",desc:"YAML key \u4E0E\u6B63\u6587\u6807\u8BB0\u5171\u7528\u540C\u4E00\u4E2A\u8BC6\u522B\u540D\u3002\u9ED8\u8BA4\u503C\u662F TARGET DECK\u3002"},template:{name:"\u9ED8\u8BA4\u724C\u7EC4\u6A21\u677F",desc:"\u53EA\u652F\u6301 filename \u53D8\u91CF\u3002\u63D2\u5165\u65F6\u4F1A\u5C55\u5F00\u4E3A\u5F53\u524D\u6587\u4EF6\u540D\uFF08\u4E0D\u542B .md\uFF09\u3002"},insertLocation:{name:"\u6A21\u677F\u63D2\u5165\u4F4D\u7F6E",desc:"\u9009\u62E9\u5C06\u724C\u7EC4\u6A21\u677F\u5199\u5165 YAML frontmatter \u8FD8\u662F\u6B63\u6587\u524D\u90E8\u3002",options:{body:"\u6B63\u6587\u524D\u90E8",yaml:"YAML frontmatter"}},insertTemplate:{name:"\u5411\u5F53\u524D\u6587\u4EF6\u63D2\u5165\u724C\u7EC4\u6A21\u677F",desc:"\u6309\u5F53\u524D\u8BC6\u522B\u540D\u3001\u6A21\u677F\u548C\u63D2\u5165\u4F4D\u7F6E\uFF0C\u628A\u724C\u7EC4\u58F0\u660E\u5199\u5165\u5F53\u524D\u6D3B\u52A8 Markdown \u6587\u4EF6\u3002",button:"\u63D2\u5165\u724C\u7EC4\u6A21\u677F"},folderMappingSectionTitle:"\u9AD8\u7EA7\uFF1A\u6587\u4EF6\u5939\u6620\u5C04\u724C\u7EC4",folderDeckMode:{name:"\u6587\u4EF6\u5939\u6620\u5C04\u6A21\u5F0F",desc:"\u5173\u95ED / \u4EC5\u7236\u6587\u4EF6\u5939 / \u6587\u4EF6\u5939\u53CA\u6587\u4EF6\u540D\u3002",options:{off:"\u5173\u95ED",folder:"\u6587\u4EF6\u5939\u7EA7\u6620\u5C04",folderAndFile:"\u6587\u4EF6\u5939\u53CA\u6587\u4EF6\u540D\u7EA7\u6620\u5C04"}},examplesTitle:"\u793A\u4F8B\uFF1A",folderExample:"\u6587\u4EF6\u5939\u6620\u5C04\u724C\u7EC4\u793A\u4F8B\uFF1A\u6570\u5B66/\u7B2C\u4E00\u7AE0/\u7B2C\u4E00\u8282.md -> \u6570\u5B66::\u7B2C\u4E00\u7AE0",folderAndFileExample:"\u6587\u4EF6\u5939\u53CA\u6587\u4EF6\u540D\u6620\u5C04\u724C\u7EC4\u793A\u4F8B\uFF1A\u6570\u5B66/\u7B2C\u4E00\u7AE0/\u7B2C\u4E00\u8282.md -> \u6570\u5B66::\u7B2C\u4E00\u7AE0::\u7B2C\u4E00\u8282",fallbackDesc:"\u82E5\u5747\u4E0D\u6253\u5F00\u300C\u6587\u4EF6\u5939\u53CA\u6587\u4EF6\u540D\u300D\u53CA\u300C\u6587\u4EF6\u7EA7\u300D\u724C\u7EC4\uFF0C\u5219\u4EE5\u300C\u9ED8\u8BA4\u724C\u7EC4\u540D\u79F0\u300D\u4F5C\u4E3A Anki \u7684\u724C\u7EC4\u540D\u3002",priorityTitle:"\u6700\u7EC8\u724C\u7EC4\u4F18\u5148\u7EA7\u8BF4\u660E",priorityDesc:"\u6700\u7EC8\u724C\u7EC4\u4F18\u5148\u7EA7\uFF1A\u6587\u4EF6\u7EA7\u81EA\u5B9A\u4E49\u724C\u7EC4 > \u6587\u4EF6\u5939\u6620\u5C04\u724C\u7EC4 > \u9ED8\u8BA4\u724C\u7EC4\u3002"},scope:{name:"\u63D2\u4EF6\u8FD0\u884C\u8303\u56F4",summary:{all:"\u5904\u7406\u6574\u4E2A vault \u4E2D\u7684 Markdown \u6587\u4EF6",include:"\u4EC5\u5904\u7406\u4E0B\u65B9\u52FE\u9009\u6587\u4EF6\u5939\u4E2D\u7684 Markdown \u6587\u4EF6",exclude:"\u5904\u7406\u6574\u4E2A vault\uFF0C\u4F46\u8DF3\u8FC7\u4E0B\u65B9\u52FE\u9009\u6587\u4EF6\u5939\u4E2D\u7684 Markdown \u6587\u4EF6"},unconfiguredWarning:"\u8FD0\u884C\u8303\u56F4\u5C1A\u672A\u914D\u7F6E\u3002\u5F53\u524D\u662F include \u6A21\u5F0F\uFF0C\u81F3\u5C11\u9009\u62E9\u4E00\u4E2A\u6587\u4EF6\u5939\u540E\u624D\u80FD\u540C\u6B65\u3002",option:{all:"\u5168\u90E8\u6587\u4EF6",include:"\u4EC5\u5728\u6307\u5B9A\u6587\u4EF6\u5939",exclude:"\u6392\u9664\u6307\u5B9A\u6587\u4EF6\u5939"},treeDescription:{include:"\u4EC5\u5728\u6307\u5B9A\u6587\u4EF6\u5939\uFF1A\u53EA\u5904\u7406\u4E0B\u65B9\u52FE\u9009\u6587\u4EF6\u5939\u4E2D\u7684 Markdown \u6587\u4EF6",exclude:"\u6392\u9664\u6307\u5B9A\u6587\u4EF6\u5939\uFF1A\u5904\u7406\u6574\u4E2A vault\uFF0C\u4F46\u8DF3\u8FC7\u4E0B\u65B9\u52FE\u9009\u6587\u4EF6\u5939\u4E2D\u7684 Markdown \u6587\u4EF6"},loading:"\u6B63\u5728\u8BFB\u53D6\u5F53\u524D vault \u6587\u4EF6\u5939...",empty:"\u5F53\u524D vault \u4E2D\u6CA1\u6709\u53EF\u9009\u6587\u4EF6\u5939\u3002",failedLoad:"\u8BFB\u53D6\u5F53\u524D vault \u6587\u4EF6\u5939\u5931\u8D25\u3002",expandFolder:"\u5C55\u5F00 {{name}}",collapseFolder:"\u6536\u8D77 {{name}}",folderDeckModeOverride:{ariaLabel:"\u5207\u6362 {{name}} \u7684\u6587\u4EF6\u5939\u724C\u7EC4\u6620\u5C04\u6A21\u5F0F",hint:{folder:"\u672C\u6587\u4EF6\u5939\u5355\u72EC\u91C7\u7528\u300C\u6587\u4EF6\u5939\u300D\u4F5C\u4E3A\u724C\u7EC4\u540D",folderAndFile:"\u672C\u6587\u4EF6\u5939\u5355\u72EC\u91C7\u7528\u300C\u6587\u4EF6\u5939\u53CA\u6587\u4EF6\u540D\u300D\u4F5C\u4E3A\u724C\u7EC4\u540D"},title:{folder:"\u5F53\u524D\u5168\u5C40\u4E3A\u300C\u6587\u4EF6\u5939\u53CA\u6587\u4EF6\u540D\u300D\uFF0C\u52FE\u9009\u540E\u6B64\u6587\u4EF6\u5939\u6539\u7528\u300C\u6587\u4EF6\u5939\u300D\u4F5C\u4E3A\u724C\u7EC4\u540D",folderAndFile:"\u5F53\u524D\u5168\u5C40\u4E3A\u300C\u6587\u4EF6\u5939\u300D\uFF0C\u52FE\u9009\u540E\u6B64\u6587\u4EF6\u5939\u6539\u7528\u300C\u6587\u4EF6\u5939\u53CA\u6587\u4EF6\u540D\u300D\u4F5C\u4E3A\u724C\u7EC4\u540D"}}},cards:{cardTypes:{title:"\u5361\u7247\u7C7B\u578B\u53CA\u57FA\u7840\u8BBE\u7F6E",desc:"\u76F4\u63A5\u7F16\u8F91\u8BC6\u522B\u89C4\u5219\uFF0C\u4FEE\u6539\u540E\u81EA\u52A8\u4FDD\u5B58\u3002",advancedHint:"\u9AD8\u7EA7\u9879\uFF1A\u5C06 AnkiConnect URL \u4FDD\u7559\u5728\u8FD9\u91CC\uFF0C\u4E0D\u5355\u72EC\u505A\u8FDE\u63A5\u72B6\u6001\u5361\u7247\u3002",markerPlaceholder:"/",fieldsUnavailable:"-- \u8BF7\u5148\u8BFB\u53D6\u5B57\u6BB5 --",autoManagedField:"\u81EA\u52A8\u5199\u5165",autoComposedAnswer:"\u81EA\u52A8\u62FC\u63A5",qaGroupManagedNoteType:"{{modelName}}\uFF08\u7528\u4E8E\u591A\u7EA7\u5217\u8868\u95EE\u7B54\uFF09",statusLabel:"\u72B6\u6001\uFF1A",cacheEmpty:"\u5F53\u524D\u6CA1\u6709\u5DF2\u7F13\u5B58\u7684 Anki \u7B14\u8BB0\u6A21\u677F\u3002\u8BF7\u624B\u52A8\u8BFB\u53D6 Anki \u91CC\u7684\u6A21\u677F\u914D\u7F6E\u3002",cacheSummary:"\u5F53\u524D\u4F7F\u7528\u7F13\u5B58\u7684 {{noteTypeCount}} \u4E2A\u7B14\u8BB0\u6A21\u677F\uFF0C\u5DF2\u9009\u62E9\u5E76\u914D\u7F6E {{configuredCount}} \u4E2A\u5361\u7247\u6A21\u5F0F\u3002",cacheChanged:"\u68C0\u6D4B\u5230 Anki \u5F53\u524D\u6709 {{liveCount}} \u4E2A\u7B14\u8BB0\u6A21\u677F\uFF0C\u548C\u672C\u9875\u7F13\u5B58\u7684 {{cachedCount}} \u4E2A\u6A21\u677F\u4E0D\u4E00\u81F4\u3002\u5F53\u524D\u4ECD\u5728\u4F7F\u7528\u7F13\u5B58\uFF0C\u5DF2\u9009\u62E9\u5E76\u914D\u7F6E {{configuredCount}} \u4E2A\u5361\u7247\u6A21\u5F0F\uFF1B\u5982\u9700\u66F4\u65B0\u8BF7\u624B\u52A8\u8BFB\u53D6 Anki \u91CC\u7684\u6A21\u677F\u914D\u7F6E\u3002",cacheCheckFailed:"\u5F53\u524D\u7EE7\u7EED\u4F7F\u7528\u7F13\u5B58\u7684 {{noteTypeCount}} \u4E2A\u7B14\u8BB0\u6A21\u677F\uFF0C\u5DF2\u9009\u62E9\u5E76\u914D\u7F6E {{configuredCount}} \u4E2A\u5361\u7247\u6A21\u5F0F\uFF1B\u540E\u53F0\u68C0\u67E5\u6700\u65B0\u6A21\u677F\u5217\u8868\u5931\u8D25\uFF0C\u5982\u9700\u66F4\u65B0\u8BF7\u624B\u52A8\u8BFB\u53D6 Anki \u91CC\u7684\u6A21\u677F\u914D\u7F6E\u3002",loadedSummary:"\u5DF2\u83B7\u53D6 {{noteTypeCount}} \u4E2A\u7B14\u8BB0\u6A21\u677F\uFF0C\u5DF2\u9009\u62E9\u5E76\u914D\u7F6E {{configuredCount}} \u4E2A\u5361\u7247\u6A21\u5F0F\u3002",loadedFieldsStatus:"\u5DF2\u5237\u65B0 {{count}} \u4E2A\u5F53\u524D\u6240\u9009\u6A21\u677F\u7684\u5B57\u6BB5\u3002",failedLoad:"\u4ECE Anki \u8BFB\u53D6\u6A21\u677F\u6216\u5B57\u6BB5\u5931\u8D25\u3002",failedSave:"\u4FDD\u5B58\u5361\u7247\u7C7B\u578B\u8BBE\u7F6E\u5931\u8D25\u3002",loadAnki:{button:"\u624B\u52A8\u8BFB\u53D6 Anki \u91CC\u7684\u6A21\u677F\u914D\u7F6E",loading:"\u6B63\u5728\u8BFB\u53D6 Anki \u6A21\u677F\u548C\u5B57\u6BB5..."},columns:{enabled:"\u542F\u7528",type:"\u5361\u7247\u7C7B\u578B",headingLevel:"\u5361\u7247\u6807\u8BB0",extraMarker:"\u989D\u5916\u6807\u8BB0",noteType:"Anki \u7B14\u8BB0\u6A21\u677F",questionField:"\u95EE\u9898\u5B57\u6BB5",answerField:"\u7B54\u6848\u5B57\u6BB5"},labels:{headingLevel:"\u5361\u7247\u6807\u8BB0\uFF1A",extraMarker:"\u989D\u5916\u6807\u8BB0\uFF1A",noteType:"Anki \u7B14\u8BB0\u6A21\u677F\uFF1A",questionField:"\u95EE\u9898\u5B57\u6BB5\uFF1A",answerField:"\u7B54\u6848\u5B57\u6BB5\uFF1A",mainField:"\u4E3B\u5B57\u6BB5\uFF1A",fields:"\u5B57\u6BB5\uFF1A",qaGroupTitleField:"\u9898\u76EE\u5B57\u6BB5\uFF1A",qaGroupFirstQuestionField:"\u9996\u4E2A\u95EE\u9898\u5B57\u6BB5\uFF1A",qaGroupFirstAnswerField:"\u9996\u4E2A\u7B54\u6848\u5B57\u6BB5\uFF1A",qaGroupConfiguredSlots:"\u5DF2\u914D\u7F6E\u7EC4\u6570\uFF1A",qaGroupSlotFields:"\u95EE\u9898/\u7B54\u6848\u5B57\u6BB5\uFF1A",qaGroupWarnings:"\u8B66\u544A\uFF1A"},qaGroup:{noModel:"\u8BF7\u5148\u9009\u62E9 Anki \u7B14\u8BB0\u6A21\u677F",unavailable:"\u8BF7\u5148\u624B\u52A8\u8BFB\u53D6\u5B57\u6BB5",detectedSlots:"\u5DF2\u914D\u7F6E{{count}}\u7EC4",configuredSlots:"\u5DF2\u914D\u7F6E{{count}}\u7EC4",configuredSlotExample:"\u9996\u7EC4 {{firstQuestionField}} / {{firstAnswerField}}\uFF0C\u672B\u7EC4 {{lastQuestionField}} / {{lastAnswerField}}",acceptWarnings:"\u6211\u5DF2\u786E\u8BA4\u5FFD\u7565\u5F53\u524D\u8B66\u544A\uFF0C\u5E76\u5141\u8BB8\u540C\u6B65",warning:{missingAnswer:"\u7B2C {{index}} \u7EC4\u7F3A\u5C11\u7B54\u6848\u5B57\u6BB5\uFF0C\u5DF2\u5FFD\u7565 {{questionField}} / {{answerField}}\u3002",missingQuestion:"\u7B2C {{index}} \u7EC4\u7F3A\u5C11\u95EE\u9898\u5B57\u6BB5\uFF0C\u5DF2\u5FFD\u7565 {{questionField}} / {{answerField}}\u3002"}},sharedClozeMappingHint:"\u590D\u7528\u201C\u586B\u7A7A\u9898\uFF08\u9010\u4E2A\u6316\u7A7A\uFF09\u201D\u5F53\u524D\u9009\u62E9\u7684 Anki \u7B14\u8BB0\u6A21\u677F\u548C\u4E3B\u5B57\u6BB5\uFF0C\u65E0\u9700\u5355\u72EC\u8BBE\u7F6E\u3002",rows:{basic:"\u95EE\u7B54\u9898\uFF08\u5E38\u89C4\u6BB5\u843D\u5F62\u5F0F\uFF09",qaGroup:"\u95EE\u7B54\u9898\uFF08\u591A\u7EA7\u5217\u8868\u5F62\u5F0F\uFF09",cloze:"\u586B\u7A7A\u9898\uFF08\u9010\u4E2A\u6316\u7A7A\uFF09",clozeAll:"\u586B\u7A7A\u9898\uFF08\u5168\u90E8\u6316\u7A7A\uFF09"}},syncContent:{title:"\u5361\u7247\u6B63\u6587\u540C\u6B65\u5185\u5BB9",desc:"\u8FD9\u4E9B\u9009\u9879\u53EA\u5F71\u54CD\u5361\u7247\u6E32\u67D3\u5185\u5BB9\uFF0C\u4FEE\u6539\u540E\u4EC5\u5237\u65B0\u8FD9\u4E00\u5F20\u5361\u7247\u3002",sections:{bodyRange:"1. \u786E\u5B9A\u300C\u5361\u7247\u6B63\u6587\u300D\u8303\u56F4",backlink:"2. \u786E\u5B9A\u662F\u5426\u589E\u52A0\u56DE\u94FE\uFF0C\u65B9\u4FBF\u4ECE Anki\u300C\u5361\u7247\u7EA7\u8DF3\u8F6C\u300D\u56DE Obsidian",tags:"3. \u786E\u5B9A\u662F\u5426\u8BFB\u53D6\u300C\u6807\u7B7E\u300D",clozeSpecial:"4. \u300C\u586B\u7A7A\u9898\u300D\u4E13\u9879"}},scope:{title:"\u63D2\u4EF6\u8FD0\u884C\u8303\u56F4",desc:"\u4FDD\u7559\u73B0\u6709\u4F5C\u7528\u8303\u56F4\u548C\u6587\u4EF6\u5939\u6811\u903B\u8F91\uFF1B\u6587\u4EF6\u5939\u6811\u6309\u9700\u52A0\u8F7D\uFF0C\u5E76\u652F\u6301\u5C40\u90E8\u5237\u65B0\u3002",refreshFolders:"\u5237\u65B0\u6587\u4EF6\u5939\u5217\u8868"},deck:{title:"\u5361\u7247\u724C\u7EC4\u8BBE\u7F6E",desc:"\u5361\u7247\u724C\u7EC4\u8BBE\u7F6E\u6309\u63A8\u8350\u8DEF\u5F84\u5206\u7EC4\u5C55\u793A\u3002",sections:{folderMapping:"1\uFF0C\u63A8\u8350\u7528\u300C\u6587\u4EF6\u5939\u53CA\u6587\u4EF6\u540D\u300D\u4F5C\u4E3A\u300CAnki\u724C\u7EC4\u300D",fileDeck:"2\uFF0C\u53EF\u6253\u5F00\u300C\u6587\u4EF6\u7EA7\u81EA\u5B9A\u4E49\u724C\u7EC4\u300D\uFF0C\u4F5C\u4E3A\u4E2A\u6027\u5316\u5B9A\u5236",defaultDeck:"3\uFF0C\u9ED8\u8BA4\u724C\u7EC4\u4F5C\u4E3A\u515C\u5E95"}},commands:{title:"\u547D\u4EE4\u8BF4\u660E",desc:"\u4E0B\u9762\u5C55\u793A\u5F53\u524D\u547D\u4EE4\u9762\u677F\u4E2D\u53EF\u7528\u7684\u63D2\u4EF6\u547D\u4EE4\u3002",items:{syncCurrentFile:"\u53EA\u628A\u5F53\u524D\u6D3B\u52A8 Markdown \u6587\u4EF6\u540C\u6B65\u5230 Anki\u3002",syncVault:"\u628A\u5168\u5E93\u4E2D\u6240\u6709\u5904\u4E8E\u4F5C\u7528\u8303\u56F4\u5185\u7684 Markdown \u6587\u4EF6\u540C\u6B65\u5230 Anki\u3002",clearCurrentFile:"\u6E05\u7A7A\u5F53\u524D\u6587\u4EF6\u7684\u5DF2\u540C\u6B65\u6807\u8BB0\u548C\u672C\u5730\u8DDF\u8E2A\u72B6\u6001\u3002",cleanupDecks:"\u4ECE Anki \u5220\u9664\u6240\u9009\u7A7A\u724C\u7EC4\u3002"}}}},modal:{emptyDeck:{title:"\u6E05\u7406\u7A7A\u724C\u7EC4",description:"\u52FE\u9009\u8981\u5220\u9664\u7684\u7A7A\u724C\u7EC4\u3002\u53EA\u6709\u5220\u9664\u65F6\u4ECD\u4E3A\u7A7A\u7684\u724C\u7EC4\u4F1A\u88AB\u771F\u6B63\u5220\u9664\u3002",selectAll:"\u5168\u9009\u5168\u90E8",clearAll:"\u5168\u90E8\u4E0D\u9009",invert:"\u53CD\u9009",cancel:"\u53D6\u6D88",deleteSelected:"\u5220\u9664\u6240\u9009\u7A7A\u724C\u7EC4",selectionCount:"\u5DF2\u9009 {{selected}} / \u5171 {{total}} \u4E2A\u7A7A\u724C\u7EC4"}},notice:{invalidSettingsRestored:"\u68C0\u6D4B\u5230\u65E0\u6548\u7684\u63D2\u4EF6\u8BBE\u7F6E\uFF0C\u5DF2\u5728\u5185\u5B58\u4E2D\u6062\u590D\u9ED8\u8BA4\u8BBE\u7F6E\u3002",failedSavePluginSettings:"\u4FDD\u5B58\u63D2\u4EF6\u8BBE\u7F6E\u5931\u8D25\u3002",noActiveMarkdownForSync:"\u5F53\u524D\u6CA1\u6709\u53EF\u7528\u4E8E\u540C\u6B65\u7684\u6D3B\u52A8 Markdown \u6587\u4EF6\u3002",syncUseCaseNotInitialized:"\u540C\u6B65\u7528\u4F8B\u5C1A\u672A\u521D\u59CB\u5316\u3002",currentFileSyncFailed:"\u5F53\u524D\u6587\u4EF6\u540C\u6B65\u5931\u8D25\u3002",vaultSyncFailed:"\u5168\u5E93\u540C\u6B65\u5931\u8D25\u3002",noActiveMarkdownForDeckTemplateInsertion:"\u5F53\u524D\u6CA1\u6709\u53EF\u7528\u4E8E\u63D2\u5165\u724C\u7EC4\u6A21\u677F\u7684\u6D3B\u52A8 Markdown \u6587\u4EF6\u3002",vaultGatewayNotInitialized:"Vault \u7F51\u5173\u5C1A\u672A\u521D\u59CB\u5316\u3002",markdownFileNotFound:"\u672A\u627E\u5230 Markdown \u6587\u4EF6\uFF1A{{filePath}}",deckTemplateAlreadyCurrent:"\u5F53\u524D\u6587\u4EF6\u4E2D\u7684\u724C\u7EC4\u6A21\u677F\u5DF2\u662F\u6700\u65B0\uFF0C\u65E0\u9700\u91CD\u590D\u5199\u5165\u3002",deckTemplateInserted:"\u5DF2\u5411\u5F53\u524D\u6587\u4EF6\u5199\u5165\u724C\u7EC4\u6A21\u677F\uFF1A{{deck}}",deckTemplateInsertionFailed:"\u63D2\u5165\u724C\u7EC4\u6A21\u677F\u5931\u8D25\u3002",noActiveMarkdownForReset:"\u5F53\u524D\u6CA1\u6709\u53EF\u7528\u4E8E\u91CD\u7F6E\u7684\u6D3B\u52A8 Markdown \u6587\u4EF6\u3002",clearCurrentFileUseCaseNotInitialized:"\u6E05\u7A7A\u5F53\u524D\u6587\u4EF6\u7528\u4F8B\u5C1A\u672A\u521D\u59CB\u5316\u3002",noTrackedCardsInCurrentFile:"\u5F53\u524D\u6587\u4EF6\u6CA1\u6709\u5DF2\u540C\u6B65\u5361\u7247\u3002",clearCurrentFileFailed:"\u6E05\u7A7A\u5F53\u524D\u6587\u4EF6\u5DF2\u540C\u6B65\u5361\u7247\u5931\u8D25\u3002",cleanupEmptyDecksUseCaseNotInitialized:"\u7A7A\u724C\u7EC4\u6E05\u7406\u7528\u4F8B\u5C1A\u672A\u521D\u59CB\u5316\u3002",noEmptyDeckCandidates:"\u672A\u53D1\u73B0\u53EF\u6E05\u7406\u7684\u7A7A\u724C\u7EC4\u3002",cleanupEmptyDecksCancelled:"\u5DF2\u53D6\u6D88\u7A7A\u724C\u7EC4\u6E05\u7406\u3002",cleanupEmptyDecksFailed:"\u6E05\u7406\u7A7A\u724C\u7EC4\u5931\u8D25\u3002",summary:{currentFileSync:"\u5F53\u524D\u6587\u4EF6\u540C\u6B65\u5B8C\u6210\uFF1A\u6587\u4EF6 {{scannedFiles}}\uFF0C\u5361\u7247 {{scannedCards}}\uFF0C\u65B0\u5EFA {{created}}\uFF0C\u91CD\u5EFA {{rebuilt}}\uFF0C\u66F4\u65B0 {{updated}}\uFF0C\u8FC1\u79FB\u6A21\u677F {{migratedNoteTypes}}\uFF0C\u8FC1\u79FB\u724C\u7EC4 {{migratedDecks}}\uFF0C\u5B64\u513F {{orphaned}}\uFF0C\u5A92\u4F53 {{uploadedMedia}}\uFF0C\u8DF3\u8FC7 {{skippedUnchangedCards}}\u3002",vaultSync:"\u5168\u5E93\u540C\u6B65\u5B8C\u6210\uFF1A\u6587\u4EF6 {{scannedFiles}}\uFF0C\u5361\u7247 {{scannedCards}}\uFF0C\u65B0\u5EFA {{created}}\uFF0C\u91CD\u5EFA {{rebuilt}}\uFF0C\u66F4\u65B0 {{updated}}\uFF0C\u8FC1\u79FB\u6A21\u677F {{migratedNoteTypes}}\uFF0C\u8FC1\u79FB\u724C\u7EC4 {{migratedDecks}}\uFF0C\u5B64\u513F {{orphaned}}\uFF0C\u5A92\u4F53 {{uploadedMedia}}\uFF0C\u8DF3\u8FC7 {{skippedUnchangedCards}}\u3002",clearCurrentFile:"\u5F53\u524D\u6587\u4EF6\u5DF2\u540C\u6B65\u5361\u7247\u6E05\u7A7A\u5B8C\u6210\uFF1A\u5DF2\u8DDF\u8E2A\u5361\u7247 {{trackedCards}}\uFF0C\u5DF2\u8DDF\u8E2A\u5206\u7EC4 {{trackedGroups}}\uFF0C\u5220\u9664\u7B14\u8BB0 {{deletedNotes}}\uFF0C\u79FB\u9664\u6807\u8BB0 {{removedMarkers}}\uFF0C\u79FB\u9664 ID \u6807\u8BB0 {{removedCardMarkers}}\uFF0C\u79FB\u9664 GI \u6807\u8BB0 {{removedGroupMarkers}}\uFF0C\u5220\u9664\u672C\u5730\u8BB0\u5F55 {{deletedLocalRecords}}\u3002",cleanupEmptyDecks:"\u7A7A\u724C\u7EC4\u6E05\u7406\u5B8C\u6210\uFF1A\u5019\u9009 {{candidateCount}}\uFF0C\u5DF2\u9009 {{selectedCount}}\uFF0C\u5DF2\u5220 {{deletedCount}}\uFF0C\u8DF3\u8FC7 {{skippedCount}}\u3002",markerWriteConflicts:"\u6807\u8BB0\u5199\u56DE\u51B2\u7A81\uFF1A{{files}}\u3002",warningsCount:"\u8B66\u544A\uFF1A{{count}}\u3002",markerRemovalConflicts:"\u6807\u8BB0\u79FB\u9664\u51B2\u7A81\uFF1A{{files}}\u3002",failures:"\u5931\u8D25\u9879\uFF1A{{items}}\u3002",skippedDecks:"\u8DF3\u8FC7\u7684\u724C\u7EC4\uFF1A{{decks}}\u3002"}},errors:{runScopeNotConfigured:"\u8FD0\u884C\u8303\u56F4\u5C1A\u672A\u914D\u7F6E\u3002\u5F53\u524D\u662F include \u6A21\u5F0F\uFF0C\u8BF7\u81F3\u5C11\u9009\u62E9\u4E00\u4E2A\u6587\u4EF6\u5939\u540E\u518D\u540C\u6B65\u3002",currentFileOutOfScope:"\u5F53\u524D\u6587\u4EF6\u4E0D\u5728\u63D2\u4EF6\u4F5C\u7528\u8303\u56F4\u5185\uFF1A{{filePath}}",deck:{emptyName:"\u724C\u7EC4\u4E0D\u80FD\u4E3A\u7A7A\uFF0C\u8BF7\u68C0\u67E5\u6587\u4EF6\u7EA7\u724C\u7EC4\u58F0\u660E\u6216\u9ED8\u8BA4\u724C\u7EC4\u8BBE\u7F6E\u3002"},settings:{headingLevelsRange:"\u6807\u9898\u5C42\u7EA7\u5FC5\u987B\u662F 1 \u5230 6 \u4E4B\u95F4\u7684\u6574\u6570\u3002",headingLevelsDifferent:"QA \u548C\u586B\u7A7A\u9898\u7684\u6807\u9898\u5C42\u7EA7\u5FC5\u987B\u4E0D\u540C\u3002",cardTypeConfigsObject:"\u5361\u7247\u7C7B\u578B\u914D\u7F6E\u5FC5\u987B\u662F\u5BF9\u8C61\u3002",cardTypeEnabledBoolean:"\u6BCF\u79CD\u5361\u7247\u7C7B\u578B\u7684\u542F\u7528\u72B6\u6001\u5FC5\u987B\u662F\u5E03\u5C14\u503C\u3002",cardTypeExtraMarkerString:"\u6BCF\u79CD\u5361\u7247\u7C7B\u578B\u7684\u989D\u5916\u6807\u8BB0\u5FC5\u987B\u662F\u5B57\u7B26\u4E32\u3002",cardTypeDefaultConflict:"\u540C\u4E00\u4E2A H{{headingLevel}} \u53EA\u80FD\u6709\u4E00\u4E2A\u542F\u7528\u7684\u9ED8\u8BA4\u5361\u7247\u7C7B\u578B\u3002",cardAnswerCutoffModeInvalid:"\u5361\u7247\u6B63\u6587\u622A\u6B62\u6A21\u5F0F\u53EA\u80FD\u662F heading-block \u6216 double-blank-lines\u3002",qaNoteTypeRequired:"QA \u7B14\u8BB0\u7C7B\u578B\u4E0D\u80FD\u4E3A\u7A7A\u3002",qaGroupMarkerRequired:"QA Group \u6807\u8BB0\u4E0D\u80FD\u4E3A\u7A7A\u3002",qaGroupMarkerInvalid:"QA Group \u6807\u8BB0\u5FC5\u987B\u662F\u7C7B\u4F3C #anki-list \u7684 hashtag \u6837\u5F0F token\u3002",clozeNoteTypeRequired:"\u586B\u7A7A\u9898\u7B14\u8BB0\u7C7B\u578B\u4E0D\u80FD\u4E3A\u7A7A\u3002",defaultDeckRequired:"\u9ED8\u8BA4\u724C\u7EC4\u4E0D\u80FD\u4E3A\u7A7A\u3002",fileDeckEnabledBoolean:"\u6587\u4EF6\u7EA7\u724C\u7EC4\u5F00\u5173\u5FC5\u987B\u662F\u5E03\u5C14\u503C\u3002",syncObsidianTagsToAnkiBoolean:"\u540C\u6B65 Obsidian \u6807\u7B7E\u5230 Anki \u5F00\u5173\u5FC5\u987B\u662F\u5E03\u5C14\u503C\u3002",keepPureTagLinesInCardBodyBoolean:"\u4FDD\u7559\u6B63\u6587\u7EAF\u6807\u7B7E\u884C\u5F00\u5173\u5FC5\u987B\u662F\u5E03\u5C14\u503C\u3002",fileDeckMarkerString:"\u6587\u4EF6\u7EA7\u724C\u7EC4\u8BC6\u522B\u540D\u5FC5\u987B\u662F\u5B57\u7B26\u4E32\u3002",fileDeckTemplateString:"\u6587\u4EF6\u7EA7\u724C\u7EC4\u6A21\u677F\u5FC5\u987B\u662F\u5B57\u7B26\u4E32\u3002",fileDeckInsertLocationInvalid:"\u6587\u4EF6\u7EA7\u724C\u7EC4\u6A21\u677F\u63D2\u5165\u4F4D\u7F6E\u53EA\u80FD\u662F yaml \u6216 body\u3002",folderDeckModeInvalid:"\u6587\u4EF6\u5939\u724C\u7EC4\u6A21\u5F0F\u53EA\u80FD\u662F off\u3001folder \u6216 folder-and-file\u3002",scopeModeInvalid:"\u8FD0\u884C\u8303\u56F4\u6A21\u5F0F\u53EA\u80FD\u662F all\u3001include \u6216 exclude\u3002",obsidianBacklinkPlacementInvalid:"Obsidian \u56DE\u94FE\u653E\u7F6E\u4F4D\u7F6E\u53EA\u80FD\u662F question-last-line\u3001answer-first-line \u6216 answer-last-line\u3002",includeFoldersArray:"\u5305\u542B\u6587\u4EF6\u5939\u5FC5\u987B\u662F\u6570\u7EC4\u3002",includeFoldersStrings:"\u5305\u542B\u6587\u4EF6\u5939\u5217\u8868\u4E2D\u53EA\u80FD\u5305\u542B\u5B57\u7B26\u4E32\u3002",excludeFoldersArray:"\u6392\u9664\u6587\u4EF6\u5939\u5FC5\u987B\u662F\u6570\u7EC4\u3002",excludeFoldersStrings:"\u6392\u9664\u6587\u4EF6\u5939\u5217\u8868\u4E2D\u53EA\u80FD\u5305\u542B\u5B57\u7B26\u4E32\u3002",alternateFolderDeckModeFoldersArray:"\u6587\u4EF6\u5939\u724C\u7EC4\u6A21\u5F0F\u8986\u76D6\u5217\u8868\u5FC5\u987B\u662F\u6570\u7EC4\u3002",alternateFolderDeckModeFoldersStrings:"\u6587\u4EF6\u5939\u724C\u7EC4\u6A21\u5F0F\u8986\u76D6\u5217\u8868\u4E2D\u53EA\u80FD\u5305\u542B\u5B57\u7B26\u4E32\u3002",ankiConnectUrlRequired:"AnkiConnect URL \u4E0D\u80FD\u4E3A\u7A7A\u3002",ankiNoteTypeCacheArray:"Anki \u7B14\u8BB0\u6A21\u677F\u7F13\u5B58\u5FC5\u987B\u662F\u6570\u7EC4\u3002",ankiNoteTypeCacheStrings:"Anki \u7B14\u8BB0\u6A21\u677F\u7F13\u5B58\u4E2D\u53EA\u80FD\u5305\u542B\u5B57\u7B26\u4E32\u3002",ankiModelFieldCacheObject:"Anki \u6A21\u677F\u5B57\u6BB5\u7F13\u5B58\u5FC5\u987B\u662F\u5BF9\u8C61\u3002",ankiModelFieldCacheEntryObject:"\u6BCF\u4E2A Anki \u6A21\u677F\u5B57\u6BB5\u7F13\u5B58\u9879\u90FD\u5FC5\u987B\u662F\u5BF9\u8C61\u3002",ankiModelFieldCacheFieldNamesArray:"Anki \u6A21\u677F\u5B57\u6BB5\u7F13\u5B58\u4E2D\u7684 fieldNames \u5FC5\u987B\u662F\u6570\u7EC4\u3002",ankiModelFieldCacheFieldNamesStrings:"Anki \u6A21\u677F\u5B57\u6BB5\u7F13\u5B58\u4E2D\u7684 fieldNames \u53EA\u80FD\u5305\u542B\u5B57\u7B26\u4E32\u3002",ankiModelFieldCacheLoadedAt:"Anki \u6A21\u677F\u5B57\u6BB5\u7F13\u5B58\u4E2D\u7684 loadedAt \u5FC5\u987B\u662F\u6709\u9650\u6570\u5B57\u3002",noteFieldMappingsObject:"\u5B57\u6BB5\u6620\u5C04\u5FC5\u987B\u662F\u5BF9\u8C61\u3002",noteFieldMappingsCardType:"\u5B57\u6BB5\u6620\u5C04\u5FC5\u987B\u4F7F\u7528\u53D7\u652F\u6301\u7684\u5361\u7247\u7C7B\u578B\u3002",noteFieldMappingsModelName:"\u5B57\u6BB5\u6620\u5C04\u5FC5\u987B\u5305\u542B\u6A21\u578B\u540D\u79F0\u3002",noteFieldMappingsLoadedFieldNames:"\u5B57\u6BB5\u6620\u5C04\u5FC5\u987B\u5305\u542B\u5DF2\u52A0\u8F7D\u5B57\u6BB5\u540D\u3002",noteFieldMappingsLoadedAt:"\u5B57\u6BB5\u6620\u5C04\u5FC5\u987B\u5305\u542B\u5DF2\u52A0\u8F7D\u65F6\u95F4\u6233\u3002",noteFieldMappingsQaGroupSlotsArray:"QA Group \u5B57\u6BB5\u6620\u5C04\u4E2D\u7684 slots \u5FC5\u987B\u662F\u6570\u7EC4\u3002",noteFieldMappingsQaGroupSlotObject:"QA Group \u5B57\u6BB5\u6620\u5C04\u4E2D\u7684\u6BCF\u4E2A slot \u90FD\u5FC5\u987B\u662F\u5BF9\u8C61\u3002",noteFieldMappingsQaGroupSlotIndex:"QA Group \u5B57\u6BB5\u6620\u5C04\u4E2D\u7684 slot.index \u5FC5\u987B\u662F\u5927\u4E8E 0 \u7684\u6574\u6570\u3002",noteFieldMappingsQaGroupSlotQuestionField:"QA Group \u5B57\u6BB5\u6620\u5C04\u4E2D\u7684 slot.questionField \u5FC5\u987B\u662F\u5B57\u7B26\u4E32\u3002",noteFieldMappingsQaGroupSlotAnswerField:"QA Group \u5B57\u6BB5\u6620\u5C04\u4E2D\u7684 slot.answerField \u5FC5\u987B\u662F\u5B57\u7B26\u4E32\u3002",noteFieldMappingsQaGroupWarningsArray:"QA Group \u5B57\u6BB5\u6620\u5C04\u4E2D\u7684 warnings \u5FC5\u987B\u662F\u6570\u7EC4\u3002",noteFieldMappingsQaGroupWarningsStrings:"QA Group \u5B57\u6BB5\u6620\u5C04\u4E2D\u7684 warnings \u53EA\u80FD\u5305\u542B\u5B57\u7B26\u4E32\u3002",noteFieldMappingsQaGroupAcceptedWarningsArray:"QA Group \u5B57\u6BB5\u6620\u5C04\u4E2D\u7684 acceptedWarnings \u5FC5\u987B\u662F\u6570\u7EC4\u3002",noteFieldMappingsQaGroupAcceptedWarningsStrings:"QA Group \u5B57\u6BB5\u6620\u5C04\u4E2D\u7684 acceptedWarnings \u53EA\u80FD\u5305\u542B\u5B57\u7B26\u4E32\u3002",noteFieldMappingsQaGroupDerivationObject:"QA Group \u5B57\u6BB5\u6620\u5C04\u4E2D\u7684 derivation \u5FC5\u987B\u662F\u5BF9\u8C61\u3002",noteFieldMappingsQaGroupDerivationMode:"QA Group \u5B57\u6BB5\u6620\u5C04\u4E2D\u7684 derivation.mode \u53EA\u80FD\u662F first-pair\u3002",noteFieldMappingsQaGroupDerivationFirstQuestionField:"QA Group \u5B57\u6BB5\u6620\u5C04\u4E2D\u7684 derivation.firstQuestionField \u5FC5\u987B\u662F\u5B57\u7B26\u4E32\u3002",noteFieldMappingsQaGroupDerivationFirstAnswerField:"QA Group \u5B57\u6BB5\u6620\u5C04\u4E2D\u7684 derivation.firstAnswerField \u5FC5\u987B\u662F\u5B57\u7B26\u4E32\u3002"},noteFieldMapping:{noteTypeNotSelected:{basic:"\u57FA\u7840\u5361\u5C1A\u672A\u9009\u62E9 Anki \u7B14\u8BB0\u6A21\u677F\u3002\u8BF7\u5148\u5728\u8BBE\u7F6E\u9875\u9009\u62E9\u6A21\u677F\u540E\u518D\u540C\u6B65\u3002",cloze:"\u586B\u7A7A\u9898\u5C1A\u672A\u9009\u62E9 Anki \u7B14\u8BB0\u6A21\u677F\u3002\u8BF7\u5148\u5728\u8BBE\u7F6E\u9875\u9009\u62E9\u6A21\u677F\u540E\u518D\u540C\u6B65\u3002",qaGroup:"\u95EE\u7B54\u9898\uFF08\u591A\u7EA7\u5217\u8868\uFF09\u5C1A\u672A\u9009\u62E9 Anki \u7B14\u8BB0\u6A21\u677F\u3002\u8BF7\u5148\u5728\u8BBE\u7F6E\u9875\u9009\u62E9\u6A21\u677F\u540E\u518D\u540C\u6B65\u3002"},missingSavedMapping:{basic:'\u627E\u4E0D\u5230\u57FA\u7840\u5361\u7B14\u8BB0\u7C7B\u578B "{{modelName}}" \u7684\u5DF2\u4FDD\u5B58\u5B57\u6BB5\u6620\u5C04\u3002\u8BF7\u6253\u5F00\u63D2\u4EF6\u8BBE\u7F6E\u5E76\u5148\u4ECE Anki \u8BFB\u53D6\u5B57\u6BB5\u3002',cloze:'\u627E\u4E0D\u5230\u586B\u7A7A\u9898\u7B14\u8BB0\u7C7B\u578B "{{modelName}}" \u7684\u5DF2\u4FDD\u5B58\u5B57\u6BB5\u6620\u5C04\u3002\u8BF7\u6253\u5F00\u63D2\u4EF6\u8BBE\u7F6E\u5E76\u5148\u4ECE Anki \u8BFB\u53D6\u5B57\u6BB5\u3002',qaGroup:'\u627E\u4E0D\u5230\u95EE\u7B54\u9898\uFF08\u591A\u7EA7\u5217\u8868\uFF09\u7B14\u8BB0\u6A21\u677F "{{modelName}}" \u7684\u5DF2\u4FDD\u5B58\u5B57\u6BB5\u6620\u5C04\u3002\u8BF7\u5148\u5728\u8BBE\u7F6E\u9875\u4ECE Anki \u8BFB\u53D6\u5B57\u6BB5\u5E76\u4FDD\u5B58\u6620\u5C04\u3002'},incompleteSavedMapping:{basic:'\u57FA\u7840\u5361\u7B14\u8BB0\u7C7B\u578B "{{modelName}}" \u7684\u5DF2\u4FDD\u5B58\u5B57\u6BB5\u6620\u5C04\u4E0D\u5B8C\u6574\u3002\u8BF7\u6253\u5F00\u63D2\u4EF6\u8BBE\u7F6E\u5E76\u4FDD\u5B58\u6807\u9898\u5B57\u6BB5\u548C\u6B63\u6587\u5B57\u6BB5\u3002',cloze:'\u586B\u7A7A\u9898\u7B14\u8BB0\u7C7B\u578B "{{modelName}}" \u7684\u5DF2\u4FDD\u5B58\u5B57\u6BB5\u6620\u5C04\u4E0D\u5B8C\u6574\u3002\u8BF7\u6253\u5F00\u63D2\u4EF6\u8BBE\u7F6E\u5E76\u4FDD\u5B58\u4E3B\u5B57\u6BB5\u3002'},titleBodyMustDiffer:{basic:'\u57FA\u7840\u5361\u7B14\u8BB0\u7C7B\u578B "{{modelName}}" \u7684\u6807\u9898\u5B57\u6BB5\u548C\u6B63\u6587\u5B57\u6BB5\u5FC5\u987B\u4E0D\u540C\u3002'},stale:'\u7B14\u8BB0\u7C7B\u578B "{{modelName}}" \u7684\u5DF2\u4FDD\u5B58\u5B57\u6BB5\u6620\u5C04\u5DF2\u8FC7\u671F\uFF0C\u56E0\u4E3A\u8FD9\u4E9B\u5B57\u6BB5\u5728 Anki \u4E2D\u5DF2\u4E0D\u5B58\u5728\uFF1A{{fields}}\u3002\u8BF7\u91CD\u65B0\u4ECE Anki \u8BFB\u53D6\u5B57\u6BB5\u3002',qaGroupMissingTitle:'\u95EE\u7B54\u9898\uFF08\u591A\u7EA7\u5217\u8868\uFF09\u7B14\u8BB0\u6A21\u677F "{{modelName}}" \u7684\u5DF2\u4FDD\u5B58\u5B57\u6BB5\u6620\u5C04\u4E0D\u5B8C\u6574\uFF0C\u7F3A\u5C11\u6807\u9898\u5B57\u6BB5\u3002\u8BF7\u5728\u8BBE\u7F6E\u9875\u91CD\u65B0\u4FDD\u5B58\u5B57\u6BB5\u6620\u5C04\u3002',qaGroupNoCompleteSlots:'\u95EE\u7B54\u9898\uFF08\u591A\u7EA7\u5217\u8868\uFF09\u7B14\u8BB0\u6A21\u677F "{{modelName}}" \u7684\u5DF2\u4FDD\u5B58\u5B57\u6BB5\u6620\u5C04\u4E0D\u5B8C\u6574\uFF0C\u81F3\u5C11\u9700\u8981\u4E00\u7EC4\u95EE\u9898/\u7B54\u6848\u5B57\u6BB5\u3002\u8BF7\u5728\u8BBE\u7F6E\u9875\u91CD\u65B0\u4FDD\u5B58\u5B57\u6BB5\u6620\u5C04\u3002',qaGroupNonContinuousSlots:'\u95EE\u7B54\u9898\uFF08\u591A\u7EA7\u5217\u8868\uFF09\u7B14\u8BB0\u6A21\u677F "{{modelName}}" \u7684\u7B2C\u4E00\u7EC4\u95EE\u9898/\u7B54\u6848\u5B57\u6BB5\u4E0D\u662F\u4ECE\u7B2C {{firstIndex}} \u7EC4\u5F00\u59CB\u8FDE\u7EED\u7F16\u53F7\u3002\u8BF7\u4ECE\u7B2C 1 \u7EC4\u5F00\u59CB\u3002',qaGroupSelectedFieldMissing:'\u95EE\u7B54\u9898\uFF08\u591A\u7EA7\u5217\u8868\uFF09\u7B14\u8BB0\u6A21\u677F "{{modelName}}" \u4E2D\u5DF2\u9009\u62E9\u5B57\u6BB5 "{{field}}"\uFF0C\u4F46\u5B83\u5F53\u524D\u4E0D\u5728 Anki \u5B57\u6BB5\u5217\u8868\u91CC\u3002\u8BF7\u91CD\u65B0\u8BFB\u53D6\u5B57\u6BB5\u540E\u518D\u4FDD\u5B58\u3002',qaGroupDuplicateFields:'\u95EE\u7B54\u9898\uFF08\u591A\u7EA7\u5217\u8868\uFF09\u7B14\u8BB0\u6A21\u677F "{{modelName}}" \u7684\u9898\u76EE\u5B57\u6BB5\u3001\u95EE\u9898\u5B57\u6BB5\u548C\u7B54\u6848\u5B57\u6BB5\u4E0D\u80FD\u91CD\u590D\u3002',qaGroupFirstPairNumberMismatch:'\u95EE\u7B54\u9898\uFF08\u591A\u7EA7\u5217\u8868\uFF09\u7B14\u8BB0\u6A21\u677F "{{modelName}}" \u7684\u9996\u4E2A\u95EE\u9898\u5B57\u6BB5 "{{questionField}}" \u4E0E\u9996\u4E2A\u7B54\u6848\u5B57\u6BB5 "{{answerField}}" \u7F16\u53F7\u4E0D\u4E00\u81F4\u3002\u8BF7\u9009\u62E9\u540C\u4E00\u7EC4\u5B57\u6BB5\u3002',qaGroupFirstPairMustStartAtOne:'\u95EE\u7B54\u9898\uFF08\u591A\u7EA7\u5217\u8868\uFF09\u7B14\u8BB0\u6A21\u677F "{{modelName}}" \u7684\u9996\u7EC4\u5B57\u6BB5\u5FC5\u987B\u4ECE\u7B2C 1 \u7EC4\u5F00\u59CB\uFF0C\u5F53\u524D\u662F\u7B2C {{firstIndex}} \u7EC4\u3002',qaGroupWarningsUnaccepted:'\u95EE\u7B54\u9898\uFF08\u591A\u7EA7\u5217\u8868\uFF09\u7B14\u8BB0\u6A21\u677F "{{modelName}}" \u4ECD\u6709\u672A\u786E\u8BA4\u7684\u5B57\u6BB5\u8B66\u544A\u3002\u8BF7\u5148\u5728\u8BBE\u7F6E\u9875\u786E\u8BA4\u540E\u518D\u540C\u6B65\u3002',qaGroupSlotCapacityExceeded:'\u95EE\u7B54\u9898\uFF08\u591A\u7EA7\u5217\u8868\uFF09\u7B14\u8BB0\u6A21\u677F "{{modelName}}" \u7684\u5DF2\u4FDD\u5B58\u5B57\u6BB5\u6620\u5C04\u53EA\u5305\u542B {{capacity}} \u7EC4\u95EE\u9898/\u7B54\u6848\u5B57\u6BB5\uFF0C\u4F46\u5F53\u524D\u5757\u6709 {{itemCount}} \u9879\uFF1A{{filePath}}:{{blockStartLine}}\u3002'},noteTypeMigration:{failed:"\u65E0\u6CD5\u5C06 Anki \u7B14\u8BB0 {{noteId}} \u4ECE\u201C{{fromModel}}\u201D\u8FC1\u79FB\u5230\u201C{{toModel}}\u201D{{location}}\uFF1A{{reason}}",unsupported:"\u5F53\u524D AnkiConnect \u4E0D\u652F\u6301\u5C06 Anki \u7B14\u8BB0 {{noteId}} \u4ECE\u201C{{fromModel}}\u201D\u8FC1\u79FB\u5230\u201C{{toModel}}\u201D{{location}}\u3002\u8BF7\u5347\u7EA7 AnkiConnect\uFF0C\u6216\u6E05\u7406\u8BE5\u5361\u7247\u7684 Anki ID \u540E\u91CD\u65B0\u540C\u6B65\u3002\u539F\u56E0\uFF1A{{reason}}"},writeBack:{summary:"Markdown \u6807\u8BB0\u5199\u56DE\u5931\u8D25\uFF0C\u5171 {{fileCount}} \u4E2A\u6587\u4EF6\u3002",markdownFileNotFound:"Markdown \u6587\u4EF6\u4E0D\u5B58\u5728\u3002",missingSourceContent:"\u7F3A\u5C11\u7528\u4E8E\u5199\u56DE\u6807\u8BB0\u7684\u626B\u63CF\u6E90\u7801\u5185\u5BB9\u3002",noteIdMissing:"\u65E0\u6CD5\u4E3A\u7B2C {{blockStartLine}} \u884C\u6240\u5728\u5757\u5199\u5165\u6807\u8BB0\uFF0C\u56E0\u4E3A\u7F3A\u5C11 note ID\u3002"},markerRemoval:{markdownFileNotFound:"Markdown \u6587\u4EF6\u4E0D\u5B58\u5728\u3002"}},warnings:{deck:{conflictYamlBody:"\u68C0\u6D4B\u5230 YAML \u548C\u6B63\u6587\u4E2D\u7684 {{marker}} \u58F0\u660E\u4E92\u76F8\u51B2\u7A81\uFF0C\u672C\u6B21\u540C\u6B65\u5DF2\u4F7F\u7528 YAML \u7684\u503C\u3002",multipleBodyDeclarations:"\u68C0\u6D4B\u5230\u6587\u4EF6\u4E2D\u5B58\u5728\u591A\u4E2A {{marker}} \u58F0\u660E\uFF0C\u672C\u6B21\u540C\u6B65\u53EA\u4F7F\u7528\u7B2C\u4E00\u4E2A\u6B63\u6587\u58F0\u660E\u3002",invalidFolderSegment:"\u68C0\u6D4B\u5230\u6587\u4EF6\u5939\u540D\u6216\u6587\u4EF6\u540D\u5305\u542B ::\uFF0C\u5DF2\u8DF3\u8FC7\u6587\u4EF6\u5939\u6620\u5C04\u5E76\u56DE\u9000\u5230\u9ED8\u8BA4\u724C\u7EC4\u3002",fallbackDefault:"\u8BE5\u6587\u4EF6\u6CA1\u6709\u663E\u5F0F\u724C\u7EC4\uFF0C\u4E14\u65E0\u6CD5\u751F\u6210\u6587\u4EF6\u5939\u6620\u5C04\u724C\u7EC4\uFF0C\u5DF2\u56DE\u9000\u5230\u9ED8\u8BA4\u724C\u7EC4\u3002"}}};function ii(e,t){let n=t.split("."),r=e;for(let i of n){if(!r||typeof r!="object"||!(i in r))return;r=r[i]}return typeof r=="string"?r:void 0}function Fo(e,t,n){return t?e.replace(/\{\{\s*([\w.]+)\s*\}\}/g,(r,i)=>{let a=t[i];return a===void 0?"":Array.isArray(a)?de(n,a.filter(o=>o!==void 0).map(o=>String(o))):String(a)}):e}function g(e,t){let n=se(),i=ii(n==="zh"?ri:An,e)??ii(An,e)??e;return Fo(i,t,n)}var S=class extends Error{constructor(t,n,r){super(t),this.name="PluginUserError",this.userMessage={key:t,params:n},this.details=r}};function En(e){return e instanceof S}function Le(e){return"rawMessage"in e?e.rawMessage:g(e.key,e.params)}function ai(e){return"rawMessage"in e?e.rawMessage:g(e.key,e.params)}function lt(e){let t=Le(e.userMessage);if(!e.details?.failures?.length)return t;let n=e.details.failures.map(r=>`${r.filePath}: ${ai(r)}`).join(` `);return`${t} ${n}`}function ye(e,t,n){return En(e)?e.userMessage:e instanceof Error?{rawMessage:e.message}:{key:t,params:n}}function xe(e,t){return En(e)?lt(e):Le(ye(e,t))}function pt(e,t){return En(t)?{filePath:e,...t.userMessage}:t instanceof Error?{filePath:e,rawMessage:t.message}:{filePath:e,rawMessage:String(t)}}function oi(e){let t=se();return de(t,e.map(n=>`${n.filePath} (${ai(n)})`))}var Mo=["\u9898\u76EE","\u6807\u9898","\u6B63\u9762","Stem","Title"],wo=[/^问题0*(\d+)$/i,/^Q0*(\d+)$/i,/^S0*(\d+)_Q$/i],vo=[/^答案0*(\d+)$/i,/^A0*(\d+)$/i,/^S0*(\d+)_A$/i],ce=class{suggest(t,n,r=Date.now(),i,a){let o=a&&n.includes(a)?a:Do(n,Mo),u=To(n,t);return this.createMappingFromSelection(t,n,{titleField:o,firstQuestionField:u.questionField,firstAnswerField:u.answerField},r)}createMappingFromSelection(t,n,r,i=Date.now()){let a=[...n],o=_n(r.titleField),u=_n(r.firstQuestionField),s=_n(r.firstAnswerField),d=Eo(u,s),c=new Set(a);for(let l of[o,u,s])if(l&&!c.has(l))throw new S("errors.noteFieldMapping.qaGroupSelectedFieldMissing",{modelName:t,field:l});return{cardType:"qa-group",modelName:t,loadedFieldNames:a,titleField:o,slots:Ao(t,a,o,u,s),warnings:[],acceptedWarnings:void 0,derivation:d,loadedAt:i}}validateMapping(t,n){if(!t.titleField)throw new S("errors.noteFieldMapping.qaGroupMissingTitle",{modelName:t.modelName});if(t.slots.length===0)throw new S("errors.noteFieldMapping.qaGroupNoCompleteSlots",{modelName:t.modelName});let r=new Set(n),i=new Set,a=new Set([t.titleField]);r.has(t.titleField)||i.add(t.titleField);for(let o of t.slots){if(r.has(o.questionField)||i.add(o.questionField),r.has(o.answerField)||i.add(o.answerField),a.has(o.questionField)||a.has(o.answerField)||o.questionField===o.answerField)throw new S("errors.noteFieldMapping.qaGroupDuplicateFields",{modelName:t.modelName});a.add(o.questionField),a.add(o.answerField)}if(i.size>0)throw new S("errors.noteFieldMapping.stale",{modelName:t.modelName,fields:[...i].map(o=>`"${o}"`)})}validateWarningsAccepted(t){if(!(!t.warnings.length||Ln(t.warnings,t.acceptedWarnings)))throw new S("errors.noteFieldMapping.qaGroupWarningsUnaccepted",{modelName:t.modelName})}};function Ln(e,t){return e.length===0?!0:!t||e.length!==t.length?!1:e.every((n,r)=>n===t[r])}function ci(e){try{let t=JSON.parse(e);return t.kind!=="missing-answer"&&t.kind!=="missing-question"||typeof t.index!="number"||!Number.isInteger(t.index)||t.index<1||typeof t.questionField!="string"||typeof t.answerField!="string"?void 0:{kind:t.kind,index:t.index,questionField:t.questionField,answerField:t.answerField}}catch{return}}function To(e,t){let n=new Map,r=new Map;for(let u of e){let s=ui(u,wo);if(s&&!n.has(s)){n.set(s,u);continue}let d=ui(u,vo);d&&!r.has(d)&&r.set(d,u)}let i=[...new Set([...n.keys(),...r.keys()])].sort((u,s)=>u-s);if(i.length>0&&i[0]!==1)throw new S("errors.noteFieldMapping.qaGroupNonContinuousSlots",{modelName:t,firstIndex:i[0]});let a=n.get(1),o=r.get(1);if(!a||!o)throw new S("errors.noteFieldMapping.qaGroupNoCompleteSlots",{modelName:t});return{questionField:a,answerField:o}}function ui(e,t){for(let n of t){let r=e.match(n);if(!r)continue;let i=Number.parseInt(r[1]??"",10);if(Number.isInteger(i)&&i>=1)return i}}function Do(e,t){return e.find(n=>t.some(r=>r.toLowerCase()===n.toLowerCase()))}function Ao(e,t,n,r,i){if(!r||!i)return[];let a=new Set;if(n&&a.add(n),a.has(r)||a.has(i)||r===i)throw new S("errors.noteFieldMapping.qaGroupDuplicateFields",{modelName:e});let o=si(r),u=si(i);if(!o||!u)return[{index:1,questionField:r,answerField:i}];if(o.index!==u.index)throw new S("errors.noteFieldMapping.qaGroupFirstPairNumberMismatch",{modelName:e,questionField:r,answerField:i});if(o.index!==1)throw new S("errors.noteFieldMapping.qaGroupFirstPairMustStartAtOne",{modelName:e,firstIndex:o.index});let s=new Set(t),d=[];for(let c=1;;c+=1){let l=c===1?r:di(o,c),f=c===1?i:di(u,c);if(!s.has(l)||!s.has(f))break;if(a.has(l)||a.has(f)||l===f)throw new S("errors.noteFieldMapping.qaGroupDuplicateFields",{modelName:e});a.add(l),a.add(f),d.push({index:c,questionField:l,answerField:f})}return d}function Eo(e,t){if(!(!e&&!t))return{mode:"first-pair",firstQuestionField:e,firstAnswerField:t}}function _n(e){let t=e?.trim();return t||void 0}function si(e){let t=[...e.matchAll(/\d+/g)],n=t[t.length-1];if(!(!n||n.index===void 0))return{prefix:e.slice(0,n.index),digits:n[0],suffix:e.slice(n.index+n[0].length),index:Number.parseInt(n[0],10)}}function di(e,t){return`${e.prefix}${String(t).padStart(e.digits.length,"0")}${e.suffix}`}var Bn=["basic","qa-group","cloze","cloze-all"],Ke="Open in Obsidian",Nn=4,li=5,Ze=4,gi="",Pn="",_o="",Rn="#anki-cloze",Lo="#anki-cloze-all",mi="#anki-list",Io=new ce,H={qaHeadingLevel:Nn,clozeHeadingLevel:Ze,cardAnswerCutoffMode:"heading-block",qaGroupMarker:mi,qaNoteType:gi,clozeNoteType:Pn,cardTypeConfigs:ki(),noteFieldMappings:{},ankiNoteTypeCache:[],ankiModelFieldCache:{},defaultDeck:"Obsidian",fileDeckEnabled:!1,fileDeckMarker:"TARGET DECK",fileDeckTemplate:"obsidian::filename",fileDeckInsertLocation:"body",folderDeckMode:"folder-and-file",scopeMode:"include",includeFolders:[],excludeFolders:[],alternateFolderDeckModeFolders:[],addObsidianBacklink:!0,obsidianBacklinkLabel:Ke,obsidianBacklinkPlacement:"answer-last-line",convertHighlightsToCloze:!0,syncObsidianTagsToAnki:!0,keepPureTagLinesInCardBody:!0,ankiConnectUrl:"http://127.0.0.1:8765"};function No(e){if(typeof e!="string")return Ke;let t=e.trim();return t.length>0?t:Ke}function Ce(e){let t=bi(e.cardTypeConfigs,e),n=Oo(t),r={...e,...n,cardTypeConfigs:t,noteFieldMappings:xi(e.noteFieldMappings),ankiNoteTypeCache:Qo(e.ankiNoteTypeCache),ankiModelFieldCache:Vo(e.ankiModelFieldCache),obsidianBacklinkLabel:No(e.obsidianBacklinkLabel)};return{...r,noteFieldMappings:Wo(r)}}function hi(e){let t=e??{},n=bi(t.cardTypeConfigs,t);return Ce({...H,...t,cardTypeConfigs:n,noteFieldMappings:xi(t.noteFieldMappings??H.noteFieldMappings),ankiModelFieldCache:t.ankiModelFieldCache??H.ankiModelFieldCache,includeFolders:t.includeFolders??H.includeFolders,excludeFolders:t.excludeFolders??H.excludeFolders,alternateFolderDeckModeFolders:t.alternateFolderDeckModeFolders??H.alternateFolderDeckModeFolders})}function pe(e){if(Bo(e.cardTypeConfigs),e.cardAnswerCutoffMode!=="heading-block"&&e.cardAnswerCutoffMode!=="double-blank-lines")throw new S("errors.settings.cardAnswerCutoffModeInvalid");if(Go(e.noteFieldMappings),Po(e.ankiNoteTypeCache),Ro(e.ankiModelFieldCache),!e.defaultDeck.trim())throw new S("errors.settings.defaultDeckRequired");if(typeof e.fileDeckEnabled!="boolean")throw new S("errors.settings.fileDeckEnabledBoolean");if(typeof e.syncObsidianTagsToAnki!="boolean")throw new S("errors.settings.syncObsidianTagsToAnkiBoolean");if(typeof e.keepPureTagLinesInCardBody!="boolean")throw new S("errors.settings.keepPureTagLinesInCardBodyBoolean");if(typeof e.fileDeckMarker!="string")throw new S("errors.settings.fileDeckMarkerString");if(typeof e.fileDeckTemplate!="string")throw new S("errors.settings.fileDeckTemplateString");if(e.fileDeckInsertLocation!=="yaml"&&e.fileDeckInsertLocation!=="body")throw new S("errors.settings.fileDeckInsertLocationInvalid");if(e.folderDeckMode!=="off"&&e.folderDeckMode!=="folder"&&e.folderDeckMode!=="folder-and-file")throw new S("errors.settings.folderDeckModeInvalid");if(e.scopeMode!=="all"&&e.scopeMode!=="include"&&e.scopeMode!=="exclude")throw new S("errors.settings.scopeModeInvalid");if(e.obsidianBacklinkPlacement!=="question-last-line"&&e.obsidianBacklinkPlacement!=="answer-first-line"&&e.obsidianBacklinkPlacement!=="answer-last-line")throw new S("errors.settings.obsidianBacklinkPlacementInvalid");if(In(e.includeFolders,"include"),In(e.excludeFolders,"exclude"),In(e.alternateFolderDeckModeFolders,"alternateFolderDeckMode"),!e.ankiConnectUrl.trim())throw new S("errors.settings.ankiConnectUrlRequired")}function gt(e,t){return e!=="include"?!0:t.some(n=>n.trim().length>0)}function Po(e){if(!Array.isArray(e))throw new S("errors.settings.ankiNoteTypeCacheArray");for(let t of e)if(typeof t!="string")throw new S("errors.settings.ankiNoteTypeCacheStrings")}function Ro(e){if(!e||typeof e!="object"||Array.isArray(e))throw new S("errors.settings.ankiModelFieldCacheObject");for(let t of Object.values(e)){if(!t||typeof t!="object"||Array.isArray(t))throw new S("errors.settings.ankiModelFieldCacheEntryObject");if(!Array.isArray(t.fieldNames))throw new S("errors.settings.ankiModelFieldCacheFieldNamesArray");for(let n of t.fieldNames)if(typeof n!="string")throw new S("errors.settings.ankiModelFieldCacheFieldNamesStrings");if(!Number.isFinite(t.loadedAt))throw new S("errors.settings.ankiModelFieldCacheLoadedAt")}}function In(e,t){if(!Array.isArray(e))throw t==="include"?new S("errors.settings.includeFoldersArray"):t==="exclude"?new S("errors.settings.excludeFoldersArray"):new S("errors.settings.alternateFolderDeckModeFoldersArray");for(let n of e)if(typeof n!="string")throw t==="include"?new S("errors.settings.includeFoldersStrings"):t==="exclude"?new S("errors.settings.excludeFoldersStrings"):new S("errors.settings.alternateFolderDeckModeFoldersStrings")}function Bo(e){if(!e||typeof e!="object"||Array.isArray(e))throw new S("errors.settings.cardTypeConfigsObject");let t=new Map;for(let n of Bn){let r=e[n];if(!r||typeof r!="object"||Array.isArray(r))throw new S("errors.settings.cardTypeConfigsObject");if(typeof r.enabled!="boolean")throw new S("errors.settings.cardTypeEnabledBoolean");if(!Number.isInteger(r.headingLevel)||r.headingLevel<1||r.headingLevel>6)throw new S("errors.settings.headingLevelsRange");if(typeof r.extraMarker!="string")throw new S("errors.settings.cardTypeExtraMarkerString");if(!r.enabled||r.extraMarker.trim().length>0)continue;let i=t.get(r.headingLevel)??[];i.push(n),t.set(r.headingLevel,i)}for(let[n,r]of t.entries())if(r.length>1)throw new S("errors.settings.cardTypeDefaultConflict",{headingLevel:n})}function Go(e){if(!e||typeof e!="object"||Array.isArray(e))throw new S("errors.settings.noteFieldMappingsObject");for(let t of Object.values(e)){if(t.cardType!=="basic"&&t.cardType!=="qa-group"&&t.cardType!=="cloze")throw new S("errors.settings.noteFieldMappingsCardType");if(!t.modelName.trim())throw new S("errors.settings.noteFieldMappingsModelName");if(!Array.isArray(t.loadedFieldNames))throw new S("errors.settings.noteFieldMappingsLoadedFieldNames");if(!Number.isFinite(t.loadedAt))throw new S("errors.settings.noteFieldMappingsLoadedAt");if(O(t)){if(!Array.isArray(t.slots))throw new S("errors.settings.noteFieldMappingsQaGroupSlotsArray");for(let n of t.slots){if(!n||typeof n!="object"||Array.isArray(n))throw new S("errors.settings.noteFieldMappingsQaGroupSlotObject");if(!Number.isInteger(n.index)||n.index<1)throw new S("errors.settings.noteFieldMappingsQaGroupSlotIndex");if(typeof n.questionField!="string")throw new S("errors.settings.noteFieldMappingsQaGroupSlotQuestionField");if(typeof n.answerField!="string")throw new S("errors.settings.noteFieldMappingsQaGroupSlotAnswerField")}if(fi(t.warnings,"errors.settings.noteFieldMappingsQaGroupWarningsArray","errors.settings.noteFieldMappingsQaGroupWarningsStrings"),fi(t.acceptedWarnings,"errors.settings.noteFieldMappingsQaGroupAcceptedWarningsArray","errors.settings.noteFieldMappingsQaGroupAcceptedWarningsStrings",!0),t.derivation!==void 0){if(!t.derivation||typeof t.derivation!="object"||Array.isArray(t.derivation))throw new S("errors.settings.noteFieldMappingsQaGroupDerivationObject");if(t.derivation.mode!=="first-pair")throw new S("errors.settings.noteFieldMappingsQaGroupDerivationMode");if(t.derivation.firstQuestionField!==void 0&&typeof t.derivation.firstQuestionField!="string")throw new S("errors.settings.noteFieldMappingsQaGroupDerivationFirstQuestionField");if(t.derivation.firstAnswerField!==void 0&&typeof t.derivation.firstAnswerField!="string")throw new S("errors.settings.noteFieldMappingsQaGroupDerivationFirstAnswerField")}}}}function ki(){return{basic:{enabled:!0,headingLevel:Nn,extraMarker:"",noteType:gi},"qa-group":{enabled:!0,headingLevel:Nn,extraMarker:mi,noteType:""},cloze:{enabled:!0,headingLevel:Ze,extraMarker:Rn,noteType:Pn},"cloze-all":{enabled:!0,headingLevel:Ze,extraMarker:Lo,noteType:Pn}}}function qo(e){let t=ki();return{basic:{...t.basic,headingLevel:Ve(e.qaHeadingLevel,t.basic.headingLevel),noteType:je(e.qaNoteType,t.basic.noteType)},"qa-group":{...t["qa-group"],headingLevel:Ve(e.qaHeadingLevel,t["qa-group"].headingLevel),extraMarker:yi(e.qaGroupMarker,t["qa-group"].extraMarker),noteType:je(e.cardTypeConfigs?.["qa-group"]?.noteType,t["qa-group"].noteType)},cloze:{...t.cloze,headingLevel:Ve(e.clozeHeadingLevel,t.cloze.headingLevel),noteType:je(e.clozeNoteType,t.cloze.noteType)},"cloze-all":{...t["cloze-all"],headingLevel:Ve(e.clozeHeadingLevel,t["cloze-all"].headingLevel),noteType:je(e.clozeNoteType,t["cloze-all"].noteType)}}}function bi(e,t){let n=qo(t),r={};for(let i of Bn){let a=e?.[i],o=n[i],u=a&&typeof a=="object"&&!Array.isArray(a)?{...o,...a}:o,s={enabled:typeof u.enabled=="boolean"?u.enabled:o.enabled,headingLevel:Ve(u.headingLevel,o.headingLevel),extraMarker:yi(u.extraMarker,o.extraMarker),noteType:je(u.noteType,o.noteType)};r[i]=i==="cloze"?zo(s,a,t):s}return r["cloze-all"]={...r["cloze-all"],noteType:r.cloze.noteType},r}function zo(e,t,n){return e.headingLevel===li&&e.extraMarker===_o?{...e,headingLevel:Ze,extraMarker:Rn}:!Ho(t)&&n.clozeHeadingLevel===li?{...e,headingLevel:Ze,extraMarker:Rn}:e}function Ho(e){return!e||typeof e!="object"||Array.isArray(e)?!1:"headingLevel"in e||"extraMarker"in e}function Oo(e){return{qaHeadingLevel:e.basic.headingLevel,clozeHeadingLevel:e.cloze.headingLevel,qaGroupMarker:e["qa-group"].extraMarker,qaNoteType:e.basic.noteType,clozeNoteType:e.cloze.noteType}}function Ve(e,t){return typeof e=="number"&&Number.isInteger(e)&&e>=1&&e<=6?e:t}function yi(e,t){return typeof e!="string"?t:e.trim()}function je(e,t){if(typeof e!="string")return t;let n=e.trim();return n.length>0?n:t}function xi(e){if(!e||typeof e!="object"||Array.isArray(e))return{};let t={};for(let n of Object.values(e)){if(!n||typeof n!="object"||Array.isArray(n))continue;let r=n;if(r.cardType!=="basic"&&r.cardType!=="qa-group"&&r.cardType!=="cloze")continue;let i=typeof r.modelName=="string"?r.modelName.trim():"";if(i.length===0)continue;let a=Ci(r.loadedFieldNames),o=typeof r.loadedAt=="number"&&Number.isFinite(r.loadedAt)?r.loadedAt:0;if(r.cardType==="qa-group"){let u=$o(r,i,a,o);t[B(u.cardType,u.modelName)]=u;continue}if(r.cardType==="cloze"){t[B(r.cardType,i)]={cardType:r.cardType,modelName:i,loadedFieldNames:a,mainField:le(r.mainField),loadedAt:o};continue}t[B(r.cardType,i)]={cardType:r.cardType,modelName:i,loadedFieldNames:a,titleField:le(r.titleField),bodyField:le(r.bodyField),loadedAt:o}}return t}function Wo(e){let t={...e.noteFieldMappings};for(let n of Bn){if(n==="qa-group")continue;let r=e.cardTypeConfigs[n];if(!r.enabled)continue;let i=r.noteType.trim();if(i.length===0)continue;let a=n==="cloze"||n==="cloze-all"?"cloze":"basic",o=B(a,i);if(t[o])continue;let u=e.ankiModelFieldCache[i];if(!u||u.fieldNames.length===0)continue;let s=[...u.fieldNames];t[o]=a==="cloze"?{cardType:a,modelName:i,loadedFieldNames:s,mainField:ft(s,["Text","Body","Content"])??s[0],loadedAt:u.loadedAt}:{cardType:a,modelName:i,loadedFieldNames:s,titleField:ft(s,["Front","Title"])??s[0],bodyField:ft(s,["Back","Body","Answer"])??s.find(d=>d!==(ft(s,["Front","Title"])??s[0])),loadedAt:u.loadedAt}}return t}function ft(e,t){return e.find(n=>t.some(r=>r.toLowerCase()===n.toLowerCase()))}function $o(e,t,n,r){let i=pi(e.acceptedWarnings),a=jo(e.slots),o=pi(e.warnings),u=le(e.titleField),s=Uo(e.derivation);if(a.length>0||o.length>0||i.length>0||s!==void 0)return{cardType:"qa-group",modelName:t,loadedFieldNames:n,titleField:u,slots:a,warnings:o,acceptedWarnings:i.length>0?i:void 0,derivation:s,loadedAt:r};if(n.length>0)try{return Io.suggest(t,n,r,i,u)}catch{return{cardType:"qa-group",modelName:t,loadedFieldNames:n,titleField:u,slots:[],warnings:[],acceptedWarnings:void 0,derivation:s,loadedAt:r}}return{cardType:"qa-group",modelName:t,loadedFieldNames:n,titleField:u,slots:[],warnings:[],acceptedWarnings:void 0,derivation:s,loadedAt:r}}function Uo(e){if(!e||typeof e!="object"||Array.isArray(e))return;let t=e;if(t.mode==="first-pair")return{mode:"first-pair",firstQuestionField:le(t.firstQuestionField),firstAnswerField:le(t.firstAnswerField)}}function Qo(e){if(!Array.isArray(e))return[];let t=new Set;for(let n of e){if(typeof n!="string")continue;let r=n.trim();r.length>0&&t.add(r)}return[...t].sort((n,r)=>n.localeCompare(r))}function Vo(e){if(!e||typeof e!="object"||Array.isArray(e))return{};let t=Object.entries(e).flatMap(([n,r])=>{let i=n.trim();if(i.length===0||!r||typeof r!="object"||Array.isArray(r))return[];let a=r,o=typeof a.loadedAt=="number"&&Number.isFinite(a.loadedAt)?a.loadedAt:0;return[[i,{fieldNames:Ci(a.fieldNames),loadedAt:o}]]});return t.sort(([n],[r])=>n.localeCompare(r)),Object.fromEntries(t)}function Ci(e){if(!Array.isArray(e))return[];let t=[],n=new Set;for(let r of e){if(typeof r!="string")continue;let i=r.trim();i.length===0||n.has(i)||(n.add(i),t.push(i))}return t}function jo(e){if(!Array.isArray(e))return[];let t=[];for(let n of e){if(!n||typeof n!="object"||Array.isArray(n))continue;let r=n;if(!Number.isInteger(r.index)||r.index<1)continue;let i=le(r.questionField),a=le(r.answerField);!i||!a||t.push({index:r.index,questionField:i,answerField:a})}return t}function le(e){if(typeof e!="string")return;let t=e.trim();return t.length>0?t:void 0}function pi(e){if(!Array.isArray(e))return[];let t=[];for(let n of e){if(typeof n!="string")continue;let r=n.trim();r.length!==0&&t.push(r)}return t}function fi(e,t,n,r=!1){if(!(typeof e>"u"&&r)){if(!Array.isArray(e))throw new S(t);for(let i of e)if(typeof i!="string")throw new S(n)}}var Z=class{normalize(t){let r=t.trim().replace(/\\/g,"/").replace(/\/+?/g,"::").split(/::+/).map(i=>i.trim().replace(/^:+|:+$/g,"")).filter(Boolean);if(r.length===0)throw new S("errors.deck.emptyName");return r.join("::")}};var mt=class{constructor(t=new Z){this.deckNormalizationService=t}insert(t,n,r,i){let a=this.expandTemplate(r,t.basename),o=i==="yaml"?Ko(t.content,n,a):Zo(t.content,n,a);return{expectedContent:t.content,nextContent:o,insertedDeck:a}}expandTemplate(t,n){return this.deckNormalizationService.normalize(t.replace(/\bfilename\b/g,n))}};function Ko(e,t,n){let r=e.split(/\r?\n/),i=Si(r),a=`${t}: ${n}`;if(!i)return["---",a,"---","",...r].join(` `);let o=[...r],u=eu(t),s=i.start+1,d=i.end,c=o.slice(s,d).findIndex(l=>u.test(l));return c>=0?(o[s+c]=a,o.join(` diff --git a/src/presentation/i18n/messages/en.ts b/src/presentation/i18n/messages/en.ts index 02ff0d4..620aca3 100644 --- a/src/presentation/i18n/messages/en.ts +++ b/src/presentation/i18n/messages/en.ts @@ -18,11 +18,11 @@ export const en = { }, qaHeadingLevel: { name: "Heading level for question-and-answer cards", - desc: "Use heading level 4 by default.", + desc: "Default question-and-answer heading level is 4.", }, clozeHeadingLevel: { name: "Cloze heading level", - desc: "Use heading level 5 by default.", + desc: "Default cloze heading level is 5.", }, cardAnswerCutoffMode: { name: "Card answer cutoff mode", @@ -413,7 +413,7 @@ export const en = { noteFieldMappingsQaGroupAcceptedWarningsArray: "Question-and-answer group field mapping acceptedWarnings must be an array.", noteFieldMappingsQaGroupAcceptedWarningsStrings: "Question-and-answer group field mapping acceptedWarnings can only contain strings.", noteFieldMappingsQaGroupDerivationObject: "Question-and-answer group field mapping derivation must be an object.", - noteFieldMappingsQaGroupDerivationMode: "Question-and-answer group field mapping derivation.mode must be first-pair.", + noteFieldMappingsQaGroupDerivationMode: "Question-and-answer group field mapping derivation mode must be first-pair.", noteFieldMappingsQaGroupDerivationFirstQuestionField: "Question-and-answer group field mapping derivation.firstQuestionField must be a string.", noteFieldMappingsQaGroupDerivationFirstAnswerField: "Question-and-answer group field mapping derivation.firstAnswerField must be a string.", }, diff --git a/src/presentation/settings/PluginSettingTab.test.ts b/src/presentation/settings/PluginSettingTab.test.ts index b6ed764..da37453 100644 --- a/src/presentation/settings/PluginSettingTab.test.ts +++ b/src/presentation/settings/PluginSettingTab.test.ts @@ -700,15 +700,15 @@ function isCardExpanded(tab: AnkiHeadingSyncSettingTab, cardId: string): boolean } type TestActiveWindow = { - setTimeout: (callback: () => void, delay?: number) => ReturnType; - clearTimeout: (timer: ReturnType) => void; + setTimeout: Window["setTimeout"]; + clearTimeout: Window["clearTimeout"]; }; type TestWindow = { activeWindow: TestActiveWindow; ResizeObserver: typeof ResizeObserver; - readonly setTimeout: typeof setTimeout; - readonly clearTimeout: typeof clearTimeout; + readonly setTimeout: Window["setTimeout"]; + readonly clearTimeout: Window["clearTimeout"]; }; function createTestWindow(): TestWindow { @@ -720,10 +720,10 @@ function createTestWindow(): TestWindow { }; testWindow = { - get setTimeout(): typeof setTimeout { + get setTimeout(): Window["setTimeout"] { return setTimeout; }, - get clearTimeout(): typeof clearTimeout { + get clearTimeout(): Window["clearTimeout"] { return clearTimeout; }, activeWindow,