dsh-eslat 0.0.0-stage → 2.0.0
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/LICENSE +21 -0
- package/README.md +202 -2
- package/cordis.patch.yml +9 -0
- package/icon.svg +14 -0
- package/lib/client.js +1909 -0
- package/lib/client.js.map +1 -0
- package/lib/index.js +12 -0
- package/locale/en.json +6 -0
- package/locale/es.json +6 -0
- package/package.json +72 -4
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 dsh-locale-es-labels contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,3 +1,203 @@
|
|
|
1
|
-
#
|
|
1
|
+
# dsh-eslat · EsLat
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
> **English summary** — **EsLat** is a [DeepSeek Harness](https://github.com/deepseek-ai/DeepSeek-Harness)
|
|
4
|
+
> language bundle that translates the **whole web GUI** into neutral **Latin American Spanish**:
|
|
5
|
+
> 1,615 labels across all 36 client namespaces shipped by DSH 0.2.0-rc.2 — conversation, sidebar,
|
|
6
|
+
> settings, trajectory, tool calls, status summaries, dialogs, errors and empty states. Nothing is
|
|
7
|
+
> left falling back to English. Install with `dsh plugin add dsh-eslat`, or from the **Plugins** page
|
|
8
|
+
> in the sidebar. Revert to English with Settings → *Idioma* → English. Full documentation below is
|
|
9
|
+
> in Spanish.
|
|
10
|
+
|
|
11
|
+
Traducción completa al **español neutro de Latinoamérica** de la interfaz web de DSH. Es un paquete
|
|
12
|
+
de idioma: registra el idioma `es` y un diccionario para **cada** namespace que el cliente de DSH
|
|
13
|
+
publica, de modo que la interfaz entera —no solo las herramientas— aparece en español.
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
Conversación → Escribe un mensaje o una tarea, / para comandos, @ para archivos o sesiones
|
|
17
|
+
Barra lateral → Espacios de trabajo · Sesiones · Archivar · Fijar · Cambiar nombre
|
|
18
|
+
Ajustes → Configuración · Apariencia · Permisos · Tamaño de letra · Atajos
|
|
19
|
+
Trayectoria → Turnos · Llamadas · Solicitudes · Mediciones · Uso de tokens
|
|
20
|
+
Herramientas → Leer / Escribir / Editar / Buscar en el contenido / PowerShell / Crear subagente
|
|
21
|
+
Estados → En ejecución / Preparando la llamada / Fallida / Detenida
|
|
22
|
+
Resúmenes → Leyendo archivos · Completado en 12 s · Se leyeron archivos y se ejecutaron comandos
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Instalación
|
|
26
|
+
|
|
27
|
+
Es un **bundle** de DSH (`dsh.bundle.patch`), así que se instala como cualquier otro plugin.
|
|
28
|
+
|
|
29
|
+
### Desde npm
|
|
30
|
+
|
|
31
|
+
```
|
|
32
|
+
dsh plugin add dsh-eslat
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
o en la interfaz web: barra lateral → **Plugins** → **Add plugin** → escribe el nombre del paquete →
|
|
36
|
+
**Install**. El diálogo acepta también una dirección Git, un tarball o una ruta local absoluta.
|
|
37
|
+
|
|
38
|
+
### Desde un tarball
|
|
39
|
+
|
|
40
|
+
Sin cuenta de npm y sin permisos de compilación: el tarball trae la mitad Cliente ya construida.
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
dsh plugin add ./dsh-eslat-2.0.0.tgz
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### Desde un repositorio Git
|
|
47
|
+
|
|
48
|
+
```
|
|
49
|
+
dsh plugin add github:Amador-Aguilar/dsh-eslat
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Este paquete **no necesita `prepare` ni autorizar scripts de compilación**: el bundle del navegador
|
|
53
|
+
(`lib/client.js`) se publica construido, no se genera al instalar.
|
|
54
|
+
|
|
55
|
+
### En este equipo (desarrollo)
|
|
56
|
+
|
|
57
|
+
En el perfil `desktop` está instalado desde el registro (`"dsh-eslat": "^2.0.0"`). Para probar
|
|
58
|
+
cambios locales sin publicar, instálalo desde la ruta del proyecto con el gestor de plugins: queda
|
|
59
|
+
como `link:` y los cambios de `src/` + `node tools/build.mjs` se aplican al recargar la página.
|
|
60
|
+
|
|
61
|
+
## Activación
|
|
62
|
+
|
|
63
|
+
Al montarse, el plugin registra el idioma y sus diccionarios, y selecciona **Español** una sola vez,
|
|
64
|
+
sustituyendo únicamente el idioma por defecto (`en`). Después:
|
|
65
|
+
|
|
66
|
+
| Situación | Qué ocurre |
|
|
67
|
+
|---|---|
|
|
68
|
+
| La interfaz estaba en inglés (por defecto) | Pasa a Español; toda la interfaz cambia |
|
|
69
|
+
| Ya estaba en chino u otro idioma elegido | No se toca nada: solo sustituye el idioma por defecto |
|
|
70
|
+
| El usuario cambia a otro idioma en Configuración → Idioma | Se respeta para siempre; el plugin no vuelve a forzar el español |
|
|
71
|
+
| Un shell nativo vuelve a anunciar su idioma por defecto | El plugin recupera el español, porque la elección no fue del usuario |
|
|
72
|
+
|
|
73
|
+
La memoria de esa decisión vive en `localStorage` del navegador (`dsh-eslat:activation`). Si el
|
|
74
|
+
almacenamiento no está disponible, el plugin selecciona español en cada carga cuando la interfaz está
|
|
75
|
+
en inglés.
|
|
76
|
+
|
|
77
|
+
**Para volver atrás:** Configuración → General → *Idioma* → English. Para desinstalarlo, página
|
|
78
|
+
**Plugins**.
|
|
79
|
+
|
|
80
|
+
## Cobertura
|
|
81
|
+
|
|
82
|
+
**1.615 de 1.615 claves (100 %) en 36 de 36 namespaces.** La verificación por clave lo garantiza y
|
|
83
|
+
falla si alguna falta.
|
|
84
|
+
|
|
85
|
+
| Grupo | Namespaces | Claves |
|
|
86
|
+
|---|---|---:|
|
|
87
|
+
| Conversación y chat | `conversation` 367 · `chat` 186 | 553 |
|
|
88
|
+
| Trayectoria y entregables | `trajectory` 192 · `deliverables` 60 | 252 |
|
|
89
|
+
| Navegación y paneles | `workspace` 112 · `sidebarRight` 34 · `sidebarBrowser` 19 · `sidebarFiles` 11 · `sidebarDocumentPreview` 11 · `sidebar` 5 · `sidebarTerminal` 1 | 193 |
|
|
90
|
+
| Ajustes y preferencias | `settings` 34 · `shortcuts` 28 · `permission.access` 17 · `settings.permission` 12 · `settings.theme` 9 | 100 |
|
|
91
|
+
| Tareas y automatización | `schedule.manager` 133 · `job` 39 · `workflowRun` 18 · `schedule.catalog` 16 | 206 |
|
|
92
|
+
| Herramientas y agentes | `cordis` 51 · `subagent` 39 · `model` 23 · `slash.menu` 9 · `skill` 8 | 130 |
|
|
93
|
+
| Comandos y diálogos | `question` 31 · `command` 28 · `feedback` 20 · `plan` 17 · `goal` 12 · `approval` 1 | 109 |
|
|
94
|
+
| Base compartida | `common` 41 · `open-in-app` 15 · `reference` 11 · `documentMarkdown` 4 · `settings.locale` 1 | 72 |
|
|
95
|
+
|
|
96
|
+
## Dialecto
|
|
97
|
+
|
|
98
|
+
Español neutro de Latinoamérica, con estas decisiones aplicadas en todo el paquete:
|
|
99
|
+
|
|
100
|
+
| Se usa | En lugar de |
|
|
101
|
+
|---|---|
|
|
102
|
+
| Configuración | Ajustes |
|
|
103
|
+
| presiona / haz clic | pulsa / pincha |
|
|
104
|
+
| agregar | añadir |
|
|
105
|
+
| computadora, celular | ordenador, móvil |
|
|
106
|
+
| archivo | fichero |
|
|
107
|
+
| costo | coste |
|
|
108
|
+
| `dd/mm/aaaa`, millar con punto (`1.615`) | formato inglés |
|
|
109
|
+
|
|
110
|
+
Términos que se mantienen: `Bash`, `PowerShell`, `JSON`, `ZIP`, `TTFT`, `tok/s`, `Markdown`,
|
|
111
|
+
`Cordis`, `sandbox`, `preset` y los nombres de modelos.
|
|
112
|
+
|
|
113
|
+
`test/verify.mjs` incluye un **guardián de dialecto**: falla si reaparece un lexema peninsular
|
|
114
|
+
(`ordenador`, `fichero`, `puls…`, `añad…`, `vosotros`, `móvil`, `coger`, `pinch…`, `zumo`, `patata`,
|
|
115
|
+
`coche`).
|
|
116
|
+
|
|
117
|
+
## Identidad del plugin
|
|
118
|
+
|
|
119
|
+
| Capa | Valor | Dónde se define |
|
|
120
|
+
|---|---|---|
|
|
121
|
+
| Nombre visible | **EsLat** | `locale/{en,es}.json` → `meta.title` |
|
|
122
|
+
| Nombre técnico (npm y **id del módulo del navegador**) | `dsh-eslat` | `package.json` → `name` |
|
|
123
|
+
| Icono | «Es» sobre «Lat»: degradado azul + cian, 36×36 | `icon.svg` |
|
|
124
|
+
| Autor | Amador Aguilar (`@amador_aguilar` en npm, `Amador-Aguilar` en GitHub) | `package.json` → `author` |
|
|
125
|
+
| Repositorio | [github.com/Amador-Aguilar/dsh-eslat](https://github.com/Amador-Aguilar/dsh-eslat) | `package.json` → `repository` |
|
|
126
|
+
|
|
127
|
+
La autoría formal la registra npm al publicar (`npm owner ls dsh-eslat`); la tarjeta de Plugins solo
|
|
128
|
+
muestra icono, título y descripción.
|
|
129
|
+
|
|
130
|
+
## Estructura
|
|
131
|
+
|
|
132
|
+
```
|
|
133
|
+
package.json manifiesto: dsh.bundle.patch + dsh.client (platform web)
|
|
134
|
+
cordis.patch.yml capa de parche del bundle: inserta la fila eslat
|
|
135
|
+
lib/index.js mitad Host: inerte, solo mantiene el paquete en el árbol del Loader
|
|
136
|
+
lib/client.js mitad Cliente construida (generada) — todo el comportamiento vive aquí
|
|
137
|
+
lib/client.js.map source map de identidad del bundle
|
|
138
|
+
locale/{en,es}.json título y descripción del plugin en la página Plugins
|
|
139
|
+
icon.svg icono de la tarjeta (36×36, convención de DSH)
|
|
140
|
+
src/<namespace>.es.json un diccionario por namespace; añadir cobertura es añadir un archivo
|
|
141
|
+
src/language.json definición del idioma: id, etiqueta y respaldo
|
|
142
|
+
tools/build.mjs construye lib/client.js y su map a partir de src/
|
|
143
|
+
tools/extract-shipped-keys.mjs descubre los namespaces de DSH y regenera la instantánea de claves
|
|
144
|
+
test/verify.mjs claves, marcadores, dialecto, frescura del bundle y requisitos de publicación
|
|
145
|
+
test/smoke.mjs ejecuta la mitad Cliente contra dobles de prueba
|
|
146
|
+
test/shipped-en.json instantánea de los diccionarios ingleses de DSH 0.2.0-rc.2
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
Solo se publica la primera mitad: `src/`, `tools/` y `test/` son material del repositorio.
|
|
150
|
+
|
|
151
|
+
### Por qué la mitad Cliente es un archivo construido
|
|
152
|
+
|
|
153
|
+
DSH sirve cada plugin del navegador como un bundle *lazy-CJS* ya construido: el host lee
|
|
154
|
+
`exports["./client"]` y el navegador evalúa el archivo, que debe estar en la forma del cargador de
|
|
155
|
+
módulos (`window.__ModuleLoader__.load({ id, factory })`) y no puede importar nada, porque el
|
|
156
|
+
protocolo no admite `require` relativos entre bundles. Por eso los diccionarios viven en `src/` y se
|
|
157
|
+
incorporan al bundle generado.
|
|
158
|
+
|
|
159
|
+
## Desarrollo
|
|
160
|
+
|
|
161
|
+
```powershell
|
|
162
|
+
node tools/build.mjs # regenera lib/client.js y su map
|
|
163
|
+
node test/verify.mjs # claves, marcadores, dialecto, frescura, publicación
|
|
164
|
+
node test/verify.mjs --strict # además exige cobertura 100 %
|
|
165
|
+
node test/smoke.mjs # comportamiento de la mitad Cliente
|
|
166
|
+
node tools/extract-shipped-keys.mjs # re-descubre los namespaces de la imagen instalada
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
`verify` distingue **errores** (clave inexistente, marcador `{…}` que no cuadra, bundle obsoleto,
|
|
170
|
+
lexema peninsular) de **cobertura pendiente**, que informa; `--strict` la exige y es lo que corre
|
|
171
|
+
`prepublishOnly`.
|
|
172
|
+
|
|
173
|
+
`test/shipped-en.json` es una instantánea extraída de DSH `0.2.0-rc.2`. Si una versión futura
|
|
174
|
+
renombra o añade claves, `node tools/extract-shipped-keys.mjs` refresca la instantánea y `verify`
|
|
175
|
+
dice exactamente qué falta.
|
|
176
|
+
|
|
177
|
+
## Publicar
|
|
178
|
+
|
|
179
|
+
`prepublishOnly` encadena build + `verify --strict` + smoke, así que no puede salir una versión con
|
|
180
|
+
cobertura incompleta.
|
|
181
|
+
|
|
182
|
+
```powershell
|
|
183
|
+
npm run verify # build + verificación + pruebas
|
|
184
|
+
npm publish # con OTP: npm publish --otp=123456
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
Requisitos que `verify` comprueba: `dsh.bundle.patch` presente, la fila del patch con el nombre del
|
|
188
|
+
paquete, `name`/`version` válidos, mitad Cliente construida y en `files`, `engines.dsh`, licencia y
|
|
189
|
+
`prepublishOnly`.
|
|
190
|
+
|
|
191
|
+
## Limitaciones
|
|
192
|
+
|
|
193
|
+
- **Claves atadas a una versión** — la verificación está anclada a DSH `0.2.0-rc.2`. Una clave
|
|
194
|
+
renombrada aguas arriba revierte esa etiqueta al inglés hasta que se actualice el diccionario; el
|
|
195
|
+
extractor y el verificador lo detectan.
|
|
196
|
+
- **Los datos no se traducen** — rutas de archivos, descripciones de comandos, resúmenes derivados de
|
|
197
|
+
los argumentos de cada herramienta y la respuesta del modelo siguen en el idioma en que lleguen.
|
|
198
|
+
- **Enumeraciones de tres o más elementos** — DSH une los resúmenes cerrados con un separador fijo,
|
|
199
|
+
sin ranura para la conjunción final, así que una lista de tres sale con comas en lugar de «y».
|
|
200
|
+
- **Sin reglas de plural propias** — se usan las ranuras `.one`/`.other` que DSH consulta; `es`
|
|
201
|
+
comparte con `en` la regla singular/plural.
|
|
202
|
+
- **Sin configuración** — el plugin no declara esquema: activarlo o desactivarlo en la página Plugins
|
|
203
|
+
es el único mando.
|
package/cordis.patch.yml
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# Bundle patch layer for dsh-eslat (EsLat): applied after the dsh-base and
|
|
2
|
+
# dsh-web-app layers, before this profile's own cordis.patch.yml.
|
|
3
|
+
#
|
|
4
|
+
# One row: the Spanish label pack. Its host half is an inert entry that keeps
|
|
5
|
+
# the package in the Loader tree; the browser half arrives through the
|
|
6
|
+
# package's `dsh.client` declaration (exports["./client"]).
|
|
7
|
+
- insert:
|
|
8
|
+
- id: eslat
|
|
9
|
+
name: 'dsh-eslat'
|
package/icon.svg
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<svg width="36" height="36" viewBox="0 0 36 36" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<!-- EsLat, stacked: "Es" above "Lat" in the same palette — blue gradient over cyan accent.
|
|
3
|
+
textLength pins each line to an exact width and text-anchor keeps both centred, so the
|
|
4
|
+
stack neither clips nor drifts when the host resolves a different sans-serif (an <img>
|
|
5
|
+
cannot load webfonts). -->
|
|
6
|
+
<text x="18" y="17" text-anchor="middle" font-family="Inter, 'Segoe UI', system-ui, -apple-system, Arial, sans-serif" font-size="14" font-weight="800" letter-spacing="-0.3" textLength="17" lengthAdjust="spacingAndGlyphs" fill="url(#eslat-es)">Es</text>
|
|
7
|
+
<text x="18" y="29" text-anchor="middle" font-family="Inter, 'Segoe UI', system-ui, -apple-system, Arial, sans-serif" font-size="11" font-weight="700" letter-spacing="0.1" textLength="16.5" lengthAdjust="spacingAndGlyphs" fill="#45D9E7">Lat</text>
|
|
8
|
+
<defs>
|
|
9
|
+
<linearGradient id="eslat-es" x1="9.5" y1="7" x2="26.5" y2="18" gradientUnits="userSpaceOnUse">
|
|
10
|
+
<stop stop-color="#7AC2FF"/>
|
|
11
|
+
<stop offset="1" stop-color="#4A65E8"/>
|
|
12
|
+
</linearGradient>
|
|
13
|
+
</defs>
|
|
14
|
+
</svg>
|