diff --git a/README_de.md b/README_de.md index 4deb7f28..6732a812 100644 --- a/README_de.md +++ b/README_de.md @@ -239,6 +239,7 @@ Rufen Sie die Plugin-Einstellungen auf über: ### Spracharchitektur (UI-Sprache vs. Aufgaben-Ausgabesprache) - **UI-Sprache** steuert ausschließlich den Text der Plugin-Oberfläche (Einstellungsbeschriftungen, Schaltflächen in der Seitenleiste, Hinweise und Dialoge). Der Standardmodus `auto` folgt der aktuellen UI-Sprache von Obsidian. +- Regionale und Schriftvarianten werden nun dem nächstliegenden veröffentlichten Katalog zugeordnet, statt direkt auf Englisch zurückzufallen. Zum Beispiel verwendet `fr-CA` Französisch, `es-419` Spanisch, `pt-PT` Portugiesisch, `zh-Hans` vereinfachtes Chinesisch und `zh-Hant-HK` traditionelles Chinesisch. - **Aufgaben-Ausgabesprache** steuert die vom Modell generierte Aufgabenausgabe (Links, Zusammenfassungen, Titelgenerierung, Mermaid-Zusammenfassung, Konzepteextraktion, Übersetzungsziel). - **Der Modus "Sprache pro Aufgabe"** ermöglicht es jeder Aufgabe, ihre eigene Ausgabesprache über eine einheitliche Richtlinienschicht aufzulösen, anstatt über verstreute Überschreibungen pro Modul. - **Automatische Übersetzung deaktivieren** hält Nicht-Übersetzungsaufgaben im ursprünglichen Sprachkontext, während explizite Übersetzungsaufgaben weiterhin die konfigurierte Zielsprache anwenden. diff --git a/README_es.md b/README_es.md index 529cb8e0..16beb6c3 100644 --- a/README_es.md +++ b/README_es.md @@ -239,6 +239,7 @@ Accede a los ajustes del complemento a través de: ### Arquitectura de Idioma (Idioma de la interfaz vs idioma de salida de tareas) - **Idioma de la interfaz** controla solo el texto de la interfaz del complemento (etiquetas de ajustes, botones de la barra lateral, avisos y diálogos). El modo `auto` predeterminado sigue el idioma actual de la UI de Obsidian. +- Las variantes regionales y de escritura ahora se resuelven al catálogo publicado más cercano en lugar de caer directamente al inglés. Por ejemplo, `fr-CA` usa francés, `es-419` usa español, `pt-PT` usa portugués, `zh-Hans` usa chino simplificado y `zh-Hant-HK` usa chino tradicional. - **Idioma de salida de tareas** controla la salida de tareas generada por el modelo (enlaces, resúmenes, generación de títulos, resumen de Mermaid, extracción de conceptos, objetivo de traducción). - **El modo de idioma por tarea** permite que cada tarea resuelva su propio idioma de salida desde una capa de política unificada en lugar de sobrescrituras dispersas por módulo. - **Desactivar traducción automática** mantiene las tareas que no son de traducción en el contexto del idioma original, mientras que las tareas explícitas de traducción siguen aplicando el idioma de destino configurado. diff --git a/README_fr.md b/README_fr.md index 4dcfa9fe..e19a1550 100644 --- a/README_fr.md +++ b/README_fr.md @@ -240,6 +240,7 @@ Accédez aux réglages du plugin via : ### Architecture des Langues (Langue de l'interface vs langue de sortie des tâches) - **Langue de l'interface** contrôle uniquement le texte de l'interface du plugin (étiquettes des réglages, boutons de la barre latérale, avis et fenêtres). Le mode `auto` par défaut suit la langue actuelle de l'interface d'Obsidian. +- Les variantes régionales ou d’écriture sont désormais résolues vers le catalogue publié le plus proche au lieu de retomber directement sur l’anglais. Par exemple, `fr-CA` utilise le français, `es-419` l’espagnol, `pt-PT` le portugais, `zh-Hans` le chinois simplifié et `zh-Hant-HK` le chinois traditionnel. - **Langue de sortie des tâches** contrôle la sortie des tâches générée par le modèle (liens, résumés, génération de titres, résumé Mermaid, extraction de concepts, cible de traduction). - **Le mode de langue par tâche** permet à chaque tâche de résoudre sa propre langue de sortie à partir d'une couche de politique unifiée au lieu de remplacements dispersés par module. - **Désactiver la traduction automatique** garde les tâches non-traduction dans le contexte de la langue source, tandis que les tâches de traduction explicites appliquent toujours la langue cible configurée. diff --git a/README_it.md b/README_it.md index 95b398cb..7874883a 100644 --- a/README_it.md +++ b/README_it.md @@ -240,6 +240,7 @@ Accedi alle impostazioni del plugin tramite: ### Architettura linguistica (Lingua dell'interfaccia vs lingua di output delle attività) - **Lingua dell'interfaccia** controlla esclusivamente il testo dell'interfaccia del plugin (etichette impostazioni, pulsanti barra laterale, avvisi e dialoghi). La modalità `auto` predefinita segue la lingua attuale della UI di Obsidian. +- Le varianti regionali o di scrittura ora vengono risolte al catalogo pubblicato più vicino invece di ricadere subito sull'inglese. Ad esempio, `fr-CA` usa il francese, `es-419` usa lo spagnolo, `pt-PT` usa il portoghese, `zh-Hans` usa il cinese semplificato e `zh-Hant-HK` usa il cinese tradizionale. - **Lingua di output delle attività** controlla l'output delle attività generato dal modello (link, riassunti, generazione titoli, riassunto Mermaid, estrazione concetti, destinazione traduzione). - **La modalità lingua per attività** consente a ogni attività di risolvere la propria lingua di output da un livello di policy unificato invece di sovrascritture sparse per modulo. - **Disabilita traduzione automatica** mantiene le attività non di traduzione nel contesto della lingua originale, mentre le attività di traduzione esplicite applicano comunque la lingua di destinazione configurata. diff --git a/README_ja.md b/README_ja.md index 0fdea142..cecd4a62 100644 --- a/README_ja.md +++ b/README_ja.md @@ -239,6 +239,7 @@ Notemd は、さまざまな大規模言語モデル (LLM) と統合すること ### 言語アーキテクチャ (インターフェース言語 vs タスク出力言語) - **インターフェース言語** は、プラグインインターフェースのテキスト (設定ラベル、サイドバーボタン、通知、およびダイアログ) のみを制御します。デフォルトの `auto` モードは、Obsidian の現在の UI 言語に従います。 +- 地域差分や表記体系のバリアントは、英語に直接フォールバックするのではなく、最も近い公開済みカタログに解決されるようになりました。たとえば、`fr-CA` はフランス語、`es-419` はスペイン語、`pt-PT` はポルトガル語、`zh-Hans` は簡体字中国語、`zh-Hant-HK` は繁体字中国語を使用します。 - **タスク出力言語** は、モデルによって生成されるタスク出力 (リンク、要約、タイトル生成、Mermaid 要約、概念抽出、翻訳目標) を制御します。 - **タスクごとの言語モード** を使用すると、モジュールごとに分散した上書きではなく、統合されたポリシーレイヤーから各タスクが独自の出力言語を解決できます。 - **自動翻訳を無効化** すると、翻訳以外のタスクは元の言語の文脈を保持しますが、明示的な翻訳タスクは構成された目標言語を適用し続けます。 diff --git a/README_ko.md b/README_ko.md index 75d3bc07..829f4b85 100644 --- a/README_ko.md +++ b/README_ko.md @@ -239,6 +239,7 @@ Notemd는 다양한 거대 언어 모델(LLM)과 통합되어 다국어 노트 ### 언어 아키텍처 (인터페이스 언어 vs 작업 출력 언어) - **인터페이스 언어**는 플러그인 인터페이스 텍스트(설정 레이블, 사이드바 버튼, 알림 및 대화 상자)만 제어합니다. 기본 `auto` 모드는 Obsidian의 현재 UI 언어를 따릅니다. +- 지역별 또는 문자 체계 변형은 이제 곧바로 영어로 떨어지지 않고 가장 가까운 출시된 카탈로그로 매핑됩니다. 예를 들어 `fr-CA`는 프랑스어, `es-419`는 스페인어, `pt-PT`는 포르투갈어, `zh-Hans`는 중국어 간체, `zh-Hant-HK`는 중국어 번체를 사용합니다. - **작업 출력 언어**는 모델에 의해 생성된 작업 결과물(링크, 요약, 제목 생성, Mermaid 요약, 개념 추출, 번역 대상)을 제어합니다. - **작업별 언어 모드**를 사용하면 모듈별로 흩어진 덮어쓰기 대신 통합된 정책 레이어에서 각 작업이 자체 출력 언어를 결정할 수 있습니다. - **자동 번역 비활성화**는 번역 이외의 작업을 원래 언어 문맥으로 유지하는 반면, 명시적인 번역 작업은 구성된 대상 언어를 계속 적용합니다. diff --git a/README_pt.md b/README_pt.md index c434409f..3b9cb908 100644 --- a/README_pt.md +++ b/README_pt.md @@ -239,6 +239,7 @@ Acesse as configurações do plugin através de: ### Arquitetura de idioma (Idioma da interface vs idioma de saída das tarefas) - **Idioma da interface** controla apenas o texto da interface do plugin (rótulos de configurações, botões da barra lateral, avisos e diálogos). O modo `auto` padrão segue o idioma atual da interface do Obsidian. +- Variantes regionais ou de escrita agora são resolvidas para o catálogo publicado mais próximo, em vez de cair direto para o inglês. Por exemplo, `fr-CA` usa francês, `es-419` usa espanhol, `pt-PT` usa português, `zh-Hans` usa chinês simplificado e `zh-Hant-HK` usa chinês tradicional. - **Idioma de saída das tarefas** controla a saída de tarefas gerada pelo modelo (links, resumos, geração de títulos, resumo Mermaid, extração de conceitos, destino da tradução). - **O modo de idioma por tarefa** permite que cada tarefa resolva seu próprio idioma de saída a partir de uma camada de política unificada, em vez de sobrescritas dispersas por módulo. - **Desativar tradução automática** mantém as tarefas que não são de tradução no contexto do idioma original, enquanto tarefas explícitas de tradução ainda aplicam o idioma de destino configurado. diff --git a/README_ru.md b/README_ru.md index e4168229..d7dcb86e 100644 --- a/README_ru.md +++ b/README_ru.md @@ -235,6 +235,7 @@ Notemd расширяет рабочий процесс в Obsidian, интег ### Языковая архитектура (язык интерфейса и язык вывода задач) - **Язык интерфейса** управляет только текстом интерфейса плагина: подписями в настройках, кнопками боковой панели, уведомлениями и диалогами. +- Региональные и письменные варианты теперь сопоставляются с ближайшим опубликованным каталогом, а не сразу откатываются на английский. Например, `fr-CA` использует французский, `es-419` — испанский, `pt-PT` — португальский, `zh-Hans` — упрощённый китайский, а `zh-Hant-HK` — традиционный китайский. - **Язык вывода задач** управляет выводом, генерируемым моделью: ссылками, сводками, генерацией заголовков, Mermaid-сводкой, извлечением понятий и целевым языком перевода. - **Режим языка по задачам** позволяет каждой задаче определять собственный язык вывода через единый слой политики, а не через разбросанные переопределения по модулям. - **Отключить автоперевод** сохраняет контекст исходного языка для задач, отличных от Translate, при этом явные задачи Translate по-прежнему используют заданный целевой язык. diff --git a/README_zh.md b/README_zh.md index 5fd4e707..ac230634 100644 --- a/README_zh.md +++ b/README_zh.md @@ -249,6 +249,7 @@ Notemd 通过与各种大型语言模型 (LLM) 集成来增强您的 Obsidian ### 语言架构(界面语言与任务输出语言) - **界面语言**只控制插件界面文案(设置项、侧边栏按钮、提示、弹窗)。默认 `auto` 会跟随 Obsidian 当前界面语言。 +- 区域/书写体系变体现在会优先映射到最接近的已发布语言目录,而不是直接回退到英文。例如,`fr-CA` 使用法语,`es-419` 使用西班牙语,`pt-PT` 使用葡萄牙语,`zh-Hans` 使用简体中文,`zh-Hant-HK` 使用繁体中文。 - **任务输出语言**控制模型生成内容的语言(添加链接、研究摘要、按标题生成、Mermaid 总结、概念提取、翻译目标)。 - **按任务语言模式**通过统一策略层解析每个任务的输出语言,避免分散在各模块中的语言分支造成行为漂移。 - **禁用自动翻译**后,非翻译任务会保留原文语言上下文;显式“翻译”任务仍按目标语言执行。 diff --git a/README_zh_Hant.md b/README_zh_Hant.md index fc8879b3..d52fccab 100644 --- a/README_zh_Hant.md +++ b/README_zh_Hant.md @@ -249,6 +249,7 @@ Notemd 通過與各種大型語言模型 (LLM) 集成來增強您的 Obsidian ### 語言架構(介面語言與任務輸出語言) - **介面語言**只控制插件介面文案(設定項、側邊欄按鈕、提示、彈窗)。預設 `auto` 會跟隨 Obsidian 當前介面語言。 +- 區域/書寫系統變體現在會優先映射到最接近的已發布語言目錄,而不是直接回退到英文。例如,`fr-CA` 使用法語,`es-419` 使用西班牙語,`pt-PT` 使用葡萄牙語,`zh-Hans` 使用簡體中文,`zh-Hant-HK` 使用繁體中文。 - **任務輸出語言**控制模型生成內容的語言(添加連結、研究摘要、按標題生成、Mermaid 總結、概念提取、翻譯目標)。 - **按任務語言模式**通過統一策略層解析每個任務的輸出語言,避免分散在各模組中的語言分支造成行為漂移。 - **禁用自動翻譯**後,非翻譯任務會保留原文語言內容;顯式「翻譯」任務仍按目標語言執行。 diff --git a/src/tests/htmlRenderer.test.ts b/src/tests/htmlRenderer.test.ts index fe35cd48..497b872e 100644 --- a/src/tests/htmlRenderer.test.ts +++ b/src/tests/htmlRenderer.test.ts @@ -106,4 +106,45 @@ describe('html renderer', () => { expect(artifact.content).not.toContain('

