dsh-locale-es
Pack de idioma castellano (es) para la interfaz de DeepSeek Harness (DSH).
- 2.603 de 2.603 claves traducidas (100 %), repartidas en 57 namespaces.
- 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 el pack nunca rompe la interfaz.
Estado
| Cobertura | 2.603/2.603 claves (100 %), 57/57 namespaces |
| Idioma | es — etiqueta «Español», respaldo en |
| Paquete | dsh-locale-es 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 |
Las tres comprobaciones se pueden repetir en cualquier momento y no necesitan la aplicación:
node tools/build-locale-pack.cjs i18n/catalog.json i18n/es . --check # cobertura y marcadores
node tools/audit-es.cjs i18n/catalog.json i18n/es # claves ausentes y repetidas
node tools/check-portable.cjs i18n # ni rutas ni secretos locales
node tools/verify-pack.cjs lib/client.js # ejecuta el bundle como lo hace DSH
Instalación
Hay dos caminos. El corto usa el gestor de plugins que trae DSH; el manual edita el perfil.
Vía corta: el gestor de plugins
En la interfaz: barra lateral → Plugins → Add plugin, y pega la especificación. O desde la terminal, con el mismo resultado:
# por nombre, si el paquete está publicado en npm
dsh plugin --profile desktop add dsh-locale-es
# directamente desde GitHub, sin publicar nada
dsh plugin --profile desktop add github:Oskarosan/dsh-locale-es
# o desde una copia local
dsh plugin --profile desktop add C:\ruta\a\dsh-locale-es
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. Antes de instalar comprueba que el paquete declare
dsh.bundle; al terminar lo añade a dsh.profile.bundles del perfil. Después, recarga la
interfaz y elige el idioma en Ajustes → General → Idioma → Español.
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": "link:C:/ruta/a/dsh-locale-es"
},
"dsh": {
"profile": {
"bundles": [
"@deepseek-ai/dsh-base",
"@deepseek-ai/dsh-web-app",
"dsh-locale-es"
]
}
}
}
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-esen 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» en Ajustes, desactiva y vuelve a activar la fila
locale-esen 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', label: 'Español', fallback: 'en' };
function apply(ctx) {
ctx.effect(() => ctx.locale.addLanguage(LANGUAGE), 'locale-es: idioma');
for (const [ns, dict] of Object.entries(DICTIONARIES)) {
ctx.effect(() => ctx.locale.register(ns, 'es', dict), 'locale-es: ' + 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/
├── 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)
│ └── es/<namespace>.json un fichero por namespace con la traducción castellana
├── locale/
│ ├── en.json metadatos de la tarjeta del plugin (meta.title / meta.description)
│ └── es.json los mismos metadatos en castellano
├── 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
│ ├── 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, metadatos y bundle sincronizado
└── CONTRIBUTING.md · NOTICE.md · CHANGELOG.md · LICENSE · README.md
Flujo de trabajo
Traducir o corregir
- Edita
i18n/es/<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 . --check # cobertura y marcadores
node tools/audit-es.cjs i18n/catalog.json i18n/es # claves ausentes y repetidas
node tools/build-locale-pack.cjs i18n/catalog.json i18n/es . # 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
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
node tools/build-locale-pack.cjs i18n/catalog.json i18n/es . --check # lista lo nuevo por traducir
Las claves nuevas aparecen como «sin traducir» y en la interfaz se ven en inglés hasta que alguien las traduzca.
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) 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/batch-NN.json …
node tools/split-by-namespace.cjs _i18n/es i18n/es # 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.
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. Los
detalles y las marcas están en NOTICE.md. La licencia MIT cubre el contenido
original de este repositorio: las traducciones y las herramientas.
English
Spanish (es) 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 untranslated keys fall back to English automatically.
Install it by adding dsh-locale-es 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 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.
No comments yet. Be the first to write one.