dsh-think-translate 1.2.20 → 1.2.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.de.md CHANGED
@@ -1,5 +1,5 @@
1
1
  <p align="center">
2
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/hero.de.png?v=1.2.20" alt="dsh-think-translate — KI-Gedanken in deiner Sprache" width="100%" />
2
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/hero.de.png?v=1.2.21" alt="dsh-think-translate — KI-Gedanken in deiner Sprache" width="100%" />
3
3
  </p>
4
4
 
5
5
  <p align="center">
@@ -8,9 +8,9 @@
8
8
  </p>
9
9
 
10
10
  <p align="center">
11
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-mit.de.svg?v=1.2.20" alt="MIT-Lizenz" />
12
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-local.de.svg?v=1.2.20" alt="Lokales Ollama" />
13
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-original.de.svg?v=1.2.20" alt="Originale erhalten" />
11
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-mit.de.svg?v=1.2.21" alt="MIT-Lizenz" />
12
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-local.de.svg?v=1.2.21" alt="Lokales Ollama" />
13
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-original.de.svg?v=1.2.21" alt="Originale erhalten" />
14
14
  </p>
15
15
 
16
16
  <p align="center">
@@ -18,7 +18,7 @@
18
18
  </p>
19
19
 
20
20
  <p align="center">
21
- <a href="#quick-start"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-quick-start.de.svg?v=1.2.20" alt="Installation" height="24" /></a> &nbsp;·&nbsp; <a href="#demo"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-demo.de.svg?v=1.2.20" alt="Live-Demos" height="24" /></a> &nbsp;·&nbsp; <a href="#features"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-features.de.svg?v=1.2.20" alt="Funktionen" height="24" /></a> &nbsp;·&nbsp; <a href="#comparison"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-comparison.de.svg?v=1.2.20" alt="Vergleich" height="24" /></a> &nbsp;·&nbsp; <a href="#faq"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-faq.de.svg?v=1.2.20" alt="Fragen" height="24" /></a>
21
+ <a href="#quick-start"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-quick-start.de.svg?v=1.2.21" alt="Installation" height="24" /></a> &nbsp;·&nbsp; <a href="#demo"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-demo.de.svg?v=1.2.21" alt="Live-Demos" height="24" /></a> &nbsp;·&nbsp; <a href="#features"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-features.de.svg?v=1.2.21" alt="Funktionen" height="24" /></a> &nbsp;·&nbsp; <a href="#comparison"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-comparison.de.svg?v=1.2.21" alt="Vergleich" height="24" /></a> &nbsp;·&nbsp; <a href="#faq"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-faq.de.svg?v=1.2.21" alt="Fragen" height="24" /></a>
22
22
  </p>
23
23
 
24
24
  ---
@@ -29,10 +29,10 @@
29
29
  <table>
30
30
  <tr>
31
31
  <td width="50%" align="center" valign="bottom">
32
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/demo/demo.gif?v=1.2.20" alt="Demo 1 · Gedanken und Antworten" width="100%" />
32
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/demo/demo.gif?v=1.2.21" alt="Demo 1 · Gedanken und Antworten" width="100%" />
33
33
  </td>
34
34
  <td width="50%" align="center" valign="bottom">
35
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/demo/demo2.gif?v=1.2.20" alt="Demo 2 · Weitere Bedienung" width="100%" />
35
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/demo/demo2.gif?v=1.2.21" alt="Demo 2 · Weitere Bedienung" width="100%" />
36
36
  </td>
37
37
  </tr>
38
38
  <tr>
@@ -45,7 +45,7 @@
45
45
  ## Vergleich mit dem offiziellen Übersetzungsplugin
46
46
 
47
47
  <p align="center">
48
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/translation-comparison.de.png?v=1.2.20" alt="Vergleich mit dem offiziellen Übersetzungsplugin" width="100%" />
48
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/translation-comparison.de.png?v=1.2.21" alt="Vergleich mit dem offiziellen Übersetzungsplugin" width="100%" />
49
49
  </p>
50
50
 
51
51
  Aktiviere dieses Plugin oder den offiziellen Gedankenübersetzer. Beide übernehmen die Gedankenoberfläche.
@@ -202,6 +202,8 @@ Scheitern alle aktiven Anbieter, bleibt das Original. Teste einzelne Anbieter un
202
202
  <details>
203
203
  <summary><b>Änderungen und Kompatibilität</b></summary>
204
204
 