Data

'); expect(artifact.content).not.toContain('Series'); }); + + test('falls back to shipped base catalogs for regional output languages', async () => { + const renderer = new HtmlRenderer(); + const spec: DiagramSpec = { + intent: 'flowchart', + title: 'Flux de publication', + outputLanguage: 'fr-CA', + nodes: [{ id: 'validate', label: 'Valider' }] + }; + + const artifact = await renderer.render(spec); + + expect(artifact.content).toContain('

Structure

'); + expect(artifact.content).toContain('Langue de sortie'); + expect(artifact.content).not.toContain('Output language'); + }); + + test('maps Chinese script-region variants onto the correct shipped catalog', async () => { + const renderer = new HtmlRenderer(); + const spec: DiagramSpec = { + intent: 'dataChart', + title: '每週註冊量', + outputLanguage: 'zh-Hant-HK', + nodes: [], + dataSeries: [ + { + id: 'signups', + label: '註冊量', + points: [ + { x: '第 1 週', y: 12 } + ] + } + ] + }; + + const artifact = await renderer.render(spec); + + expect(artifact.content).toContain('

資料

'); + expect(artifact.content).toContain('輸出語言'); + expect(artifact.content).not.toContain('

Data

'); + }); }); diff --git a/src/tests/readmeLocaleFallbackDocs.test.ts b/src/tests/readmeLocaleFallbackDocs.test.ts new file mode 100644 index 00000000..817511fd --- /dev/null +++ b/src/tests/readmeLocaleFallbackDocs.test.ts @@ -0,0 +1,28 @@ +import * as fs from 'fs'; +import * as path from 'path'; + +const README_VARIANTS = [ + 'README.md', + 'README_ru.md', + 'README_de.md', + 'README_es.md', + 'README_fr.md', + 'README_it.md', + 'README_pt.md', + 'README_ja.md', + 'README_ko.md', + 'README_zh.md', + 'README_zh_Hant.md' +] as const; + +describe('readme locale fallback docs', () => { + test.each(README_VARIANTS)('%s documents regional uiLocale fallback examples', (fileName) => { + const readme = fs.readFileSync(path.join(__dirname, '..', '..', fileName), 'utf8'); + + expect(readme).toContain('fr-CA'); + expect(readme).toContain('es-419'); + expect(readme).toContain('pt-PT'); + expect(readme).toContain('zh-Hans'); + expect(readme).toContain('zh-Hant-HK'); + }); +});