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.asar ni 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.
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.1 |
| 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.patch en el package.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 el name y la description del package.json como
respaldo; el icono sale del campo icon de nivel superior. Para que el resolutor ESM los
encuentre, el mapa exports tiene que declarar ./locale/*.json y ./package.json.
tools/check-plugin-meta.cjs replica 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: y github: 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-cl en 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-cl en 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 en
i18n/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
en y zh (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.