205
+ **1.2.21** Behebt wiederholte Übersetzungsanfragen bei schnellen Aufgabenänderungen (#17). Die Übersetzung beginnt nach 500 ms ohne Änderung.
206
+
205
207
  **1.2.20** ergänzt ein optionales technisches Glossar mit einem Klick und 60 Begriffen und Produktnamen für neun Zielsprachen. Eigene Einträge haben Vorrang und ein eigenes Kontingent; Vorschau und Deaktivieren erhalten sie.
206
208
 
207
209
  **1.2.19** ergänzt sprachbezogene Glossare, DSH-Zugangsdaten, konfigurationsbezogene Caches, die gegenseitige Ausschließung mit dem offiziellen Plugin, stärkeren Schutz technischer Texte und Windows/Linux-CI.
package/README.es.md CHANGED
@@ -1,5 +1,5 @@
1
1
  <p align="center">
2
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/hero.es.png?v=1.2.20" alt="dsh-think-translate — El pensamiento de la IA, en tu idioma" width="100%" />
2
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/hero.es.png?v=1.2.21" alt="dsh-think-translate — El pensamiento de la IA, en tu idioma" width="100%" />
3
3
  </p>
4
4
 
5
5
  <p align="center">
@@ -8,9 +8,9 @@
8
8
  </p>
9
9
 
10
10
  <p align="center">
11
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-mit.es.svg?v=1.2.20" alt="Licencia MIT" />
12
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-local.es.svg?v=1.2.20" alt="Ollama local" />
13
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-original.es.svg?v=1.2.20" alt="Originales intactos" />
11
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-mit.es.svg?v=1.2.21" alt="Licencia MIT" />
12
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-local.es.svg?v=1.2.21" alt="Ollama local" />
13
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-original.es.svg?v=1.2.21" alt="Originales intactos" />
14
14
  </p>
15
15
 
16
16
  <p align="center">
@@ -18,7 +18,7 @@
18
18
  </p>
19
19
 
20
20
  <p align="center">
21
- <a href="#quick-start"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-quick-start.es.svg?v=1.2.20" alt="Instalar" height="24" /></a> &nbsp;·&nbsp; <a href="#demo"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-demo.es.svg?v=1.2.20" alt="Demostraciones" height="24" /></a> &nbsp;·&nbsp; <a href="#features"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-features.es.svg?v=1.2.20" alt="Funciones" height="24" /></a> &nbsp;·&nbsp; <a href="#comparison"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-comparison.es.svg?v=1.2.20" alt="Comparación" height="24" /></a> &nbsp;·&nbsp; <a href="#faq"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-faq.es.svg?v=1.2.20" alt="Preguntas" height="24" /></a>
21
+ <a href="#quick-start"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-quick-start.es.svg?v=1.2.21" alt="Instalar" height="24" /></a> &nbsp;·&nbsp; <a href="#demo"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-demo.es.svg?v=1.2.21" alt="Demostraciones" height="24" /></a> &nbsp;·&nbsp; <a href="#features"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-features.es.svg?v=1.2.21" alt="Funciones" height="24" /></a> &nbsp;·&nbsp; <a href="#comparison"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-comparison.es.svg?v=1.2.21" alt="Comparación" height="24" /></a> &nbsp;·&nbsp; <a href="#faq"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-faq.es.svg?v=1.2.21" alt="Preguntas" height="24" /></a>
22
22
  </p>
23
23
 
24
24
  ---
@@ -29,10 +29,10 @@
29
29
  <table>
30
30
  <tr>
31
31
  <td width="50%" align="center" valign="bottom">
32
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/demo/demo.gif?v=1.2.20" alt="Demo 1 · Razonamiento y respuestas" width="100%" />
32
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/demo/demo.gif?v=1.2.21" alt="Demo 1 · Razonamiento y respuestas" width="100%" />
33
33
  </td>
34
34
  <td width="50%" align="center" valign="bottom">
35
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/demo/demo2.gif?v=1.2.20" alt="Demo 2 · Más operaciones" width="100%" />
35
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/demo/demo2.gif?v=1.2.21" alt="Demo 2 · Más operaciones" width="100%" />
36
36
  </td>
37
37
  </tr>
38
38
  <tr>
@@ -45,7 +45,7 @@
45
45
  ## Comparación con el plugin oficial de traducción
46
46
 
47
47
  <p align="center">
48
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/translation-comparison.es.png?v=1.2.20" alt="Comparación con el plugin oficial de traducción" width="100%" />
48
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/translation-comparison.es.png?v=1.2.21" alt="Comparación con el plugin oficial de traducción" width="100%" />
49
49
  </p>
50
50
 
51
51
  Activa este plugin o el traductor oficial de razonamiento. Ambos controlan la interfaz del razonamiento.
@@ -202,6 +202,8 @@ Si todos los proveedores activos fallan, se conserva el original. Prueba cada pr
202
202
  <details>
203
203
  <summary><b>Cambios recientes y compatibilidad</b></summary>
204
204
 
205
+ **1.2.21** Corrige las solicitudes repetidas de traducción al actualizar tareas rápidamente (#17). El texto se traduce tras 500 ms sin cambios.
206
+
205
207
  **1.2.20** añade un glosario técnico opcional de un clic con 60 términos y productos para los nueve idiomas. Las entradas propias tienen prioridad y límite independiente; permite consultar y desactivar sin borrarlas.
206
208
 
207
209
  **1.2.19** añade glosarios por idioma, credenciales de DSH, cachés por configuración, exclusión con el complemento oficial, mayor protección técnica y CI de Windows/Linux.
package/README.fr.md CHANGED
@@ -1,5 +1,5 @@
1
1
  <p align="center">
2
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/hero.fr.png?v=1.2.20" alt="dsh-think-translate — La pensée de l’IA, dans votre langue" width="100%" />
2
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/hero.fr.png?v=1.2.21" alt="dsh-think-translate — La pensée de l’IA, dans votre langue" width="100%" />
3
3
  </p>
4
4
 
5
5
  <p align="center">
@@ -8,9 +8,9 @@
8
8
  </p>
9
9
 
10
10
  <p align="center">
11
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-mit.fr.svg?v=1.2.20" alt="Licence MIT" />
12
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-local.fr.svg?v=1.2.20" alt="Ollama local" />
13
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-original.fr.svg?v=1.2.20" alt="Originaux conservés" />
11
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-mit.fr.svg?v=1.2.21" alt="Licence MIT" />
12
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-local.fr.svg?v=1.2.21" alt="Ollama local" />
13
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-original.fr.svg?v=1.2.21" alt="Originaux conservés" />
14
14
  </p>
15
15
 
16
16
  <p align="center">
@@ -18,7 +18,7 @@
18
18
  </p>
19
19
 
20
20
  <p align="center">
21
- <a href="#quick-start"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-quick-start.fr.svg?v=1.2.20" alt="Installation" height="24" /></a> &nbsp;·&nbsp; <a href="#demo"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-demo.fr.svg?v=1.2.20" alt="Démonstrations" height="24" /></a> &nbsp;·&nbsp; <a href="#features"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-features.fr.svg?v=1.2.20" alt="Fonctions" height="24" /></a> &nbsp;·&nbsp; <a href="#comparison"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-comparison.fr.svg?v=1.2.20" alt="Comparaison" height="24" /></a> &nbsp;·&nbsp; <a href="#faq"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-faq.fr.svg?v=1.2.20" alt="Questions" height="24" /></a>
21
+ <a href="#quick-start"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-quick-start.fr.svg?v=1.2.21" alt="Installation" height="24" /></a> &nbsp;·&nbsp; <a href="#demo"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-demo.fr.svg?v=1.2.21" alt="Démonstrations" height="24" /></a> &nbsp;·&nbsp; <a href="#features"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-features.fr.svg?v=1.2.21" alt="Fonctions" height="24" /></a> &nbsp;·&nbsp; <a href="#comparison"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-comparison.fr.svg?v=1.2.21" alt="Comparaison" height="24" /></a> &nbsp;·&nbsp; <a href="#faq"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-faq.fr.svg?v=1.2.21" alt="Questions" height="24" /></a>
22
22
  </p>
23
23
 
24
24
  ---
@@ -29,10 +29,10 @@
29
29
  <table>
30
30
  <tr>
31
31
  <td width="50%" align="center" valign="bottom">
32
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/demo/demo.gif?v=1.2.20" alt="Démo 1 · Raisonnement et réponses" width="100%" />
32
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/demo/demo.gif?v=1.2.21" alt="Démo 1 · Raisonnement et réponses" width="100%" />
33
33
  </td>
34
34
  <td width="50%" align="center" valign="bottom">
35
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/demo/demo2.gif?v=1.2.20" alt="Démo 2 · Autres opérations" width="100%" />
35
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/demo/demo2.gif?v=1.2.21" alt="Démo 2 · Autres opérations" width="100%" />
36
36
  </td>
37
37
  </tr>
38
38
  <tr>
@@ -45,7 +45,7 @@
45
45
  ## Comparaison avec le plugin officiel de traduction
46
46
 
47
47
  <p align="center">
48
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/translation-comparison.fr.png?v=1.2.20" alt="Comparaison avec le plugin officiel de traduction" width="100%" />
48
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/translation-comparison.fr.png?v=1.2.21" alt="Comparaison avec le plugin officiel de traduction" width="100%" />
49
49
  </p>
50
50
 
51
51
  Activez ce plugin ou le traducteur officiel du raisonnement. Tous deux prennent en charge l’affichage du raisonnement.
@@ -202,6 +202,8 @@ Si tous les fournisseurs actifs échouent, l’original reste visible. Testez ch
202
202
  <details>
203
203
  <summary><b>Mises à jour et compatibilité</b></summary>
204
204
 
205
+ **1.2.21** Corrige les demandes de traduction répétées lors des mises à jour rapides des tâches (#17). Le texte est traduit après 500 ms sans changement.
206
+
205
207
  **1.2.20** ajoute un glossaire technique facultatif en un clic avec 60 termes et produits pour les neuf langues. Vos entrées sont prioritaires et gardent leur quota ; aperçu et désactivation sans les supprimer.
206
208
 
207
209
  **1.2.19** ajoute les glossaires par langue, les identifiants DSH, le cache par configuration, l’exclusion du plugin officiel, la protection technique renforcée et la CI Windows/Linux.
package/README.ja.md CHANGED
@@ -1,5 +1,5 @@
1
1
  <p align="center">
2
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/hero.ja.png?v=1.2.20" alt="dsh-think-translate — AI の思考を、あなたの言語で" width="100%" />
2
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/hero.ja.png?v=1.2.21" alt="dsh-think-translate — AI の思考を、あなたの言語で" width="100%" />
3
3
  </p>
4
4
 
5
5
  <p align="center">
@@ -8,9 +8,9 @@
8
8
  </p>
9
9
 
10
10
  <p align="center">
11
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-mit.ja.svg?v=1.2.20" alt="MIT License" />
12
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-local.ja.svg?v=1.2.20" alt="ローカル Ollama" />
13
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-original.ja.svg?v=1.2.20" alt="原文を保持" />
11
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-mit.ja.svg?v=1.2.21" alt="MIT License" />
12
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-local.ja.svg?v=1.2.21" alt="ローカル Ollama" />
13
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-original.ja.svg?v=1.2.21" alt="原文を保持" />
14
14
  </p>
15
15
 
16
16
  <p align="center">
@@ -18,7 +18,7 @@
18
18
  </p>
19
19
 
20
20
  <p align="center">
21
- <a href="#quick-start"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-quick-start.ja.svg?v=1.2.20" alt="簡単インストール" height="24" /></a> &nbsp;·&nbsp; <a href="#demo"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-demo.ja.svg?v=1.2.20" alt="動作デモ" height="24" /></a> &nbsp;·&nbsp; <a href="#features"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-features.ja.svg?v=1.2.20" alt="主な機能" height="24" /></a> &nbsp;·&nbsp; <a href="#comparison"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-comparison.ja.svg?v=1.2.20" alt="公式との比較" height="24" /></a> &nbsp;·&nbsp; <a href="#faq"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-faq.ja.svg?v=1.2.20" alt="よくある質問" height="24" /></a>
21
+ <a href="#quick-start"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-quick-start.ja.svg?v=1.2.21" alt="簡単インストール" height="24" /></a> &nbsp;·&nbsp; <a href="#demo"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-demo.ja.svg?v=1.2.21" alt="動作デモ" height="24" /></a> &nbsp;·&nbsp; <a href="#features"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-features.ja.svg?v=1.2.21" alt="主な機能" height="24" /></a> &nbsp;·&nbsp; <a href="#comparison"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-comparison.ja.svg?v=1.2.21" alt="公式との比較" height="24" /></a> &nbsp;·&nbsp; <a href="#faq"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-faq.ja.svg?v=1.2.21" alt="よくある質問" height="24" /></a>
22
22
  </p>
23
23
 
24
24
  ---
@@ -29,10 +29,10 @@
29
29
  <table>
30
30
  <tr>
31
31
  <td width="50%" align="center" valign="bottom">
32
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/demo/demo.gif?v=1.2.20" alt="デモ1 · 思考と回答の翻訳" width="100%" />
32
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/demo/demo.gif?v=1.2.21" alt="デモ1 · 思考と回答の翻訳" width="100%" />
33
33
  </td>
34
34
  <td width="50%" align="center" valign="bottom">
35
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/demo/demo2.gif?v=1.2.20" alt="デモ2 · その他の操作" width="100%" />
35
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/demo/demo2.gif?v=1.2.21" alt="デモ2 · その他の操作" width="100%" />
36
36
  </td>
37
37
  </tr>
38
38
  <tr>
@@ -45,7 +45,7 @@
45
45
  ## 公式翻訳プラグインとの比較
46
46
 
47
47
  <p align="center">
48
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/translation-comparison.ja.png?v=1.2.20" alt="公式翻訳プラグインとの比較" width="100%" />
48
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/translation-comparison.ja.png?v=1.2.21" alt="公式翻訳プラグインとの比較" width="100%" />
49
49
  </p>
50
50
 
51
51
  本プラグインか公式思考翻訳のどちらか一方を有効にしてください。両者とも思考表示を担当します。
@@ -202,6 +202,8 @@ DeepSeek Harness のリポジトリで `pnpm run build` を実行し、DSH Web
202
202
  <details>
203
203
  <summary><b>最近の更新と互換性</b></summary>
204
204
 
205
+ **1.2.21** タスクの連続更新で翻訳リクエストが増える問題を修正(#17)。500 ms 更新がなければ翻訳します。
206
+
205
207
  **1.2.20** 内蔵の技術用語集をワンクリックで有効化。60 件の用語と製品名を 9 言語に対応させ、カスタム訳を優先します。追加枠は独立し、一覧表示と無効化でもカスタム用語は保持されます。
206
208
 
207
209
  **1.2.19**:言語別用語集、DSH 資格情報によるキー保管、設定別キャッシュ、公式プラグインとの排他制御、技術文の保護強化、Windows/Linux CI を追加。
package/README.ko.md CHANGED
@@ -1,5 +1,5 @@
1
1
  <p align="center">
2
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/hero.ko.png?v=1.2.20" alt="dsh-think-translate — AI의 생각을 당신의 언어로" width="100%" />
2
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/hero.ko.png?v=1.2.21" alt="dsh-think-translate — AI의 생각을 당신의 언어로" width="100%" />
3
3
  </p>
4
4
 
5
5
  <p align="center">
@@ -8,9 +8,9 @@
8
8
  </p>
9
9
 
10
10
  <p align="center">
11
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-mit.ko.svg?v=1.2.20" alt="MIT License" />
12
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-local.ko.svg?v=1.2.20" alt="로컬 Ollama" />
13
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-original.ko.svg?v=1.2.20" alt="원문 보존" />
11
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-mit.ko.svg?v=1.2.21" alt="MIT License" />
12
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-local.ko.svg?v=1.2.21" alt="로컬 Ollama" />
13
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-original.ko.svg?v=1.2.21" alt="원문 보존" />
14
14
  </p>
15
15
 
16
16
  <p align="center">
@@ -18,7 +18,7 @@
18
18
  </p>
19
19
 
20
20
  <p align="center">
21
- <a href="#quick-start"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-quick-start.ko.svg?v=1.2.20" alt="빠른 설치" height="24" /></a> &nbsp;·&nbsp; <a href="#demo"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-demo.ko.svg?v=1.2.20" alt="실제 데모" height="24" /></a> &nbsp;·&nbsp; <a href="#features"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-features.ko.svg?v=1.2.20" alt="핵심 기능" height="24" /></a> &nbsp;·&nbsp; <a href="#comparison"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-comparison.ko.svg?v=1.2.20" alt="공식 비교" height="24" /></a> &nbsp;·&nbsp; <a href="#faq"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-faq.ko.svg?v=1.2.20" alt="자주 묻는 질문" height="24" /></a>
21
+ <a href="#quick-start"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-quick-start.ko.svg?v=1.2.21" alt="빠른 설치" height="24" /></a> &nbsp;·&nbsp; <a href="#demo"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-demo.ko.svg?v=1.2.21" alt="실제 데모" height="24" /></a> &nbsp;·&nbsp; <a href="#features"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-features.ko.svg?v=1.2.21" alt="핵심 기능" height="24" /></a> &nbsp;·&nbsp; <a href="#comparison"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-comparison.ko.svg?v=1.2.21" alt="공식 비교" height="24" /></a> &nbsp;·&nbsp; <a href="#faq"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-faq.ko.svg?v=1.2.21" alt="자주 묻는 질문" height="24" /></a>
22
22
  </p>
23
23
 
24
24
  ---
@@ -29,10 +29,10 @@
29
29
  <table>
30
30
  <tr>
31
31
  <td width="50%" align="center" valign="bottom">
32
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/demo/demo.gif?v=1.2.20" alt="데모 1 · 사고 과정과 답변 번역" width="100%" />
32
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/demo/demo.gif?v=1.2.21" alt="데모 1 · 사고 과정과 답변 번역" width="100%" />
33
33
  </td>
34
34
  <td width="50%" align="center" valign="bottom">
35
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/demo/demo2.gif?v=1.2.20" alt="데모 2 · 더 많은 실제 조작" width="100%" />
35
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/demo/demo2.gif?v=1.2.21" alt="데모 2 · 더 많은 실제 조작" width="100%" />
36
36
  </td>
37
37
  </tr>
38
38
  <tr>
@@ -45,7 +45,7 @@
45
45
  ## 공식 번역 플러그인과 비교
46
46
 
47
47
  <p align="center">
48
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/translation-comparison.ko.png?v=1.2.20" alt="공식 번역 플러그인과 비교" width="100%" />
48
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/translation-comparison.ko.png?v=1.2.21" alt="공식 번역 플러그인과 비교" width="100%" />
49
49
  </p>
50
50
 
51
51
  이 플러그인과 공식 사고 번역 중 하나만 활성화하세요. 둘 다 사고 화면을 담당합니다.
@@ -202,6 +202,8 @@ DeepSeek Harness 저장소에서 `pnpm run build`를 실행한 뒤 DSH Web을
202
202
  <details>
203
203
  <summary><b>최근 변경 및 호환성</b></summary>
204
204
 
205
+ **1.2.21** 작업이 빠르게 갱신될 때 번역 요청이 반복되는 문제를 수정했습니다(#17). 텍스트가 500ms 동안 바뀌지 않으면 번역합니다.
206
+
205
207
  **1.2.20** 클릭 한 번으로 켜는 기술 용어집을 추가합니다. 60개 용어와 제품명을 9개 언어로 제공하며 사용자 용어가 우선합니다. 추가 한도는 별도이고 미리 보거나 꺼도 사용자 용어는 유지됩니다.
206
208
 
207
209
  **1.2.19**: 언어별 용어집, DSH 자격 증명 저장소, 설정별 캐시, 공식 플러그인과의 상호 배제, 기술 텍스트 보호 강화 및 Windows/Linux CI를 추가했습니다.
package/README.md CHANGED
@@ -1,5 +1,5 @@
1
1
  <p align="center">
2
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/hero.en.png?v=1.2.20" alt="dsh-think-translate — AI thinking, in your language" width="100%" />
2
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/hero.en.png?v=1.2.21" alt="dsh-think-translate — AI thinking, in your language" width="100%" />
3
3
  </p>
4
4
 
5
5
  <p align="center">
@@ -8,9 +8,9 @@
8
8
  </p>
9
9
 
10
10
  <p align="center">
11
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-mit.en.svg?v=1.2.20" alt="MIT License" />
12
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-local.en.svg?v=1.2.20" alt="Local Ollama" />
13
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-original.en.svg?v=1.2.20" alt="Originals preserved" />
11
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-mit.en.svg?v=1.2.21" alt="MIT License" />
12
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-local.en.svg?v=1.2.21" alt="Local Ollama" />
13
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-original.en.svg?v=1.2.21" alt="Originals preserved" />
14
14
  </p>
15
15
 
16
16
  <p align="center">
@@ -18,7 +18,7 @@
18
18
  </p>
19
19
 
20
20
  <p align="center">
21
- <a href="#quick-start"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-quick-start.en.svg?v=1.2.20" alt="Quick install" height="24" /></a> &nbsp;·&nbsp; <a href="#demo"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-demo.en.svg?v=1.2.20" alt="Live demos" height="24" /></a> &nbsp;·&nbsp; <a href="#features"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-features.en.svg?v=1.2.20" alt="Features" height="24" /></a> &nbsp;·&nbsp; <a href="#comparison"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-comparison.en.svg?v=1.2.20" alt="Official comparison" height="24" /></a> &nbsp;·&nbsp; <a href="#faq"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-faq.en.svg?v=1.2.20" alt="FAQ" height="24" /></a>
21
+ <a href="#quick-start"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-quick-start.en.svg?v=1.2.21" alt="Quick install" height="24" /></a> &nbsp;·&nbsp; <a href="#demo"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-demo.en.svg?v=1.2.21" alt="Live demos" height="24" /></a> &nbsp;·&nbsp; <a href="#features"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-features.en.svg?v=1.2.21" alt="Features" height="24" /></a> &nbsp;·&nbsp; <a href="#comparison"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-comparison.en.svg?v=1.2.21" alt="Official comparison" height="24" /></a> &nbsp;·&nbsp; <a href="#faq"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-faq.en.svg?v=1.2.21" alt="FAQ" height="24" /></a>
22
22
  </p>
23
23
 
24
24
  ---
@@ -29,10 +29,10 @@
29
29
  <table>
30
30
  <tr>
31
31
  <td width="50%" align="center" valign="bottom">
32
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/demo/demo.gif?v=1.2.20" alt="Demo 1 · Reasoning and answers" width="100%" />
32
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/demo/demo.gif?v=1.2.21" alt="Demo 1 · Reasoning and answers" width="100%" />
33
33
  </td>
34
34
  <td width="50%" align="center" valign="bottom">
35
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/demo/demo2.gif?v=1.2.20" alt="Demo 2 · More live operations" width="100%" />
35
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/demo/demo2.gif?v=1.2.21" alt="Demo 2 · More live operations" width="100%" />
36
36
  </td>
37
37
  </tr>
38
38
  <tr>
@@ -45,7 +45,7 @@
45
45
  ## Comparison with the official translation plugin
46
46
 
47
47
  <p align="center">
48
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/translation-comparison.en.png?v=1.2.20" alt="Comparison with the official translation plugin" width="100%" />
48
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/translation-comparison.en.png?v=1.2.21" alt="Comparison with the official translation plugin" width="100%" />
49
49
  </p>
50
50
 
51
51
  Enable either this plugin or the official reasoning translator. Both take over the reasoning interface. While the official plugin is enabled, this plugin yields its translation views and displays a conflict notice. It resumes when the official plugin is disabled, without changing the official plugin's configuration.
@@ -205,6 +205,8 @@ When all enabled providers fail, the original remains. Test individual providers
205
205
  <details>
206
206
  <summary><b>Recent changes and compatibility</b></summary>
207
207
 
208
+ **1.2.21** Fixes repeated translation requests during rapid task updates (#17). Task text is translated after 500 ms without changes.
209
+
208
210
  **1.2.20** adds an opt-in, one-click technical glossary with 60 terms and product names for all nine target languages. Custom entries override built-ins and retain their own allowance; preview and disable the preset without removing custom entries.
209
211
 
210
212
  **1.2.19** adds per-language glossaries, DSH-managed credentials, configuration-aware caches, official-plugin mutual exclusion, stronger technical-text protection and Windows/Linux CI.
package/README.pt.md CHANGED
@@ -1,5 +1,5 @@
1
1
  <p align="center">
2
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/hero.pt.png?v=1.2.20" alt="dsh-think-translate — O pensamento da IA, no seu idioma" width="100%" />
2
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/hero.pt.png?v=1.2.21" alt="dsh-think-translate — O pensamento da IA, no seu idioma" width="100%" />
3
3
  </p>
4
4
 
5
5
  <p align="center">
@@ -8,9 +8,9 @@
8
8
  </p>
9
9
 
10
10
  <p align="center">
11
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-mit.pt.svg?v=1.2.20" alt="Licença MIT" />
12
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-local.pt.svg?v=1.2.20" alt="Ollama local" />
13
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-original.pt.svg?v=1.2.20" alt="Originais preservados" />
11
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-mit.pt.svg?v=1.2.21" alt="Licença MIT" />
12
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-local.pt.svg?v=1.2.21" alt="Ollama local" />
13
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-original.pt.svg?v=1.2.21" alt="Originais preservados" />
14
14
  </p>
15
15
 
16
16
  <p align="center">
@@ -18,7 +18,7 @@
18
18
  </p>
19
19
 
20
20
  <p align="center">
21
- <a href="#quick-start"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-quick-start.pt.svg?v=1.2.20" alt="Instalação" height="24" /></a> &nbsp;·&nbsp; <a href="#demo"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-demo.pt.svg?v=1.2.20" alt="Demonstrações" height="24" /></a> &nbsp;·&nbsp; <a href="#features"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-features.pt.svg?v=1.2.20" alt="Recursos" height="24" /></a> &nbsp;·&nbsp; <a href="#comparison"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-comparison.pt.svg?v=1.2.20" alt="Comparação" height="24" /></a> &nbsp;·&nbsp; <a href="#faq"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-faq.pt.svg?v=1.2.20" alt="Perguntas" height="24" /></a>
21
+ <a href="#quick-start"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-quick-start.pt.svg?v=1.2.21" alt="Instalação" height="24" /></a> &nbsp;·&nbsp; <a href="#demo"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-demo.pt.svg?v=1.2.21" alt="Demonstrações" height="24" /></a> &nbsp;·&nbsp; <a href="#features"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-features.pt.svg?v=1.2.21" alt="Recursos" height="24" /></a> &nbsp;·&nbsp; <a href="#comparison"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-comparison.pt.svg?v=1.2.21" alt="Comparação" height="24" /></a> &nbsp;·&nbsp; <a href="#faq"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-faq.pt.svg?v=1.2.21" alt="Perguntas" height="24" /></a>
22
22
  </p>
23
23
 
24
24
  ---
@@ -29,10 +29,10 @@
29
29
  <table>
30
30
  <tr>
31
31
  <td width="50%" align="center" valign="bottom">
32
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/demo/demo.gif?v=1.2.20" alt="Demo 1 · Raciocínio e respostas" width="100%" />
32
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/demo/demo.gif?v=1.2.21" alt="Demo 1 · Raciocínio e respostas" width="100%" />
33
33
  </td>
34
34
  <td width="50%" align="center" valign="bottom">
35
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/demo/demo2.gif?v=1.2.20" alt="Demo 2 · Mais operações" width="100%" />
35
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/demo/demo2.gif?v=1.2.21" alt="Demo 2 · Mais operações" width="100%" />
36
36
  </td>
37
37
  </tr>
38
38
  <tr>
@@ -45,7 +45,7 @@
45
45
  ## Comparação com o plugin oficial de tradução
46
46
 
47
47
  <p align="center">
48
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/translation-comparison.pt.png?v=1.2.20" alt="Comparação com o plugin oficial de tradução" width="100%" />
48
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/translation-comparison.pt.png?v=1.2.21" alt="Comparação com o plugin oficial de tradução" width="100%" />
49
49
  </p>
50
50
 
51
51
  Ative este plugin ou o tradutor oficial de raciocínio. Ambos controlam a interface de raciocínio.
@@ -202,6 +202,8 @@ Se todos os provedores ativados falharem, o original permanece. Teste cada prove
202
202
  <details>
203
203
  <summary><b>Atualizações e compatibilidade</b></summary>
204
204
 
205
+ **1.2.21** Corrige solicitações repetidas de tradução quando as tarefas mudam rapidamente (#17). O texto é traduzido após 500 ms sem alterações.
206
+
205
207
  **1.2.20** adiciona um glossário técnico opcional de um clique com 60 termos e produtos nos nove idiomas. Suas entradas têm prioridade e limite independente; é possível consultar e desativar sem removê-las.
206
208
 
207
209
  **1.2.19** adiciona glossários por idioma, credenciais gerenciadas pelo DSH, caches por configuração, exclusão com o plugin oficial, proteção técnica reforçada e CI Windows/Linux.
package/README.ru.md CHANGED
@@ -1,5 +1,5 @@
1
1
  <p align="center">
2
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/hero.ru.png?v=1.2.20" alt="dsh-think-translate — Мысли ИИ — на вашем языке" width="100%" />
2
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/hero.ru.png?v=1.2.21" alt="dsh-think-translate — Мысли ИИ — на вашем языке" width="100%" />
3
3
  </p>
4
4
 
5
5
  <p align="center">
@@ -8,9 +8,9 @@
8
8
  </p>
9
9
 
10
10
  <p align="center">
11
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-mit.ru.svg?v=1.2.20" alt="Лицензия MIT" />
12
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-local.ru.svg?v=1.2.20" alt="Локальный Ollama" />
13
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-original.ru.svg?v=1.2.20" alt="Оригиналы сохранены" />
11
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-mit.ru.svg?v=1.2.21" alt="Лицензия MIT" />
12
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-local.ru.svg?v=1.2.21" alt="Локальный Ollama" />
13
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-original.ru.svg?v=1.2.21" alt="Оригиналы сохранены" />
14
14
  </p>
15
15
 
16
16
  <p align="center">
@@ -18,7 +18,7 @@
18
18
  </p>
19
19
 
20
20
  <p align="center">
21
- <a href="#quick-start"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-quick-start.ru.svg?v=1.2.20" alt="Установка" height="24" /></a> &nbsp;·&nbsp; <a href="#demo"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-demo.ru.svg?v=1.2.20" alt="Демонстрации" height="24" /></a> &nbsp;·&nbsp; <a href="#features"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-features.ru.svg?v=1.2.20" alt="Возможности" height="24" /></a> &nbsp;·&nbsp; <a href="#comparison"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-comparison.ru.svg?v=1.2.20" alt="Сравнение" height="24" /></a> &nbsp;·&nbsp; <a href="#faq"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-faq.ru.svg?v=1.2.20" alt="Вопросы" height="24" /></a>
21
+ <a href="#quick-start"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-quick-start.ru.svg?v=1.2.21" alt="Установка" height="24" /></a> &nbsp;·&nbsp; <a href="#demo"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-demo.ru.svg?v=1.2.21" alt="Демонстрации" height="24" /></a> &nbsp;·&nbsp; <a href="#features"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-features.ru.svg?v=1.2.21" alt="Возможности" height="24" /></a> &nbsp;·&nbsp; <a href="#comparison"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-comparison.ru.svg?v=1.2.21" alt="Сравнение" height="24" /></a> &nbsp;·&nbsp; <a href="#faq"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-faq.ru.svg?v=1.2.21" alt="Вопросы" height="24" /></a>
22
22
  </p>
23
23
 
24
24
  ---
@@ -29,10 +29,10 @@
29
29
  <table>
30
30
  <tr>
31
31
  <td width="50%" align="center" valign="bottom">
32
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/demo/demo.gif?v=1.2.20" alt="Демо 1 · Рассуждения и ответы" width="100%" />
32
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/demo/demo.gif?v=1.2.21" alt="Демо 1 · Рассуждения и ответы" width="100%" />
33
33
  </td>
34
34
  <td width="50%" align="center" valign="bottom">
35
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/demo/demo2.gif?v=1.2.20" alt="Демо 2 · Другие операции" width="100%" />
35
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/demo/demo2.gif?v=1.2.21" alt="Демо 2 · Другие операции" width="100%" />
36
36
  </td>
37
37
  </tr>
38
38
  <tr>
@@ -45,7 +45,7 @@
45
45
  ## Сравнение с официальным плагином перевода
46
46
 
47
47
  <p align="center">
48
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/translation-comparison.ru.png?v=1.2.20" alt="Сравнение с официальным плагином перевода" width="100%" />
48
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/translation-comparison.ru.png?v=1.2.21" alt="Сравнение с официальным плагином перевода" width="100%" />
49
49
  </p>
50
50
 
51
51
  Включайте этот плагин или официальный переводчик рассуждений. Оба управляют интерфейсом рассуждений.
@@ -202,6 +202,8 @@ reasoning => рассуждение
202
202
  <details>
203
203
  <summary><b>Изменения и совместимость</b></summary>
204
204
 
205
+ **1.2.21** Исправляет повторные запросы перевода при быстрых обновлениях задач (#17). Перевод начинается после 500 мс без изменений.
206
+
205
207
  **1.2.20** добавляет включаемый одним нажатием технический глоссарий из 60 терминов и названий продуктов для девяти языков. Ваши записи приоритетны и имеют отдельный лимит; просмотр и отключение их не удаляют.
206
208
 
207
209
  **1.2.19**: глоссарии по языкам, хранение ключей в DSH, кеш по настройкам, взаимное исключение с официальным плагином, усиленная защита технического текста и CI Windows/Linux.
package/README.zh-CN.md CHANGED
@@ -1,5 +1,5 @@
1
1
  <p align="center">
2
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/hero.zh-CN.png?v=1.2.20" width="100%" alt="dsh-think-translate:让 AI 的思考,用你的语言呈现" />
2
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/hero.zh-CN.png?v=1.2.21" width="100%" alt="dsh-think-translate:让 AI 的思考,用你的语言呈现" />
3
3
  </p>
4
4
 
5
5
  <p align="center">
@@ -8,9 +8,9 @@
8
8
  </p>
9
9
 
10
10
  <p align="center">
11
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-mit.zh-CN.svg?v=1.2.20" alt="MIT License" />
12
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-local.zh-CN.svg?v=1.2.20" alt="支持本地 Ollama" />
13
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-original.zh-CN.svg?v=1.2.20" alt="保留原文与模型上下文" />
11
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-mit.zh-CN.svg?v=1.2.21" alt="MIT License" />
12
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-local.zh-CN.svg?v=1.2.21" alt="支持本地 Ollama" />
13
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-original.zh-CN.svg?v=1.2.21" alt="保留原文与模型上下文" />
14
14
  </p>
15
15
 
16
16
  <p align="center">
@@ -18,7 +18,7 @@
18
18
  </p>
19
19
 
20
20
  <p align="center">
21
- <a href="#quick-start"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-quick-start.zh-CN.svg?v=1.2.20" alt="快速安装" height="24" /></a> &nbsp;·&nbsp; <a href="#demo"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-demo.zh-CN.svg?v=1.2.20" alt="实际演示" height="24" /></a> &nbsp;·&nbsp; <a href="#features"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-features.zh-CN.svg?v=1.2.20" alt="核心能力" height="24" /></a> &nbsp;·&nbsp; <a href="#comparison"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-comparison.zh-CN.svg?v=1.2.20" alt="官方对比" height="24" /></a> &nbsp;·&nbsp; <a href="#faq"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-faq.zh-CN.svg?v=1.2.20" alt="常见问题" height="24" /></a>
21
+ <a href="#quick-start"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-quick-start.zh-CN.svg?v=1.2.21" alt="快速安装" height="24" /></a> &nbsp;·&nbsp; <a href="#demo"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-demo.zh-CN.svg?v=1.2.21" alt="实际演示" height="24" /></a> &nbsp;·&nbsp; <a href="#features"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-features.zh-CN.svg?v=1.2.21" alt="核心能力" height="24" /></a> &nbsp;·&nbsp; <a href="#comparison"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-comparison.zh-CN.svg?v=1.2.21" alt="官方对比" height="24" /></a> &nbsp;·&nbsp; <a href="#faq"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-faq.zh-CN.svg?v=1.2.21" alt="常见问题" height="24" /></a>
22
22
  </p>
23
23
 
24
24
  ---
@@ -29,10 +29,10 @@
29
29
  <table>
30
30
  <tr>
31
31
  <td width="50%" align="center" valign="bottom">
32
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/demo/demo.gif?v=1.2.20" width="100%" alt="思考链与回答翻译的实际操作演示" />
32
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/demo/demo.gif?v=1.2.21" width="100%" alt="思考链与回答翻译的实际操作演示" />
33
33
  </td>
34
34
  <td width="50%" align="center" valign="bottom">
35
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/demo/demo2.gif?v=1.2.20" width="100%" alt="dsh-think-translate 第二段实际操作演示" />
35
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/demo/demo2.gif?v=1.2.21" width="100%" alt="dsh-think-translate 第二段实际操作演示" />
36
36
  </td>
37
37
  </tr>
38
38
  <tr>
@@ -49,7 +49,7 @@
49
49
  ## 与官方翻译插件对比
50
50
 
51
51
  <p align="center">
52
- <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/translation-comparison.zh-CN.png?v=1.2.20" width="100%" alt="与官方翻译插件的功能和首次上线日期对比" />
52
+ <img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/translation-comparison.zh-CN.png?v=1.2.21" width="100%" alt="与官方翻译插件的功能和首次上线日期对比" />
53
53
  </p>
54
54
 
55
55
  本插件与官方思考翻译都接管思考界面,请二选一启用。检测到官方插件启用时,本插件暂停翻译并显示冲突提示;关闭官方插件后自动恢复,不会修改官方插件的启用状态。
@@ -213,6 +213,8 @@ reasoning => 思考过程
213
213
  <details>
214
214
  <summary><b>最近更新与兼容性</b></summary>
215
215
 
216
+ **1.2.21** 修复 #17 中待办文本频繁更新时重复触发翻译的问题。参数生成期间显示原文,文本稳定 500 毫秒后翻译。
217
+
216
218
  **1.2.20** 增加 60 条常用技术术语的九语言内置词表,内置和自定义独立勾选;自定义词条优先、额度独立。新增未保存提醒,并改进宽屏布局。
217
219
 
218
220
  **1.2.19** 增加按目标语言保存的术语表、DSH 凭据保护、配置感知缓存、官方插件互斥提示、技术文本保护与 Windows/Linux CI。
package/lib/client.js CHANGED
@@ -23,7 +23,7 @@ window.__ModuleLoader__.load({
23
23
  // there yet (an older process still serving the port), and the contract test
24
24
  // pins PLUGIN_VERSION to package.json so the two can never drift.
25
25
  var PLUGIN_NAME = "dsh-think-translate";
26
- var PLUGIN_VERSION = "1.2.20";
26
+ var PLUGIN_VERSION = "1.2.21";
27
27
  var PLUGIN_REPO = "https://github.com/UncleK/dsh-think-translate";
28
28
  // The official MarkdownText contract changed in 0.1.2-alpha: it now takes a
29
29
  // nested `labels` object and dereferences it without defaults inside its code
@@ -841,31 +841,31 @@ window.__ModuleLoader__.load({
841
841
  ["keySaved", "keyClear", "conflictTitle", "conflictMessage", "exclusiveNote", "contextUnavailable"].forEach(function (key, index) { UI_TEXT[lang][key] = SAFETY_TEXT[lang][index]; });
842
842
  });
843
843
 
844
- var GLOSSARY_TEXT = {
845
- "zh-CN": ["术语表","为当前目标语言固定译法,每行“原词 => 译词”。英文按完整词匹配且不区分大小写;代码、路径不替换。保存后旧译文缓存失效。","启用自定义词条","保存术语表","保存中…","术语表已保存","第 {n} 行格式不正确或原词重复,请使用“原词 => 译词”。","每种语言最多 128 条;原词最多 128 字符,译词最多 256 字符。","DeepSeek => DeepSeek\nagent => 智能体\nreasoning => 思考过程","宿主未接收术语表,请更新插件并重启。"],
846
- "en": ["Glossary","Fix terms for the current target language, one source => translation per line. English matches whole words, ignoring case. Code and paths stay intact. Saving invalidates old translations.","Enable custom entries","Save glossary","Saving…","Glossary saved","Invalid or duplicate source at line {n}. Use source => translation.","Up to 128 entries per language; source up to 128 characters, translation up to 256.","DeepSeek => DeepSeek\n智能体 => AI agent\n思考过程 => reasoning","The Host did not accept the glossary. Update the plugin and restart."],
847
- "ja": ["用語集","対象言語の訳語を固定します。1 行に 原語 => 訳語。英単語は大文字小文字を区別せず単語全体に一致します。コードとパスは変更しません。保存時に旧訳のキャッシュを無効化します。","カスタム用語を有効化","用語集を保存","保存中…","用語集を保存しました","{n} 行目の形式または原語の重複を確認してください。原語 => 訳語 を使用します。","各言語 128 件まで。原語は 128 文字、訳語は 256 文字まで。","DeepSeek => DeepSeek\nagent => エージェント\nreasoning => 推論","Host が用語集を受け付けませんでした。プラグインを更新して再起動してください。"],
848
- "ko": ["용어집","현재 대상 언어의 번역을 고정합니다. 한 줄에 원문 => 번역을 입력하세요. 영어는 대소문자 구분 없이 단어 전체를 일치시킵니다. 코드와 경로는 유지되며 저장 시 이전 번역 캐시가 무효화됩니다.","사용자 용어 사용","용어집 저장","저장 중…","용어집을 저장했습니다","{n}번째 줄의 형식이나 중복 원문을 확인하세요. 원문 => 번역 형식을 사용하세요.","언어별 최대 128개. 원문 128자, 번역 256자까지.","DeepSeek => DeepSeek\nagent => 에이전트\nreasoning => 추론","호스트가 용어집을 받지 못했습니다. 플러그인을 업데이트하고 재시작하세요."],
849
- "es": ["Glosario","Fija términos para el idioma de destino: un original => traducción por línea. Las palabras inglesas se comparan completas sin distinguir mayúsculas. Se conservan código y rutas. Guardar invalida la caché anterior.","Activar entradas propias","Guardar glosario","Guardando…","Glosario guardado","Formato inválido u original duplicado en la línea {n}. Usa original => traducción.","Hasta 128 entradas por idioma; original de 128 caracteres y traducción de 256 como máximo.","DeepSeek => DeepSeek\nagent => agente\nreasoning => razonamiento","El Host no aceptó el glosario. Actualiza el complemento y reinicia."],
850
- "fr": ["Glossaire","Fixez les termes pour la langue cible : un original => traduction par ligne. Les mots anglais correspondent en entier sans tenir compte de la casse. Code et chemins restent intacts. Enregistrer invalide le cache précédent.","Activer mes entrées","Enregistrer le glossaire","Enregistrement…","Glossaire enregistré","Format incorrect ou original en double à la ligne {n}. Utilisez original => traduction.","128 entrées par langue ; original de 128 caractères et traduction de 256 au maximum.","DeepSeek => DeepSeek\nagent => agent\nreasoning => raisonnement","Le Host a refusé le glossaire. Mettez le plugin à jour et redémarrez."],
851
- "de": ["Glossar","Begriffe für die Zielsprache festlegen: ein Original => Übersetzung pro Zeile. Englische Wörter werden vollständig ohne Beachtung der Großschreibung erkannt. Code und Pfade bleiben erhalten. Speichern verwirft alte Übersetzungen.","Eigene Einträge aktivieren","Glossar speichern","Wird gespeichert…","Glossar gespeichert","Ungültiges oder doppeltes Original in Zeile {n}. Original => Übersetzung verwenden.","Bis zu 128 Einträge je Sprache; Original bis 128 Zeichen, Übersetzung bis 256.","DeepSeek => DeepSeek\nagent => Agent\nreasoning => Schlussfolgern","Der Host hat das Glossar nicht angenommen. Plugin aktualisieren und neu starten."],
852
- "ru": ["Глоссарий","Задайте термины для языка перевода: оригинал => перевод, по одному на строку. Английские слова сопоставляются целиком без учёта регистра. Код и пути сохраняются. Сохранение сбрасывает старые переводы.","Включить свои записи","Сохранить глоссарий","Сохранение…","Глоссарий сохранён","Неверный формат или повтор оригинала в строке {n}. Используйте оригинал => перевод.","До 128 записей на язык; оригинал до 128 символов, перевод до 256.","DeepSeek => DeepSeek\nagent => агент\nreasoning => рассуждение","Host не принял глоссарий. Обновите плагин и перезапустите."],
853
- "pt": ["Glossário","Fixe termos para o idioma de destino: um original => tradução por linha. Palavras inglesas correspondem inteiras sem distinguir maiúsculas. Código e caminhos permanecem intactos. Salvar invalida traduções antigas.","Ativar entradas próprias","Salvar glossário","Salvando…","Glossário salvo","Formato inválido ou original duplicado na linha {n}. Use original => tradução.","Até 128 entradas por idioma; original até 128 caracteres e tradução até 256.","DeepSeek => DeepSeek\nagent => agente\nreasoning => raciocínio","O Host não aceitou o glossário. Atualize o plugin e reinicie."]
844
+ var GLOSSARY_TEXT = {
845
+ "zh-CN": ["术语表","为当前目标语言固定译法,每行“原词 => 译词”。英文按完整词匹配且不区分大小写;代码、路径不替换。保存后旧译文缓存失效。","启用自定义词条","保存术语表","保存中…","术语表已保存","第 {n} 行格式不正确或原词重复,请使用“原词 => 译词”。","每种语言最多 128 条;原词最多 128 字符,译词最多 256 字符。","DeepSeek => DeepSeek\nagent => 智能体\nreasoning => 思考过程","宿主未接收术语表,请更新插件并重启。"],
846
+ "en": ["Glossary","Fix terms for the current target language, one source => translation per line. English matches whole words, ignoring case. Code and paths stay intact. Saving invalidates old translations.","Enable custom entries","Save glossary","Saving…","Glossary saved","Invalid or duplicate source at line {n}. Use source => translation.","Up to 128 entries per language; source up to 128 characters, translation up to 256.","DeepSeek => DeepSeek\n智能体 => AI agent\n思考过程 => reasoning","The Host did not accept the glossary. Update the plugin and restart."],
847
+ "ja": ["用語集","対象言語の訳語を固定します。1 行に 原語 => 訳語。英単語は大文字小文字を区別せず単語全体に一致します。コードとパスは変更しません。保存時に旧訳のキャッシュを無効化します。","カスタム用語を有効化","用語集を保存","保存中…","用語集を保存しました","{n} 行目の形式または原語の重複を確認してください。原語 => 訳語 を使用します。","各言語 128 件まで。原語は 128 文字、訳語は 256 文字まで。","DeepSeek => DeepSeek\nagent => エージェント\nreasoning => 推論","Host が用語集を受け付けませんでした。プラグインを更新して再起動してください。"],
848
+ "ko": ["용어집","현재 대상 언어의 번역을 고정합니다. 한 줄에 원문 => 번역을 입력하세요. 영어는 대소문자 구분 없이 단어 전체를 일치시킵니다. 코드와 경로는 유지되며 저장 시 이전 번역 캐시가 무효화됩니다.","사용자 용어 사용","용어집 저장","저장 중…","용어집을 저장했습니다","{n}번째 줄의 형식이나 중복 원문을 확인하세요. 원문 => 번역 형식을 사용하세요.","언어별 최대 128개. 원문 128자, 번역 256자까지.","DeepSeek => DeepSeek\nagent => 에이전트\nreasoning => 추론","호스트가 용어집을 받지 못했습니다. 플러그인을 업데이트하고 재시작하세요."],
849
+ "es": ["Glosario","Fija términos para el idioma de destino: un original => traducción por línea. Las palabras inglesas se comparan completas sin distinguir mayúsculas. Se conservan código y rutas. Guardar invalida la caché anterior.","Activar entradas propias","Guardar glosario","Guardando…","Glosario guardado","Formato inválido u original duplicado en la línea {n}. Usa original => traducción.","Hasta 128 entradas por idioma; original de 128 caracteres y traducción de 256 como máximo.","DeepSeek => DeepSeek\nagent => agente\nreasoning => razonamiento","El Host no aceptó el glosario. Actualiza el complemento y reinicia."],
850
+ "fr": ["Glossaire","Fixez les termes pour la langue cible : un original => traduction par ligne. Les mots anglais correspondent en entier sans tenir compte de la casse. Code et chemins restent intacts. Enregistrer invalide le cache précédent.","Activer mes entrées","Enregistrer le glossaire","Enregistrement…","Glossaire enregistré","Format incorrect ou original en double à la ligne {n}. Utilisez original => traduction.","128 entrées par langue ; original de 128 caractères et traduction de 256 au maximum.","DeepSeek => DeepSeek\nagent => agent\nreasoning => raisonnement","Le Host a refusé le glossaire. Mettez le plugin à jour et redémarrez."],
851
+ "de": ["Glossar","Begriffe für die Zielsprache festlegen: ein Original => Übersetzung pro Zeile. Englische Wörter werden vollständig ohne Beachtung der Großschreibung erkannt. Code und Pfade bleiben erhalten. Speichern verwirft alte Übersetzungen.","Eigene Einträge aktivieren","Glossar speichern","Wird gespeichert…","Glossar gespeichert","Ungültiges oder doppeltes Original in Zeile {n}. Original => Übersetzung verwenden.","Bis zu 128 Einträge je Sprache; Original bis 128 Zeichen, Übersetzung bis 256.","DeepSeek => DeepSeek\nagent => Agent\nreasoning => Schlussfolgern","Der Host hat das Glossar nicht angenommen. Plugin aktualisieren und neu starten."],
852
+ "ru": ["Глоссарий","Задайте термины для языка перевода: оригинал => перевод, по одному на строку. Английские слова сопоставляются целиком без учёта регистра. Код и пути сохраняются. Сохранение сбрасывает старые переводы.","Включить свои записи","Сохранить глоссарий","Сохранение…","Глоссарий сохранён","Неверный формат или повтор оригинала в строке {n}. Используйте оригинал => перевод.","До 128 записей на язык; оригинал до 128 символов, перевод до 256.","DeepSeek => DeepSeek\nagent => агент\nreasoning => рассуждение","Host не принял глоссарий. Обновите плагин и перезапустите."],
853
+ "pt": ["Glossário","Fixe termos para o idioma de destino: um original => tradução por linha. Palavras inglesas correspondem inteiras sem distinguir maiúsculas. Código e caminhos permanecem intactos. Salvar invalida traduções antigas.","Ativar entradas próprias","Salvar glossário","Salvando…","Glossário salvo","Formato inválido ou original duplicado na linha {n}. Use original => tradução.","Até 128 entradas por idioma; original até 128 caracteres e tradução até 256.","DeepSeek => DeepSeek\nagent => agente\nreasoning => raciocínio","O Host não aceitou o glossário. Atualize o plugin e reinicie."]
854
854
  };
855
855
  Object.keys(GLOSSARY_TEXT).forEach(function (lang) {
856
856
  ["glossaryTitle", "glossaryHint", "glossaryEnabled", "glossarySave", "glossarySaving", "glossarySaved", "glossaryInvalid", "glossaryLimit", "glossaryPlaceholder", "glossaryUnavailable"].forEach(function (key, index) { UI_TEXT[lang][key] = GLOSSARY_TEXT[lang][index]; });
857
857
  });
858
858
 
859
- var BUILTIN_GLOSSARY_TEXT = {
860
- "zh-CN": ["内置常用技术术语","常用英文 AI、编程术语和产品名,按目标语言提供译法。勾选立即生效,与自定义开关独立。已启用的自定义同名词条优先,额外 128 条额度独立保留。","启用内置词表","查看内置词条({n} 条)","内置词表已启用,立即生效","内置词表已停用,自定义词条保留","自定义补充"],
861
- "en": ["Built-in technical glossary","Common English AI/programming terms and product names for each target language. Applies immediately. The two checkboxes work independently; enabled custom terms override matching built-ins and retain 128 extra slots.","Enable built-in glossary","View built-in terms ({n})","Built-in glossary enabled and applied","Built-in glossary disabled; custom entries kept","Custom additions"],
862
- "ja": ["内蔵の技術用語集","一般的な英語の AI・プログラミング用語と製品名を対象言語に合わせて即時適用します。チェックは独立して動作し、有効なカスタム訳が優先されます。追加枠は別途 128 件です。","内蔵用語集を有効化","内蔵用語を見る({n} 件)","内蔵用語集を有効化し反映しました","内蔵用語集を無効化しました。カスタム用語は保持されます","カスタム用語の追加"],
863
- "ko": ["기본 기술 용어집","일반적인 영어 AI·프로그래밍 용어와 제품명을 대상 언어에 맞게 즉시 적용합니다. 두 체크박스는 독립적입니다. 활성화한 사용자 용어가 우선하고 추가 한도 128개는 별도입니다.","기본 용어집 사용","기본 용어 보기 ({n}개)","기본 용어집을 켜고 적용했습니다","기본 용어집을 껐습니다. 사용자 용어는 유지됩니다","사용자 용어 추가"],
864
- "es": ["Glosario técnico integrado","Términos ingleses comunes de IA, programación y productos para cada idioma. Aplicación inmediata. Las casillas son independientes; las entradas propias activadas tienen prioridad y 128 espacios adicionales.","Activar glosario integrado","Ver términos integrados ({n})","Glosario integrado activado y aplicado","Glosario integrado desactivado; se conservan las entradas propias","Entradas propias"],
865
- "fr": ["Glossaire technique intégré","Termes anglais courants d’IA, de programmation et produits pour chaque langue. Application immédiate. Les cases sont indépendantes ; vos entrées actives sont prioritaires et gardent 128 places supplémentaires.","Activer le glossaire intégré","Voir les termes intégrés ({n})","Glossaire intégré activé et appliqué","Glossaire intégré désactivé ; vos entrées sont conservées","Ajouts personnels"],
866
- "de": ["Integriertes technisches Glossar","Gängige englische KI- und Programmierbegriffe sowie Produktnamen je Zielsprache. Gilt sofort. Die Kästchen sind unabhängig; aktive eigene Begriffe haben Vorrang und 128 zusätzliche Plätze.","Integriertes Glossar aktivieren","Integrierte Begriffe ansehen ({n})","Integriertes Glossar aktiviert und angewendet","Integriertes Glossar deaktiviert; eigene Einträge bleiben erhalten","Eigene Ergänzungen"],
867
- "ru": ["Встроенный технический глоссарий","Английские термины ИИ, программирования и названия продуктов для языка перевода. Применяется сразу. Флажки независимы; включённые свои записи приоритетны и имеют ещё 128 мест.","Включить встроенный глоссарий","Посмотреть встроенные термины ({n})","Встроенный глоссарий включён и применён","Встроенный глоссарий отключён; ваши записи сохранены","Собственные дополнения"],
868
- "pt": ["Glossário técnico integrado","Termos comuns em inglês de IA, programação e produtos por idioma. Aplicação imediata. As caixas são independentes; suas entradas ativas têm prioridade e 128 espaços adicionais.","Ativar glossário integrado","Ver termos integrados ({n})","Glossário integrado ativado e aplicado","Glossário integrado desativado; suas entradas foram mantidas","Entradas próprias"]
859
+ var BUILTIN_GLOSSARY_TEXT = {
860
+ "zh-CN": ["内置常用技术术语","常用英文 AI、编程术语和产品名,按目标语言提供译法。勾选立即生效,与自定义开关独立。已启用的自定义同名词条优先,额外 128 条额度独立保留。","启用内置词表","查看内置词条({n} 条)","内置词表已启用,立即生效","内置词表已停用,自定义词条保留","自定义补充"],
861
+ "en": ["Built-in technical glossary","Common English AI/programming terms and product names for each target language. Applies immediately. The two checkboxes work independently; enabled custom terms override matching built-ins and retain 128 extra slots.","Enable built-in glossary","View built-in terms ({n})","Built-in glossary enabled and applied","Built-in glossary disabled; custom entries kept","Custom additions"],
862
+ "ja": ["内蔵の技術用語集","一般的な英語の AI・プログラミング用語と製品名を対象言語に合わせて即時適用します。チェックは独立して動作し、有効なカスタム訳が優先されます。追加枠は別途 128 件です。","内蔵用語集を有効化","内蔵用語を見る({n} 件)","内蔵用語集を有効化し反映しました","内蔵用語集を無効化しました。カスタム用語は保持されます","カスタム用語の追加"],
863
+ "ko": ["기본 기술 용어집","일반적인 영어 AI·프로그래밍 용어와 제품명을 대상 언어에 맞게 즉시 적용합니다. 두 체크박스는 독립적입니다. 활성화한 사용자 용어가 우선하고 추가 한도 128개는 별도입니다.","기본 용어집 사용","기본 용어 보기 ({n}개)","기본 용어집을 켜고 적용했습니다","기본 용어집을 껐습니다. 사용자 용어는 유지됩니다","사용자 용어 추가"],
864
+ "es": ["Glosario técnico integrado","Términos ingleses comunes de IA, programación y productos para cada idioma. Aplicación inmediata. Las casillas son independientes; las entradas propias activadas tienen prioridad y 128 espacios adicionales.","Activar glosario integrado","Ver términos integrados ({n})","Glosario integrado activado y aplicado","Glosario integrado desactivado; se conservan las entradas propias","Entradas propias"],
865
+ "fr": ["Glossaire technique intégré","Termes anglais courants d’IA, de programmation et produits pour chaque langue. Application immédiate. Les cases sont indépendantes ; vos entrées actives sont prioritaires et gardent 128 places supplémentaires.","Activer le glossaire intégré","Voir les termes intégrés ({n})","Glossaire intégré activé et appliqué","Glossaire intégré désactivé ; vos entrées sont conservées","Ajouts personnels"],
866
+ "de": ["Integriertes technisches Glossar","Gängige englische KI- und Programmierbegriffe sowie Produktnamen je Zielsprache. Gilt sofort. Die Kästchen sind unabhängig; aktive eigene Begriffe haben Vorrang und 128 zusätzliche Plätze.","Integriertes Glossar aktivieren","Integrierte Begriffe ansehen ({n})","Integriertes Glossar aktiviert und angewendet","Integriertes Glossar deaktiviert; eigene Einträge bleiben erhalten","Eigene Ergänzungen"],
867
+ "ru": ["Встроенный технический глоссарий","Английские термины ИИ, программирования и названия продуктов для языка перевода. Применяется сразу. Флажки независимы; включённые свои записи приоритетны и имеют ещё 128 мест.","Включить встроенный глоссарий","Посмотреть встроенные термины ({n})","Встроенный глоссарий включён и применён","Встроенный глоссарий отключён; ваши записи сохранены","Собственные дополнения"],
868
+ "pt": ["Glossário técnico integrado","Termos comuns em inglês de IA, programação e produtos por idioma. Aplicação imediata. As caixas são independentes; suas entradas ativas têm prioridade e 128 espaços adicionais.","Ativar glossário integrado","Ver termos integrados ({n})","Glossário integrado ativado e aplicado","Glossário integrado desativado; suas entradas foram mantidas","Entradas próprias"]
869
869
  };
870
870
  Object.keys(BUILTIN_GLOSSARY_TEXT).forEach(function (lang) {
871
871
  ["glossaryBuiltinTitle", "glossaryBuiltinHint", "glossaryBuiltinEnabled", "glossaryBuiltinPreview", "glossaryBuiltinOn", "glossaryBuiltinOff", "glossaryCustom"].forEach(function (key, index) { UI_TEXT[lang][key] = BUILTIN_GLOSSARY_TEXT[lang][index]; });
@@ -1405,29 +1405,34 @@ window.__ModuleLoader__.load({
1405
1405
  cacheMemSet(key, entry);
1406
1406
  }
1407
1407
 
1408
- function useXlate(text, enabled) {
1408
+ function useXlate(text, enabled, settleMs) {
1409
1409
  var s = useStore();
1410
1410
  var active = !!(enabled && !s.officialEnabled && s.contextKnown && text && text.trim());
1411
1411
  var key = active ? translationCacheKey(text, s.lang) : null;
1412
- var pair = useState(function () { return key !== null ? cacheMemGet(key) : undefined; });
1413
- var entry = pair[0];
1412
+ var pair = useState(function () {
1413
+ var cached = key !== null ? cacheMemGet(key) : undefined;
1414
+ return cached ? { key: key, result: cached } : undefined;
1415
+ });
1416
+ var entry = pair[0] && pair[0].key === key ? pair[0].result : undefined;
1414
1417
  var setEntry = pair[1];
1415
1418
  useEffect(function () {
1416
1419
  if (!active || key === null) { setEntry(undefined); return undefined; }
1417
1420
  var alive = true;
1418
- var retryTimer = null;
1421
+ var timer = null;
1419
1422
  function attempt() {
1420
1423
  if (!alive) return;
1421
- retryTimer = null;
1424
+ timer = null;
1422
1425
  requestTranslate(text, s.lang).then(function (r) {
1423
1426
  if (!alive) return;
1424
- setEntry(r);
1425
- if (!(r && r.ok)) retryTimer = setTimeout(attempt, Math.max(1, (r && r.retryAt || Date.now() + 30000) - Date.now()));
1427
+ setEntry({ key: key, result: r });
1428
+ if (!(r && r.ok)) timer = setTimeout(attempt, Math.max(1, (r && r.retryAt || Date.now() + 30000) - Date.now()));
1426
1429
  });
1427
1430
  }
1428
- attempt();
1429
- return function () { alive = false; if (retryTimer !== null) clearTimeout(retryTimer); };
1430
- }, [key, active]);
1431
+ var cached = cacheMemGet(key);
1432
+ if (settleMs > 0 && !(cached && cached.ok)) timer = setTimeout(attempt, settleMs);
1433
+ else attempt();
1434
+ return function () { alive = false; if (timer !== null) clearTimeout(timer); };
1435
+ }, [key, active, settleMs]);
1431
1436
  return active && entry && (!entry.cacheNamespace || entry.cacheNamespace === s.cacheNamespace) ? entry : undefined;
1432
1437
  }
1433
1438
 
@@ -2053,10 +2058,11 @@ window.__ModuleLoader__.load({
2053
2058
  }
2054
2059
  return { done: done, total: todos.length, active: active, extra: extra };
2055
2060
  }
2061
+ var TODO_SETTLE_MS = 500;
2056
2062
  function TodoItemLine(props) {
2057
2063
  var s = useStore();
2058
2064
  var content = typeof props.item.content === "string" ? props.item.content : "";
2059
- var tr = useXlate(content, s.todo);
2065
+ var tr = useXlate(content, s.todo && !props.preparing, TODO_SETTLE_MS);
2060
2066
  var hasTr = !!(tr && tr.ok && !tr.skipped && tr.text !== content);
2061
2067
  var glyph = props.item.status === "completed" ? "✓" : props.item.status === "in_progress" ? "◐" : "○";
2062
2068
  return createElement("div", { className: "xl-item" },
@@ -2072,6 +2078,7 @@ window.__ModuleLoader__.load({
2072
2078
  var pair = useState(false);
2073
2079
  var open = pair[0], setOpen = pair[1];
2074
2080
  var block = props.block;
2081
+ var preparing = props.phase === "preparing" || block.phase === "preparing";
2075
2082
  var argsRaw = (("kind" in block) && block.call && typeof block.call.argsRaw === "string" ? block.call.argsRaw : (typeof block.argsRaw === "string" ? block.argsRaw : "")) || "";
2076
2083
  var todos = null;
2077
2084
  try {
@@ -2085,7 +2092,7 @@ window.__ModuleLoader__.load({
2085
2092
  }
2086
2093
  } catch (e) { todos = null; }
2087
2094
  var summary = todos !== null ? planSummaryOf(todos) : null;
2088
- var tr = useXlate(summary && summary.active !== null ? summary.active : null, s.todo);
2095
+ var tr = useXlate(summary && summary.active !== null ? summary.active : null, s.todo && !preparing, TODO_SETTLE_MS);
2089
2096
  var hasTr = !!(tr && tr.ok && !tr.skipped && summary && summary.active !== null && tr.text !== summary.active);
2090
2097
  var head = summary
2091
2098
  ? tt.doneFmt.replace("{d}", String(summary.done)).replace("{t}", String(summary.total))
@@ -2112,7 +2119,7 @@ window.__ModuleLoader__.load({
2112
2119
  ),
2113
2120
  open && todos !== null
2114
2121
  ? createElement("div", { className: "xl-items" }, todos.map(function (it, n) {
2115
- return createElement(TodoItemLine, { key: n, item: it });
2122
+ return createElement(TodoItemLine, { key: n, item: it, preparing: preparing });
2116
2123
  }))
2117
2124
  : null);
2118
2125
  }
@@ -2126,7 +2133,8 @@ window.__ModuleLoader__.load({
2126
2133
  var s = useStore();
2127
2134
  var gid = useId();
2128
2135
  var content = typeof props.item.content === "string" ? props.item.content : "";
2129
- var tr = useXlate(content, s.todo);
2136
+ // The dock receives a todos projection without a Tool call phase.
2137
+ var tr = useXlate(content, s.todo, TODO_SETTLE_MS);
2130
2138
  var hasTr = !!(tr && tr.ok && !tr.skipped && tr.text !== content);
2131
2139
  var status = props.item.status;
2132
2140
  var glyph = null;
@@ -1,54 +1,54 @@
1
- // Curated English technical terms, not an automatic word-by-word dictionary.
2
- // Increment the version whenever a source or translation changes (cache contract).
3
- export const BUILTIN_GLOSSARY_VERSION = 'technical-v1'
4
- const languages = ['zh-CN', 'ja', 'ko', 'es', 'fr', 'de', 'ru', 'pt']
5
- const rows = [
6
- ['AI agent', 'AI 智能体', 'AI エージェント', 'AI 에이전트', 'agente de IA', 'agent IA', 'KI-Agent', 'ИИ-агент', 'agente de IA'],
7
- ['agent', '智能体', 'エージェント', '에이전트', 'agente', 'agent', 'Agent', 'агент', 'agente'],
8
- ['reasoning', '推理', '推論', '추론', 'razonamiento', 'raisonnement', 'Schlussfolgern', 'рассуждение', 'raciocínio'],
9
- ['large language model', '大语言模型', '大規模言語モデル', '대규모 언어 모델', 'modelo de lenguaje de gran tamaño', 'grand modèle de langage', 'großes Sprachmodell', 'большая языковая модель', 'modelo de linguagem de grande porte'],
10
- ['context window', '上下文窗口', 'コンテキストウィンドウ', '컨텍스트 창', 'ventana de contexto', 'fenêtre de contexte', 'Kontextfenster', 'контекстное окно', 'janela de contexto'],
11
- ['chain of thought', '思维链', '思考の連鎖', '사고 과정', 'cadena de pensamiento', 'chaîne de pensée', 'Gedankenkette', 'цепочка рассуждений', 'cadeia de pensamento'],
12
- ['prompt injection', '提示注入', 'プロンプトインジェクション', '프롬프트 주입', 'inyección de instrucciones', 'injection de prompt', 'Prompt-Injection', 'инъекция промпта', 'injeção de prompt'],
13
- ['function calling', '函数调用', '関数呼び出し', '함수 호출', 'llamada a funciones', 'appel de fonctions', 'Funktionsaufruf', 'вызов функций', 'chamada de funções'],
14
- ['tool calling', '工具调用', 'ツール呼び出し', '도구 호출', 'llamada a herramientas', 'appel d’outils', 'Werkzeugaufruf', 'вызов инструментов', 'chamada de ferramentas'],
15
- ['fine-tuning', '微调', 'ファインチューニング', '미세 조정', 'ajuste fino', 'ajustement fin', 'Feinabstimmung', 'дообучение', 'ajuste fino'],
16
- ['retrieval-augmented generation', '检索增强生成', '検索拡張生成', '검색 증강 생성', 'generación aumentada por recuperación', 'génération augmentée par récupération', 'abrufgestützte Generierung', 'генерация с дополнением поиском', 'geração aumentada por recuperação'],
17
- ['embedding', '嵌入向量', '埋め込み', '임베딩', 'representación vectorial', 'plongement vectoriel', 'Einbettung', 'векторное представление', 'representação vetorial'],
18
- ['inference', '推理', '推論', '추론', 'inferencia', 'inférence', 'Inferenz', 'инференс', 'inferência'],
19
- ['provider', '提供方', 'プロバイダー', '제공자', 'proveedor', 'fournisseur', 'Anbieter', 'провайдер', 'provedor'],
20
- ['rate limit', '速率限制', 'レート制限', '요청 속도 제한', 'límite de solicitudes', 'limite de requêtes', 'Ratenbegrenzung', 'ограничение частоты запросов', 'limite de requisições'],
21
- ['API key', 'API 密钥', 'API キー', 'API 키', 'clave de API', 'clé API', 'API-Schlüssel', 'ключ API', 'chave de API'],
22
- ['access token', '访问令牌', 'アクセストークン', '액세스 토큰', 'token de acceso', 'jeton d’accès', 'Zugriffstoken', 'токен доступа', 'token de acesso'],
23
- ['environment variable', '环境变量', '環境変数', '환경 변수', 'variable de entorno', 'variable d’environnement', 'Umgebungsvariable', 'переменная окружения', 'variável de ambiente'],
24
- ['working directory', '工作目录', '作業ディレクトリ', '작업 디렉터리', 'directorio de trabajo', 'répertoire de travail', 'Arbeitsverzeichnis', 'рабочий каталог', 'diretório de trabalho'],
25
- ['command line', '命令行', 'コマンドライン', '명령줄', 'línea de comandos', 'ligne de commande', 'Befehlszeile', 'командная строка', 'linha de comando'],
26
- ['pull request', '拉取请求', 'プルリクエスト', '풀 리퀘스트', 'solicitud de incorporación', 'demande de fusion', 'Pull Request', 'запрос на слияние', 'solicitação de pull'],
27
- ['merge conflict', '合并冲突', 'マージ競合', '병합 충돌', 'conflicto de fusión', 'conflit de fusion', 'Zusammenführungskonflikt', 'конфликт слияния', 'conflito de mesclagem'],
28
- ['version control', '版本控制', 'バージョン管理', '버전 관리', 'control de versiones', 'gestion de versions', 'Versionskontrolle', 'контроль версий', 'controle de versão'],
29
- ['source code', '源代码', 'ソースコード', '소스 코드', 'código fuente', 'code source', 'Quellcode', 'исходный код', 'código-fonte'],
30
- ['dependency injection', '依赖注入', '依存性注入', '의존성 주입', 'inyección de dependencias', 'injection de dépendances', 'Abhängigkeitsinjektion', 'внедрение зависимостей', 'injeção de dependências'],
31
- ['unit test', '单元测试', '単体テスト', '단위 테스트', 'prueba unitaria', 'test unitaire', 'Modultest', 'модульный тест', 'teste unitário'],
32
- ['integration test', '集成测试', '結合テスト', '통합 테스트', 'prueba de integración', 'test d’intégration', 'Integrationstest', 'интеграционный тест', 'teste de integração'],
33
- ['regression test', '回归测试', '回帰テスト', '회귀 테스트', 'prueba de regresión', 'test de régression', 'Regressionstest', 'регрессионный тест', 'teste de regressão'],
34
- ['stack trace', '堆栈跟踪', 'スタックトレース', '스택 추적', 'traza de pila', 'trace de pile', 'Stapelrückverfolgung', 'трассировка стека', 'rastreamento de pilha'],
35
- ['middleware', '中间件', 'ミドルウェア', '미들웨어', 'middleware', 'intergiciel', 'Middleware', 'промежуточное ПО', 'middleware'],
36
- ['callback', '回调', 'コールバック', '콜백', 'función de retorno', 'fonction de rappel', 'Rückruffunktion', 'обратный вызов', 'função de retorno'],
37
- ['deadlock', '死锁', 'デッドロック', '교착 상태', 'interbloqueo', 'interblocage', 'Verklemmung', 'взаимная блокировка', 'impasse'],
38
- ['race condition', '竞态条件', '競合状態', '경쟁 상태', 'condición de carrera', 'condition de concurrence', 'Wettlaufsituation', 'состояние гонки', 'condição de corrida'],
39
- ['memory leak', '内存泄漏', 'メモリリーク', '메모리 누수', 'fuga de memoria', 'fuite de mémoire', 'Speicherleck', 'утечка памяти', 'vazamento de memória'],
40
- ['garbage collection', '垃圾回收', 'ガベージコレクション', '가비지 컬렉션', 'recolección de basura', 'ramasse-miettes', 'Speicherbereinigung', 'сборка мусора', 'coleta de lixo'],
41
- ['cache invalidation', '缓存失效', 'キャッシュの無効化', '캐시 무효화', 'invalidación de caché', 'invalidation du cache', 'Cache-Invalidierung', 'инвалидация кэша', 'invalidação de cache'],
42
- ['load balancing', '负载均衡', '負荷分散', '부하 분산', 'equilibrio de carga', 'répartition de charge', 'Lastverteilung', 'балансировка нагрузки', 'balanceamento de carga'],
43
- ['reverse proxy', '反向代理', 'リバースプロキシ', '리버스 프록시', 'proxy inverso', 'proxy inverse', 'Reverse Proxy', 'обратный прокси', 'proxy reverso'],
44
- ['webhook', 'Webhook', 'Webhook', '웹훅', 'webhook', 'webhook', 'Webhook', 'вебхук', 'webhook'],
45
- ['streaming response', '流式响应', 'ストリーミング応答', '스트리밍 응답', 'respuesta en flujo', 'réponse en continu', 'Streaming-Antwort', 'потоковый ответ', 'resposta em fluxo'],
46
- ['batch processing', '批处理', 'バッチ処理', '일괄 처리', 'procesamiento por lotes', 'traitement par lots', 'Stapelverarbeitung', 'пакетная обработка', 'processamento em lote'],
47
- ['fallback', '失败回退', 'フォールバック', '폴백', 'alternativa de respaldo', 'solution de repli', 'Ausweichlösung', 'резервный вариант', 'alternativa de contingência'],
48
- ]
49
- const preserved = ['DeepSeek', 'Ollama', 'OpenAI', 'Anthropic', 'GitHub', 'Git', 'Node.js', 'JavaScript', 'TypeScript', 'Python', 'React', 'JSON', 'Markdown', 'SDK', 'API', 'CLI', 'LLM', 'RAG']
50
- const entries = Object.fromEntries(['en', ...languages].map(language => [language, Object.freeze([
51
- ...rows.map(row => Object.freeze({ source: row[0], target: language === 'en' ? row[0] : row[languages.indexOf(language) + 1] })),
52
- ...preserved.map(source => Object.freeze({ source, target: source })),
53
- ])]))
54
- export const BUILTIN_GLOSSARY = Object.freeze({ version: BUILTIN_GLOSSARY_VERSION, entries: Object.freeze(entries) })
1
+ // Curated English technical terms, not an automatic word-by-word dictionary.
2
+ // Increment the version whenever a source or translation changes (cache contract).
3
+ export const BUILTIN_GLOSSARY_VERSION = 'technical-v1'
4
+ const languages = ['zh-CN', 'ja', 'ko', 'es', 'fr', 'de', 'ru', 'pt']
5
+ const rows = [
6
+ ['AI agent', 'AI 智能体', 'AI エージェント', 'AI 에이전트', 'agente de IA', 'agent IA', 'KI-Agent', 'ИИ-агент', 'agente de IA'],
7
+ ['agent', '智能体', 'エージェント', '에이전트', 'agente', 'agent', 'Agent', 'агент', 'agente'],
8
+ ['reasoning', '推理', '推論', '추론', 'razonamiento', 'raisonnement', 'Schlussfolgern', 'рассуждение', 'raciocínio'],
9
+ ['large language model', '大语言模型', '大規模言語モデル', '대규모 언어 모델', 'modelo de lenguaje de gran tamaño', 'grand modèle de langage', 'großes Sprachmodell', 'большая языковая модель', 'modelo de linguagem de grande porte'],
10
+ ['context window', '上下文窗口', 'コンテキストウィンドウ', '컨텍스트 창', 'ventana de contexto', 'fenêtre de contexte', 'Kontextfenster', 'контекстное окно', 'janela de contexto'],
11
+ ['chain of thought', '思维链', '思考の連鎖', '사고 과정', 'cadena de pensamiento', 'chaîne de pensée', 'Gedankenkette', 'цепочка рассуждений', 'cadeia de pensamento'],
12
+ ['prompt injection', '提示注入', 'プロンプトインジェクション', '프롬프트 주입', 'inyección de instrucciones', 'injection de prompt', 'Prompt-Injection', 'инъекция промпта', 'injeção de prompt'],
13
+ ['function calling', '函数调用', '関数呼び出し', '함수 호출', 'llamada a funciones', 'appel de fonctions', 'Funktionsaufruf', 'вызов функций', 'chamada de funções'],
14
+ ['tool calling', '工具调用', 'ツール呼び出し', '도구 호출', 'llamada a herramientas', 'appel d’outils', 'Werkzeugaufruf', 'вызов инструментов', 'chamada de ferramentas'],
15
+ ['fine-tuning', '微调', 'ファインチューニング', '미세 조정', 'ajuste fino', 'ajustement fin', 'Feinabstimmung', 'дообучение', 'ajuste fino'],
16
+ ['retrieval-augmented generation', '检索增强生成', '検索拡張生成', '검색 증강 생성', 'generación aumentada por recuperación', 'génération augmentée par récupération', 'abrufgestützte Generierung', 'генерация с дополнением поиском', 'geração aumentada por recuperação'],
17
+ ['embedding', '嵌入向量', '埋め込み', '임베딩', 'representación vectorial', 'plongement vectoriel', 'Einbettung', 'векторное представление', 'representação vetorial'],
18
+ ['inference', '推理', '推論', '추론', 'inferencia', 'inférence', 'Inferenz', 'инференс', 'inferência'],
19
+ ['provider', '提供方', 'プロバイダー', '제공자', 'proveedor', 'fournisseur', 'Anbieter', 'провайдер', 'provedor'],
20
+ ['rate limit', '速率限制', 'レート制限', '요청 속도 제한', 'límite de solicitudes', 'limite de requêtes', 'Ratenbegrenzung', 'ограничение частоты запросов', 'limite de requisições'],
21
+ ['API key', 'API 密钥', 'API キー', 'API 키', 'clave de API', 'clé API', 'API-Schlüssel', 'ключ API', 'chave de API'],
22
+ ['access token', '访问令牌', 'アクセストークン', '액세스 토큰', 'token de acceso', 'jeton d’accès', 'Zugriffstoken', 'токен доступа', 'token de acesso'],
23
+ ['environment variable', '环境变量', '環境変数', '환경 변수', 'variable de entorno', 'variable d’environnement', 'Umgebungsvariable', 'переменная окружения', 'variável de ambiente'],
24
+ ['working directory', '工作目录', '作業ディレクトリ', '작업 디렉터리', 'directorio de trabajo', 'répertoire de travail', 'Arbeitsverzeichnis', 'рабочий каталог', 'diretório de trabalho'],
25
+ ['command line', '命令行', 'コマンドライン', '명령줄', 'línea de comandos', 'ligne de commande', 'Befehlszeile', 'командная строка', 'linha de comando'],
26
+ ['pull request', '拉取请求', 'プルリクエスト', '풀 리퀘스트', 'solicitud de incorporación', 'demande de fusion', 'Pull Request', 'запрос на слияние', 'solicitação de pull'],
27
+ ['merge conflict', '合并冲突', 'マージ競合', '병합 충돌', 'conflicto de fusión', 'conflit de fusion', 'Zusammenführungskonflikt', 'конфликт слияния', 'conflito de mesclagem'],
28
+ ['version control', '版本控制', 'バージョン管理', '버전 관리', 'control de versiones', 'gestion de versions', 'Versionskontrolle', 'контроль версий', 'controle de versão'],
29
+ ['source code', '源代码', 'ソースコード', '소스 코드', 'código fuente', 'code source', 'Quellcode', 'исходный код', 'código-fonte'],
30
+ ['dependency injection', '依赖注入', '依存性注入', '의존성 주입', 'inyección de dependencias', 'injection de dépendances', 'Abhängigkeitsinjektion', 'внедрение зависимостей', 'injeção de dependências'],
31
+ ['unit test', '单元测试', '単体テスト', '단위 테스트', 'prueba unitaria', 'test unitaire', 'Modultest', 'модульный тест', 'teste unitário'],
32
+ ['integration test', '集成测试', '結合テスト', '통합 테스트', 'prueba de integración', 'test d’intégration', 'Integrationstest', 'интеграционный тест', 'teste de integração'],
33
+ ['regression test', '回归测试', '回帰テスト', '회귀 테스트', 'prueba de regresión', 'test de régression', 'Regressionstest', 'регрессионный тест', 'teste de regressão'],
34
+ ['stack trace', '堆栈跟踪', 'スタックトレース', '스택 추적', 'traza de pila', 'trace de pile', 'Stapelrückverfolgung', 'трассировка стека', 'rastreamento de pilha'],
35
+ ['middleware', '中间件', 'ミドルウェア', '미들웨어', 'middleware', 'intergiciel', 'Middleware', 'промежуточное ПО', 'middleware'],
36
+ ['callback', '回调', 'コールバック', '콜백', 'función de retorno', 'fonction de rappel', 'Rückruffunktion', 'обратный вызов', 'função de retorno'],
37
+ ['deadlock', '死锁', 'デッドロック', '교착 상태', 'interbloqueo', 'interblocage', 'Verklemmung', 'взаимная блокировка', 'impasse'],
38
+ ['race condition', '竞态条件', '競合状態', '경쟁 상태', 'condición de carrera', 'condition de concurrence', 'Wettlaufsituation', 'состояние гонки', 'condição de corrida'],
39
+ ['memory leak', '内存泄漏', 'メモリリーク', '메모리 누수', 'fuga de memoria', 'fuite de mémoire', 'Speicherleck', 'утечка памяти', 'vazamento de memória'],
40
+ ['garbage collection', '垃圾回收', 'ガベージコレクション', '가비지 컬렉션', 'recolección de basura', 'ramasse-miettes', 'Speicherbereinigung', 'сборка мусора', 'coleta de lixo'],
41
+ ['cache invalidation', '缓存失效', 'キャッシュの無効化', '캐시 무효화', 'invalidación de caché', 'invalidation du cache', 'Cache-Invalidierung', 'инвалидация кэша', 'invalidação de cache'],
42
+ ['load balancing', '负载均衡', '負荷分散', '부하 분산', 'equilibrio de carga', 'répartition de charge', 'Lastverteilung', 'балансировка нагрузки', 'balanceamento de carga'],
43
+ ['reverse proxy', '反向代理', 'リバースプロキシ', '리버스 프록시', 'proxy inverso', 'proxy inverse', 'Reverse Proxy', 'обратный прокси', 'proxy reverso'],
44
+ ['webhook', 'Webhook', 'Webhook', '웹훅', 'webhook', 'webhook', 'Webhook', 'вебхук', 'webhook'],
45
+ ['streaming response', '流式响应', 'ストリーミング応答', '스트리밍 응답', 'respuesta en flujo', 'réponse en continu', 'Streaming-Antwort', 'потоковый ответ', 'resposta em fluxo'],
46
+ ['batch processing', '批处理', 'バッチ処理', '일괄 처리', 'procesamiento por lotes', 'traitement par lots', 'Stapelverarbeitung', 'пакетная обработка', 'processamento em lote'],
47
+ ['fallback', '失败回退', 'フォールバック', '폴백', 'alternativa de respaldo', 'solution de repli', 'Ausweichlösung', 'резервный вариант', 'alternativa de contingência'],
48
+ ]
49
+ const preserved = ['DeepSeek', 'Ollama', 'OpenAI', 'Anthropic', 'GitHub', 'Git', 'Node.js', 'JavaScript', 'TypeScript', 'Python', 'React', 'JSON', 'Markdown', 'SDK', 'API', 'CLI', 'LLM', 'RAG']
50
+ const entries = Object.fromEntries(['en', ...languages].map(language => [language, Object.freeze([
51
+ ...rows.map(row => Object.freeze({ source: row[0], target: language === 'en' ? row[0] : row[languages.indexOf(language) + 1] })),
52
+ ...preserved.map(source => Object.freeze({ source, target: source })),
53
+ ])]))
54
+ export const BUILTIN_GLOSSARY = Object.freeze({ version: BUILTIN_GLOSSARY_VERSION, entries: Object.freeze(entries) })
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "dsh-think-translate",
3
3
  "description": "Display-layer translation for the DSH web app: thinking chain, task cards, and optional answer text, in 9 target languages (local Ollama / any OpenAI-compatible or Anthropic endpoint / Google / Bing, fail-open)",
4
- "version": "1.2.20",
4
+ "version": "1.2.21",
5
5
  "type": "module",
6
6
  "main": "lib/index.js",
7
7
  "exports": {