dsh-think-translate 1.2.13 → 1.2.16
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 +177 -85
- package/README.es.md +177 -85
- package/README.fr.md +177 -85
- package/README.ja.md +177 -85
- package/README.ko.md +177 -85
- package/README.md +217 -127
- package/README.pt.md +217 -0
- package/README.ru.md +177 -85
- package/README.zh-CN.md +229 -125
- package/docs/first-release-evidence.json +25 -0
- package/docs/official-translation-comparison.md +35 -0
- package/lib/client.js +205 -21
- package/lib/index.js +134 -27
- package/lib/local-model.js +89 -0
- package/lib/ollama.js +11 -5
- package/package.json +80 -78
- package/screenshots.json +5 -0
- package/demo/demo.gif +0 -0
- package/demo/demo2.gif +0 -0
package/README.fr.md
CHANGED
|
@@ -1,125 +1,217 @@
|
|
|
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.16" alt="dsh-think-translate — La pensée de l’IA, dans votre langue" width="100%" />
|
|
3
|
+
</p>
|
|
2
4
|
|
|
3
|
-
|
|
5
|
+
<p align="center">
|
|
6
|
+
<b>Traduction de la couche d’affichage de DeepSeek Harness.</b><br />
|
|
7
|
+
Lisez le raisonnement, suivez les tâches et comprenez les réponses. Les originaux sont conservés ; les traductions restent hors du contexte du modèle.
|
|
8
|
+
</p>
|
|
4
9
|
|
|
5
|
-
|
|
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.16" alt="Licence MIT" />
|
|
12
|
+
<img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-local.fr.svg?v=1.2.16" alt="Ollama local" />
|
|
13
|
+
<img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/badge-original.fr.svg?v=1.2.16" alt="Originaux conservés" />
|
|
14
|
+
</p>
|
|
6
15
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
16
|
+
<p align="center">
|
|
17
|
+
<a href="README.zh-CN.md">中文</a> · <a href="README.md">English</a> · <a href="README.ja.md">日本語</a> · <a href="README.ko.md">한국어</a> · <a href="README.es.md">Español</a> · <b>Français</b> · <a href="README.de.md">Deutsch</a> · <a href="README.ru.md">Русский</a> · <a href="README.pt.md">Português</a>
|
|
18
|
+
</p>
|
|
10
19
|
|
|
11
|
-
<
|
|
12
|
-
|
|
13
|
-
</
|
|
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.16" alt="Installation" height="24" /></a> · <a href="#demo"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-demo.fr.svg?v=1.2.16" alt="Démonstrations" height="24" /></a> · <a href="#features"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-features.fr.svg?v=1.2.16" alt="Fonctions" height="24" /></a> · <a href="#comparison"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-comparison.fr.svg?v=1.2.16" alt="Comparaison" height="24" /></a> · <a href="#faq"><img src="https://raw.githubusercontent.com/UncleK/dsh-think-translate/main/docs/assets/nav-faq.fr.svg?v=1.2.16" alt="Questions" height="24" /></a>
|
|
22
|
+
</p>
|
|
14
23
|
|
|
15
24
|
---
|
|
16
25
|
|
|
17
|
-
|
|
26
|
+
<a id="demo"></a>
|
|
27
|
+
## Voir la pensée se déployer
|
|
28
|
+
|
|
29
|
+
<table>
|
|
30
|
+
<tr>
|
|
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.16" alt="Démo 1 · Raisonnement et réponses" width="100%" />
|
|
33
|
+
</td>
|
|
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.16" alt="Démo 2 · Autres opérations" width="100%" />
|
|
36
|
+
</td>
|
|
37
|
+
</tr>
|
|
38
|
+
<tr>
|
|
39
|
+
<td align="center" valign="top"><sub>Démo 1 · Raisonnement et réponses</sub></td>
|
|
40
|
+
<td align="center" valign="top"><sub>Démo 2 · Autres opérations</sub></td>
|
|
41
|
+
</tr>
|
|
42
|
+
</table>
|
|
18
43
|
|
|
19
|
-
|
|
44
|
+
<a id="comparison"></a>
|
|
45
|
+
## Comparaison avec le plugin officiel de traduction
|
|
20
46
|
|
|
21
|
-
|
|
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.16" alt="Comparaison avec le plugin officiel de traduction" width="100%" />
|
|
49
|
+
</p>
|
|
22
50
|
|
|
23
|
-
|
|
24
|
-
- **🕵️ Lisez n'importe quelle chaîne de raisonnement** — raisonnement, chaîne de pensée, cartes de tâches et réponses traduits en temps réel, par lots
|
|
25
|
-
- **8 langues cibles** — 中文 / English / 日本語 / 한국어 / Español / Français / Deutsch / Русский
|
|
26
|
-
- **Interface monolingue** — panneau de réglages, lignes de réflexion et cartes de tâches suivent la langue cible (pas de mélange zh/en) ; le choix persiste
|
|
27
|
-
- **Ollama local** — réutilise les installations et modèles existants. Si Ollama est activé en première position ou si vous cliquez sur Test, le service démarre et le modèle se charge au besoin. Les logiciels ou modèles manquants nécessitent le bouton de préparation avant installation/téléchargement, avec progression en direct
|
|
28
|
-
- **🧠 Coût de contexte nul** — couche d'affichage pure : le modèle voit toujours le texte original et le texte traduit ne consomme jamais la fenêtre de contexte
|
|
29
|
-
- **Repli Google / Bing** — bascule automatique si le modèle local est indisponible (google passe par un tunnel CONNECT Node avec le proxy système)
|
|
30
|
-
- **Artefacts de code ignorés** — chemins, commandes, URL, regex et lignes de code pur ne sont jamais traduits
|
|
31
|
-
- **Traduction par lots de phrases** — les chaînes longues sont traduites en petits lots pour garder la qualité sur les petits modèles locaux
|
|
32
|
-
- **🧩 Découpage par paragraphes et phrases** — les longues chaînes sont découpées sur les lignes vides (structure de paragraphes préservée) puis par phrases, pour garder la qualité sur un petit modèle local
|
|
33
|
-
- **Sortie en streaming** — les traductions apparaissent lot par lot pendant la réflexion ; dépliez la ligne Think pour comparer avec l'original
|
|
34
|
-
- **🎚️ Moment de traduction réglable** — tout pré-traduire / chargement différé des anciennes chaînes (défaut) / uniquement à l'ouverture
|
|
35
|
-
- **🔗 Chaîne de fournisseurs dynamique** — l'ordre de la liste est l'ordre d'exécution : glissez pour réordonner, activez ou désactivez chaque ligne. Intégrés google gtx / bing / Ollama local, plus tout endpoint personnalisé
|
|
36
|
-
- **🔌 Fournisseurs personnalisés (OpenAI et Anthropic)** — ajoutez depuis le panneau tout endpoint compatible OpenAI (`/v1/chat/completions`) ou l'**Anthropic Messages API** (Claude) : type, préréglage, URL de base, clé API et modèle
|
|
37
|
-
- **🪄 Hérite des fournisseurs configurés dans DSH** — détecte les lignes DSH en lecture seule depuis `profiles/<profile>/cordis.patch.yml` / ancien `settings.yaml` (`llm-pi-ai.providers`), et un bouton relance l'analyse et les ajoute toutes à la chaîne ; la clé est résolue à chaque requête depuis `.credentials.yaml` et n'est jamais écrite dans la config du plugin. La route par défaut du harness compte aussi : si `default-model` / `agent-default-model` désigne `deepseek-official`, l'API officielle DeepSeek apparaît comme une ligne DSH de plus
|
|
38
|
-
- **⏱️ Résilient** — les échecs sont conservés en mémoire pendant 30 secondes pour éviter les tentatives répétées, puis réessayés automatiquement ; chaque fournisseur dispose de son bouton de test
|
|
51
|
+
Activez ce plugin ou le traducteur officiel du raisonnement. Tous deux prennent en charge l’affichage du raisonnement.
|
|
39
52
|
|
|
40
|
-
|
|
53
|
+
<a id="quick-start"></a>
|
|
54
|
+
## Une commande pour commencer
|
|
41
55
|
|
|
42
56
|
```bash
|
|
43
|
-
# Option 1 : npm (recommandé)
|
|
44
57
|
dsh plugin --profile web add dsh-think-translate
|
|
45
|
-
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Après l’installation, redémarrez complètement DSH Web. Ouvrez **Paramètres → Traduction de la réflexion**, puis choisissez la langue et les fournisseurs.
|
|
46
61
|
|
|
47
|
-
|
|
62
|
+
<details>
|
|
63
|
+
<summary><b>Installation GitHub, mises à jour et autres méthodes</b></summary>
|
|
64
|
+
|
|
65
|
+
Installer depuis GitHub :
|
|
66
|
+
|
|
67
|
+
```bash
|
|
48
68
|
dsh plugin --profile web add github:UncleK/dsh-think-translate
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Mettre à jour depuis npm :
|
|
49
72
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
New-Item -ItemType Junction -Path "$HOME\.dsh\profiles\node_modules\dsh-think-translate" `
|
|
53
|
-
-Target "<chemin du dépôt>"
|
|
54
|
-
# 2. ajoutez à "$HOME\.dsh\profiles\web\cordis.patch.yml" :
|
|
55
|
-
# - insert:
|
|
56
|
-
# - id: dsh-think-translate
|
|
57
|
-
# name: dsh-think-translate
|
|
58
|
-
# 3. redémarrez web
|
|
73
|
+
```bash
|
|
74
|
+
dsh plugin --profile web add dsh-think-translate@latest
|
|
59
75
|
```
|
|
60
76
|
|
|
61
|
-
|
|
77
|
+
Redémarrez complètement DSH après chaque installation ou mise à jour. En manuel, liez le paquet au profil et ajoutez son entrée dans `cordis.patch.yml`. Les commandes ci-dessus conviennent à l’usage courant.
|
|
78
|
+
|
|
79
|
+
</details>
|
|
80
|
+
|
|
81
|
+
<a id="features"></a>
|
|
82
|
+
## Il n’y a pas que le raisonnement à comprendre
|
|
83
|
+
|
|
84
|
+
<table>
|
|
85
|
+
<tr>
|
|
86
|
+
<td width="50%" valign="top">
|
|
87
|
+
<h3>Lire le raisonnement en direct</h3>
|
|
88
|
+
<p>Tout prétraduire, charger l’historique à la demande ou traduire uniquement au dépliage</p>
|
|
89
|
+
</td>
|
|
90
|
+
<td width="50%" valign="top">
|
|
91
|
+
<h3>Tâches et réponses ensemble</h3>
|
|
92
|
+
<p>Raisonnement, cartes et liste de tâches de la zone de saisie ; réponses et motifs de refus de révision automatique en option</p>
|
|
93
|
+
</td>
|
|
94
|
+
</tr>
|
|
95
|
+
<tr>
|
|
96
|
+
<td width="50%" valign="top">
|
|
97
|
+
<h3>Comprendre les décisions de révision</h3>
|
|
98
|
+
<p>Lorsqu’une révision automatique refuse un appel d’outil, le motif est traduit à côté de l’original. Les boutons de décision existants restent disponibles.</p>
|
|
99
|
+
</td>
|
|
100
|
+
<td width="50%" valign="top">
|
|
101
|
+
<h3>Préserver originaux et code</h3>
|
|
102
|
+
<p>Originaux conservés ; les traductions restent hors du contexte du modèle. Réutilise le rendu Markdown ; protège code, chemins et commandes avant traduction.</p>
|
|
103
|
+
</td>
|
|
104
|
+
</tr>
|
|
105
|
+
<tr>
|
|
106
|
+
<td width="50%" valign="top">
|
|
107
|
+
<h3>Modèles locaux à la demande</h3>
|
|
108
|
+
<p>Libération manuelle, au décochage ou après inactivité ; rechargement à la prochaine traduction</p>
|
|
109
|
+
</td>
|
|
110
|
+
<td width="50%" valign="top">
|
|
111
|
+
<h3>Vos fournisseurs, dans votre ordre</h3>
|
|
112
|
+
<p>Repli automatique selon l’ordre actif ; langue clairement incorrecte : fournisseur suivant ; nouvelle tentative après délai</p>
|
|
113
|
+
</td>
|
|
114
|
+
</tr>
|
|
115
|
+
</table>
|
|
116
|
+
|
|
117
|
+
### Connectez les fournisseurs que vous utilisez déjà
|
|
118
|
+
|
|
119
|
+
**Ollama · Google · Bing · OpenAI · Anthropic Messages API**
|
|
120
|
+
|
|
121
|
+
Détectez les fournisseurs configurés dans DSH sans ressaisir endpoints et clés. Testez chaque ligne séparément ; l’ordre de la liste détermine les tentatives.
|
|
122
|
+
|
|
123
|
+
```text
|
|
124
|
+
Premier choix → fournisseur actif suivant → … → original si tous échouent
|
|
125
|
+
```
|
|
62
126
|
|
|
63
|
-
|
|
127
|
+
<details>
|
|
128
|
+
<summary><b>Endpoints personnalisés, identifiants et reprise</b></summary>
|
|
64
129
|
|
|
65
|
-
-
|
|
66
|
-
-
|
|
67
|
-
-
|
|
130
|
+
- Prend en charge `/v1/chat/completions` compatible OpenAI et l’API native Anthropic Messages.
|
|
131
|
+
- Détecte les fournisseurs du profil DSH courant et des surcharges ; relancez l’analyse et ajoutez-les à la chaîne.
|
|
132
|
+
- `apiKeyEnv` est résolu lors de la requête ; les identifiants résolus ne sont pas réécrits dans la configuration.
|
|
133
|
+
- Les échecs attendent 30 secondes en mémoire du host avant les nouvelles tentatives. Une langue clairement incorrecte déclenche le fournisseur suivant.
|
|
134
|
+
- Le texte reconnu dans la langue cible est ignoré ; les tests de fournisseur effectuent toujours une vraie requête.
|
|
68
135
|
|
|
69
|
-
|
|
136
|
+
</details>
|
|
70
137
|
|
|
71
|
-
|
|
138
|
+
### Modèles locaux de traduction : chargement et libération à la demande
|
|
72
139
|
|
|
73
|
-
|
|
140
|
+
| Votre action | Comportement |
|
|
141
|
+
|---|---|
|
|
142
|
+
| Traduire ou tester | Démarre le service et charge le modèle sélectionné à la demande |
|
|
143
|
+
| Libérer la mémoire du modèle | Attend les traductions en cours, puis libère ; conserve fichiers, interrupteurs et ordre |
|
|
144
|
+
| Décocher le fournisseur local | Le désactive et libère le modèle sélectionné |
|
|
145
|
+
| Le réactiver ou ouvrir les paramètres | Aucun préchargement ; chargement à la prochaine traduction réelle |
|
|
146
|
+
| Définir le délai d’inactivité | 5 minutes par défaut ; 1 / 5 / 10 / 30 / 60 minutes ou désactivé |
|
|
74
147
|
|
|
75
|
-
|
|
148
|
+
Le délai s’applique dès l’utilisation suivante. Ollama suit le modèle sélectionné sans modifier les variables globales. Les logiciels ou modèles manquants sont installés ou téléchargés uniquement après un clic sur préparer, avec suivi de progression.
|
|
76
149
|
|
|
77
|
-
|
|
150
|
+
<a id="languages"></a>
|
|
151
|
+
### Votre langue vous accompagne
|
|
78
152
|
|
|
79
|
-
|
|
153
|
+
中文 · English · 日本語 · 한국어 · Español · Français · Deutsch · Русский · Português
|
|
80
154
|
|
|
81
|
-
|
|
155
|
+
Neuf langues cibles, de paramètres et de tâches, dont le portugais. Le choix reste enregistré après actualisation.
|
|
82
156
|
|
|
83
|
-
|
|
157
|
+
<a id="faq"></a>
|
|
158
|
+
## Réponses aux questions fréquentes
|
|
84
159
|
|
|
85
|
-
|
|
160
|
+
<details>
|
|
161
|
+
<summary><b>L’entrée de traduction n’apparaît pas après installation ou mise à jour</b></summary>
|
|
86
162
|
|
|
87
|
-
|
|
163
|
+
Redémarrez complètement `dsh web`. Le graphe des modules est assemblé au démarrage ; une simple actualisation peut ne pas suffire. Le pied des paramètres affiche la version installée.
|
|
88
164
|
|
|
89
|
-
|
|
165
|
+
</details>
|
|
90
166
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
3. Gérez la **chaîne de fournisseurs** (glisser pour ordonner, cocher pour activer) :
|
|
94
|
-
- Intégrés : **google gtx / bing** (gratuits, via le proxy système) et **Ollama local** ; les logiciels et modèles existants sont réutilisés. Les composants manquants nécessitent le bouton de préparation, avec progression (7b/14b ou modèle personnalisé)
|
|
95
|
-
- **Fournisseurs DSH** : les endpoints déjà configurés dans `profiles/<profile>/cordis.patch.yml` / ancien `settings.yaml` apparaissent seuls (lecture seule ; cochez pour les ajouter à la chaîne). Le bouton **Importer depuis la config DSH**, juste sous la liste, relance l'analyse et les ajoute tous d'un coup : ni baseURL ni clé à ressaisir, la clé étant résolue depuis les identifiants de DSH
|
|
96
|
-
- La clé se saisit à la main ou arrive via **`apiKeyEnv`** depuis un préréglage ou une ligne DSH : cette ligne affiche le badge `env:NAME`, et la clé est résolue à chaque requête sans jamais être écrite dans `config.json`. Le formulaire d'édition n'a pas de champ de variable d'environnement (la valeur est conservée telle quelle), mais vider un champ le supprime réellement (envoyé comme suppression explicite)
|
|
97
|
-
- Décocher un fournisseur l'ignore. Détails dans [README.md](README.md)
|
|
98
|
-
4. Envoyez un message et dépliez la ligne Think pour voir la traduction
|
|
167
|
+
<details>
|
|
168
|
+
<summary><b>La liste des modèles locaux est vide</b></summary>
|
|
99
169
|
|
|
100
|
-
|
|
170
|
+
Vérifiez `ollama list` ou `/api/tags`, le répertoire actif et `OLLAMA_MODELS` du service. Les fichiers existants n’ont pas à être téléchargés à nouveau.
|
|
101
171
|
|
|
102
|
-
|
|
103
|
-
navigateur → POST /_xlate/translate (même origine, sans CORS)
|
|
104
|
-
→ chaîne de fournisseurs côté host (fail-open, réordonnable) :
|
|
105
|
-
chain: [provider1, provider2, ...] ← ordre par glisser dans les Réglages
|
|
106
|
-
google / bing / compatible OpenAI / Anthropic
|
|
107
|
-
chaîne fallback (facultative, désactivée par défaut, activable dans la config)
|
|
108
|
-
→ texte original si tous les fournisseurs activés échouent
|
|
109
|
-
```
|
|
172
|
+
</details>
|
|
110
173
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
- **Moitié host** (`lib/index.js`) : adaptateurs de fournisseurs, cache LRU (600), `/_xlate/models`, `/_xlate/model/pull` + `pull-status` (configuration automatique à la fin)
|
|
114
|
-
- **Moitié client** (`lib/client.js`) : UI en 8 langues, traduction par lots, lignes Think en streaming, persistance localStorage
|
|
115
|
-
- Couche d'affichage pure : les originaux restent dans la transcription et le contexte du modèle
|
|
174
|
+
<details>
|
|
175
|
+
<summary><b>Client bundles not found après une mise à jour DSH</b></summary>
|
|
116
176
|
|
|
117
|
-
|
|
177
|
+
Lancez `pnpm run build` dans le dépôt DeepSeek Harness, puis redémarrez DSH Web.
|
|
118
178
|
|
|
119
|
-
|
|
120
|
-
- Les changements client s'appliquent au rafraîchissement ; les changements host nécessitent un redémarrage de web
|
|
121
|
-
- Les chaînes en 8 langues vivent dans le dictionnaire `UI_TEXT` de `lib/client.js`
|
|
179
|
+
</details>
|
|
122
180
|
|
|
123
|
-
|
|
181
|
+
<details>
|
|
182
|
+
<summary><b>Un échec de traduction affecte-t-il la conversation ?</b></summary>
|
|
183
|
+
|
|
184
|
+
Si tous les fournisseurs actifs échouent, l’original reste visible. Testez chaque fournisseur et consultez la dernière erreur. Les requêtes suivantes peuvent réessayer après le délai.
|
|
185
|
+
|
|
186
|
+
</details>
|
|
187
|
+
|
|
188
|
+
<details>
|
|
189
|
+
<summary><b>Mises à jour et compatibilité</b></summary>
|
|
190
|
+
|
|
191
|
+
**1.2.16** ajoute le portugais comme cible et langue d’interface, renouvelle les neuf README et images localisées, et déclare trois images pour le marché.
|
|
192
|
+
|
|
193
|
+
**1.2.15** ajoute la gestion mémoire locale et adapte images, repli du raisonnement et sélection de l’original à DSH `0.2.2-alpha.2`.
|
|
194
|
+
|
|
195
|
+
**1.2.13** traduit les motifs de refus de révision automatique. Merci à [llg1634](https://github.com/llg1634) pour le signalement, le correctif initial et les tests.
|
|
196
|
+
|
|
197
|
+
Anciennes versions : [GitHub Releases](https://github.com/UncleK/dsh-think-translate/releases).
|
|
198
|
+
|
|
199
|
+
</details>
|
|
200
|
+
|
|
201
|
+
<details>
|
|
202
|
+
<summary><b>Développement et fonctionnement</b></summary>
|
|
203
|
+
|
|
204
|
+
- `lib/index.js` : routes du host, fournisseurs, configuration, cache et modèles locaux.
|
|
205
|
+
- `lib/client.js` : paramètres, traduction d’affichage, lots en streaming et cache du navigateur.
|
|
206
|
+
- `lib/config.json` : configuration d’exécution, exclue de Git et npm.
|
|
207
|
+
- Aucune compilation supplémentaire : les sources sont le livrable. Redémarrez DSH après une modification du host.
|
|
208
|
+
- Vérification : `npm test`. Détection et identifiants : [notes de maintenance](https://github.com/UncleK/dsh-think-translate/blob/main/docs/maintenance-notes.md).
|
|
209
|
+
|
|
210
|
+
</details>
|
|
211
|
+
|
|
212
|
+
---
|
|
124
213
|
|
|
125
|
-
|
|
214
|
+
<p align="center">
|
|
215
|
+
<b>dsh-think-translate</b><br />
|
|
216
|
+
<a href="https://github.com/UncleK/dsh-think-translate/issues">Signaler un problème</a> · <a href="https://github.com/UncleK/dsh-think-translate/releases">Versions</a> · <a href="https://github.com/UncleK/dsh-think-translate/blob/main/LICENSE">Licence MIT</a>
|
|
217
|
+
</p>
|