dsh-locale-es-cl
Pack de idioma español de Chile (es-CL) para la interfaz de DeepSeek Harness (DSH).
- 2.603 de 2.603 claves traducidas (100 %), repartidas en 57 namespaces.
- 285 de esas 2.603 cadenas (10,9 %) se separan de la traducción castellana de partida: es la adaptación chilena propiamente tal y está listada cadena por cadena, con su inglés y su referencia, en docs/revision-es-cl.md y docs/revision-es-cl.csv.
- Entra como plugin de cliente del Loader de DSH: no parchea
app.asarni ningún fichero de la aplicación. - Cualquier clave que falte o que añada una versión nueva de DSH cae automáticamente al
inglés, así que un catálogo incompleto degrada a la lengua de origen en lugar de
romperse. El matiz importa: lo que cae a inglés es la clave ausente, porque el
runtime resuelve con
?? key; un namespace del que no se registrara ningún diccionario no tendría de dónde caer y mostraría sus claves en crudo. Eso último no ocurre en este pack —los 57 namespaces tienen diccionario—, pero es la frontera real de la garantía.
Instalar en una línea
dsh plugin --profile desktop add github:neobones/dsh-locale-es-cl
Recarga la interfaz (Ctrl+R) y elige Ajustes → General → Idioma → Español (Chile). La
elección se guarda y sobrevive reinicios; un navegador en es-CL (o en es) lo activa solo.
Las demás vías —npm, tarball, instalación manual del perfil y qué hacer si el selector no aparece— están en Instalación.
Estado
| Cobertura | 2.603/2.603 claves (100 %), 57/57 namespaces |
| Adaptación chilena | 285/2.603 cadenas (10,9 %) distintas de la referencia castellana |
| Términos en inglés | 15 conservados por política, de los que 11 tienen claves que ejercerlos; el informe de delta cierra con protegidos 0 |
| Idioma | es-CL — etiqueta «Español (Chile)», respaldo en |
| Paquete | dsh-locale-es-cl 1.0.0 |
| Licencia | MIT (ver LICENSE y NOTICE.md) |
| Núcleo de DSH probado | app de escritorio con app.asar de 121 MB, 70 plugins de UI |
La política de términos en inglés cubre quince palabras, pero el catálogo de la app solo
contiene texto para once de ellas: plugin (95 claves), api (25), tool call (23),
token (14), json (14), prompt (12), log (6), shell (5), chat (5), diff (4) y
markdown (4). Las otras cuatro —commit, push, pull request y deploy— no aparecen
ni una vez en el catálogo, así que se conservan como política declarada pero no hay ninguna
clave que las ejerza: protegidos 0 mide las once primeras, no quince.
Estas comprobaciones se pueden repetir en cualquier momento y no necesitan la aplicación:
node tools/build-locale-pack.cjs i18n/catalog.json i18n/es-cl . --check # cobertura y marcadores
node tools/audit-es.cjs i18n/catalog.json i18n/es-cl # claves ausentes, desalineadas y repetidas
node tools/apply-terminology.cjs i18n/terminology.json i18n/es-cl --check # términos y fraseología prohibidas
node tools/check-coherence.cjs i18n/es-cl # concordancia y duplicados entre lotes
node tools/check-portable.cjs i18n # ni rutas ni secretos locales
node tools/delta-report.cjs i18n/catalog.json i18n/reference/es.json i18n/es-cl --strict-protegidos # protegidos 0 como puerta
node tools/verify-pack.cjs lib/client.js # ejecuta el bundle como lo hace DSH
delta-report.cjs cierra protegidos 0 y con --strict-protegidos sale con código 1 si ese
total no es cero: sin la bandera el total solo se informa (lo que necesitan los lotes
intermedios), con ella es una puerta. check-coherence.cjs tiene dos partes: la concordancia
junto a los términos en inglés y un barrido de duplicados que informa cuando un mismo origen
inglés produce más de una forma en español, o cuando dos orígenes distintos comparten una
misma frase hecha.
Instalación
Basta una línea. El gestor de plugins que trae DSH añade la dependencia y selecciona el bundle:
# desde npm (lo más simple)
dsh plugin --profile desktop add dsh-locale-es-cl
# o directo desde GitHub, sin registro de por medio
dsh plugin --profile desktop add github:neobones/dsh-locale-es-cl
# o desde un tarball ya empaquetado
dsh plugin --profile desktop add ./dsh-locale-es-cl-1.0.0.tgz
# o el tarball publicado en la release (lo mismo, sin descargarlo a mano)
dsh plugin --profile desktop add https://github.com/neobones/dsh-locale-es-cl/releases/download/v1.0.0/dsh-locale-es-cl-1.0.0.tgz
Usa el perfil que realmente ejecutes: desktop para la app de escritorio, web para
dsh web. La instalación desde GitHub funciona sin autorizar scripts de build, porque el
bundle del navegador (lib/client.js) va versionado en el repositorio: no hay paso de
compilación que pnpm tenga que permitir.
El mismo resultado desde la interfaz: barra lateral → Plugins → Add plugin, y pegas
la especificación. El gestor acepta nombre de paquete npm (con versión opcional),
github:autor/repo o una URL de repositorio git, un .tgz y una ruta local; comprueba que el
paquete declare dsh.bundle y al terminar lo añade a dsh.profile.bundles.
Después, recarga la interfaz (Ctrl+R) y elige el idioma en
Ajustes → General → Idioma → Español (Chile). La elección se guarda y sobrevive
reinicios; un navegador en es-CL (o en es) lo activa solo.
Vía manual: editar el perfil
Los plugins de un perfil se declaran en ~/.dsh/profiles/<perfil>/package.json. Añade el pack
como dependencia y como bundle:
{
"dependencies": {
"dsh-locale-es-cl": "link:C:/ruta/a/dsh-locale-es-cl"
},
"dsh": {
"profile": {
"bundles": [
"@deepseek-ai/dsh-base",
"@deepseek-ai/dsh-web-app",
"dsh-locale-es-cl"
]
}
}
}
Después, en la carpeta del perfil:
pnpm install
Qué busca DSH para listar un plugin
Comprobado en el código de la aplicación (0.2.0-rc.2), por si hay que diagnosticar una tarjeta que no aparece:
dsh.bundle.patchen elpackage.json— imprescindible: sin ese campo el paquete se instala como dependencia plana, no como capa del perfil.- La tarjeta se pinta con los metadatos que DSH lee de
locale/<idioma>.json(meta.title,meta.description), con elnamey ladescriptiondelpackage.jsoncomo respaldo; el icono sale del campoiconde nivel superior. Para que el resolutor ESM los encuentre, el mapaexportstiene que declarar./locale/*.jsony./package.json. tools/check-plugin-meta.cjsreplica esas comprobaciones y corre en la integración continua.- DSH no lee las palabras clave de npm ni consulta ningún catálogo propio: no hay nada que «indexar». El descubrimiento es el README, npm o el directorio de la comunidad.
Notas
- La ruta
link:ygithub:están soportadas por pnpm; la primera es la que está probada aquí. - El fichero cordis.patch.yml del paquete es lo que inserta la fila
locale-es-clen el árbol de plugins; lo aplica DSH al cargar el bundle, no hay que copiarlo a mano. - Si tras instalar el pack no ves «Español (Chile)» en Ajustes, desactiva y vuelve a activar la
fila
locale-es-clen el gestor de plugins para forzar una revisión nueva del bundle de cliente. - Aviso comprobado: si modificas el perfil desde dentro de una sesión de DSH, la recarga en caliente dispone esa sesión y la aplicación abre una conversación nueva. Hazlo desde fuera o asume que esa conversación se corta (el historial no se pierde).
- El rescate «Disable third-party plugins» del escritorio deja el perfil con los bundles de fábrica, así que se lleva por delante este pack: para volver a tenerlo hay que reinstalarlo.
Cómo funciona
Los plugins de cliente de DSH son fábricas lazy-CJS que el cargador ejecuta en el navegador:
window.__ModuleLoader__.load({ id, factory: (require) => { /* … */ return module.exports } })
lib/client.js —generado, no editado a mano— inyecta el servicio locale y, cuando está
disponible, registra el idioma y un diccionario por namespace declarando cada registro como
efecto propio del plugin, de modo que se retira limpiamente al descargarlo:
const LANGUAGE = { id: 'es-CL', label: 'Español (Chile)', fallback: 'en' };
function apply(ctx) {
ctx.effect(() => ctx.locale.addLanguage(LANGUAGE), 'locale-es-cl: idioma');
for (const [ns, dict] of Object.entries(DICTIONARIES)) {
ctx.effect(() => ctx.locale.register(ns, 'es-CL', dict), 'locale-es-cl: ' + ns);
}
}
lib/index.js es la mitad host: existe para que el paquete sea una fila cargable del Loader
y para que el escaneo de plugins de cliente encuentre su declaración dsh.client del
package.json. Todo el trabajo real ocurre en el cliente.
Estructura del repositorio
dsh-locale-es-cl/
├── package.json ficha del paquete y contrato con el Loader (dsh.bundle / dsh.client)
├── cordis.patch.yml fila que inserta el plugin en el árbol (generado)
├── lib/
│ ├── client.js bundle del cliente con los 57 diccionarios (generado)
│ └── index.js mitad host (generado)
├── i18n/
│ ├── catalog.json catálogo inglés extraído de la app (claves + textos de origen)
│ ├── terminology.json tabla de reemplazos y términos prohibidos (política de estilo)
│ ├── reference/es.json traducción castellana de referencia, de solo lectura (obra derivada)
│ └── es-cl/<namespace>.json un fichero por namespace con la traducción chilena
├── locale/
│ ├── en.json metadatos de la tarjeta del plugin (meta.title / meta.description)
│ ├── es-CL.json los mismos metadatos en español de Chile
│ └── es.json copia de es-CL.json, por si el resolutor indexa por subetiqueta
├── docs/
│ ├── revision-es-cl.md hoja de revisión del delta, agrupada por namespace
│ └── revision-es-cl.csv la misma hoja en CSV (namespace, clave, inglés, referencia, es-CL)
├── icon.svg icono de la tarjeta (relativo, ≤256 KiB, SVG/PNG/JPEG/WebP)
├── tools/ cadena de herramientas, sin dependencias externas
│ ├── extract-app.cjs extrae el código de app.asar verificando SHA-256
│ ├── extract-locale.cjs extrae los diccionarios en/zh de los plugins de UI
│ ├── split-batches.cjs reparte el catálogo en lotes para traducir en paralelo
│ ├── split-by-namespace.cjs convierte los lotes en un fichero por namespace
│ ├── show-ns.cjs imprime los diccionarios ingleses de los namespaces indicados
│ ├── apply-terminology.cjs aplica (o comprueba con --check) la tabla de terminología
│ ├── delta-report.cjs compara con la referencia, emite la hoja y con --strict-protegidos es puerta
│ ├── check-coherence.cjs concordancia de artículo y género, más el barrido de duplicados entre lotes
│ ├── build-locale-pack.cjs emite lib/ y cordis.patch.yml, e informa de la cobertura
│ ├── audit-es.cjs busca claves ausentes, ficheros mal alineados y repetidas
│ ├── check-portable.cjs evita publicar rutas de la máquina que extrajo el catálogo
│ ├── check-plugin-meta.cjs comprueba lo que DSH exige para listar el plugin
│ └── verify-pack.cjs ejecuta el bundle en un cargador simulado y lo comprueba
├── .github/workflows/ci.yml cobertura, auditoría, portabilidad, términos estrictos, coherencia, metadatos y bundle sincronizado
└── CONTRIBUTING.md · NOTICE.md · CHANGELOG.md · LICENSE · README.md
Flujo de trabajo
Traducir o corregir
- Edita
i18n/es-cl/<namespace>.json(un namespace por fichero). - Conserva los marcadores
{count},{label},{toolName}… exactamente como están eni18n/catalog.json: el compilador rechaza cualquier traducción que pierda o invente uno. - Reconstruye y comprueba:
node tools/build-locale-pack.cjs i18n/catalog.json i18n/es-cl . --check # cobertura y marcadores
node tools/audit-es.cjs i18n/catalog.json i18n/es-cl # claves ausentes y repetidas
node tools/build-locale-pack.cjs i18n/catalog.json i18n/es-cl . # regenera lib/
node tools/verify-pack.cjs lib/client.js # el bundle carga como en DSH
--check sale con código 1 si falta alguna clave o hay marcadores mal, así que sirve como
puerta en integración continua, igual que audit-es.cjs.
Actualizar el catálogo tras una actualización de DSH
# 1. Extraer el catálogo de la instalación nueva
node tools/extract-app.cjs "C:\ruta\a\resources\app.asar" _referencia-dsh
node tools/extract-locale.cjs _referencia-dsh/dsh/node_modules/@deepseek-ai i18n/catalog.json
node tools/check-portable.cjs i18n # el catálogo no lleva rutas locales
# 2. Ver qué falta y traducirlo en i18n/es-cl/<namespace>.json
node tools/build-locale-pack.cjs i18n/catalog.json i18n/es-cl . --check # lista lo nuevo por traducir
# 3. Volver a pasar las puertas de estilo y reconstruir el bundle
node tools/apply-terminology.cjs i18n/terminology.json i18n/es-cl --check
node tools/apply-terminology.cjs i18n/terminology.json i18n/es-cl # aplica lo que quede pendiente
node tools/check-coherence.cjs i18n/es-cl # concordancia y duplicados entre lotes
node tools/delta-report.cjs i18n/catalog.json i18n/reference/es.json i18n/es-cl --strict-protegidos # protegidos 0
node tools/build-locale-pack.cjs i18n/catalog.json i18n/es-cl . # regenera lib/ y cordis.patch.yml
node tools/verify-pack.cjs lib/client.js
# 4. Refrescar la hoja de revisión que revisa el usuario
node tools/delta-report.cjs i18n/catalog.json i18n/reference/es.json i18n/es-cl --md docs/revision-es-cl.md --csv docs/revision-es-cl.csv
Las claves nuevas aparecen como «sin traducir» y en la interfaz se ven en inglés hasta que
alguien las traduzca. docs/revision-es-cl.md y su .csv son
informes generados: se rehacen con el último comando y no se editan a mano.
Empezar otro idioma con este repositorio como plantilla
Haz un fork y cambia tres constantes en tools/build-locale-pack.cjs
(PKG_NAME, LANG_ID, LANG_LABEL), el identificador de la fila en el generador de
cordis.patch.yml (- id: locale-es-cl) y los campos name del package.json. El catálogo
inglés y toda la cadena de herramientas se reutilizan tal cual.
Traducir en paralelo con agentes o por lotes
node tools/split-batches.cjs i18n/catalog.json _i18n/batches # lotes equilibrados
# … cada lote se traduce a _i18n/es-cl/batch-NN.json …
node tools/split-by-namespace.cjs _i18n/es-cl i18n/es-cl # vuelve al formato del repositorio
Contribuir
Las correcciones de traducción son bienvenidas, y también los avisos de textos que suenen a máquina. Lee CONTRIBUTING.md: es corto y evita que un envío se quede sin poder fusionar por un marcador perdido.
Créditos
- Traducción castellana de base (i18n/reference/es.json): Oskarosan/dsh-locale-es, MIT. La adaptación chilena es una obra derivada suya: ver NOTICE.md.
- Diccionarios
enyzh(i18n/catalog.json): los que registran los plugins de interfaz de DeepSeek Harness; se extraen de una instalación local solo para verificar la cobertura, la paridad de claves y los marcadores. - Adaptación al español de Chile y herramientas (
i18n/es-cl/,tools/): este repositorio, MIT.
Aviso legal
DeepSeek Harness es una aplicación de DeepSeek; este repositorio no contiene código de la
aplicación. El catálogo inglés (i18n/catalog.json) se extrae de una instalación local
únicamente para poder verificar la cobertura, la paridad de claves y los marcadores. La
adaptación al español de Chile es una obra derivada de la traducción castellana de
Oskarosan/dsh-locale-es (MIT), que se conserva
como i18n/reference/es.json justamente para poder auditar ese delta. Los detalles y las
marcas están en NOTICE.md. La licencia MIT cubre el contenido propio de este
repositorio: la adaptación, las herramientas y la documentación.
English
Chilean Spanish (es-CL) language pack for the DeepSeek Harness (DSH) web interface:
2,603 of 2,603 keys (100 %) across 57 namespaces, shipped as a client plugin — the
application's app.asar is never patched, and a missing key falls back to English through
the runtime's ?? key, so an incomplete catalog degrades to the source language instead of
breaking. The boundary matters: a namespace with no es-CL dictionary at all would have
nothing to fall back from and would render its keys — that does not happen in this pack, where
all 57 namespaces ship a dictionary, but it is the real edge of the guarantee. 285 of the
2,603 strings (10.9 %) differ from the Castilian base translation; every one of them is
listed, with its English source and its reference, in docs/revision-es-cl.md (and the
matching .csv).
The English-term policy names fifteen terms, but the catalog only has text for eleven of
them: plugin (95 keys), api (25), tool call (23), token (14), json (14), prompt
(12), log (6), shell (5), chat (5), diff (4) and markdown (4). The remaining four —
commit, push, pull request and deploy — never occur in the catalog, so protegidos 0
measures the first eleven, not fifteen. The same report closes that gate as a real check with
--strict-protegidos (exit 1 when the total is above zero), and tools/check-coherence.cjs
adds a systematic duplicate scan across namespaces.
This fork has no public remote of its own; install it from a local checkout by adding
dsh-locale-es-cl to dependencies and to dsh.profile.bundles in your DSH profile's
package.json, then run pnpm install in the profile folder and pick Español (Chile) in
Settings → General → Language. See Cómo funciona for the plugin protocol,
and CONTRIBUTING.md to send translation fixes (keep placeholders such as
{count} intact). Licensed under MIT; the Chilean adaptation is a derived work of
Oskarosan/dsh-locale-es and the en/zh
dictionaries come from DSH itself — see NOTICE.md.
No comments yet. Be the first to write one.