Skip to content
dsh.fish
Bundle

dsh-locale-es-cl

Pack de idioma español de Chile (es-CL) para la interfaz web de DeepSeek Harness

Source
neobones
stars
1 stars
License
MIT
Updated
Updated 2 days ago

Readme

# 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](docs/revision-es-cl.md) y
  [docs/revision-es-cl.csv](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.

## Instalar en una línea

```sh
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](#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](LICENSE) y [NOTICE.md](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:

```powershell
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:

```powershell
# 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:

```json
{
  "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:

```powershell
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](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:

```js
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:

```js
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

1. Edita `i18n/es-cl/<namespace>.json` (un namespace por fichero).
2. **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.
3. Reconstruye y comprueba:

```powershell
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

```powershell
# 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](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

```powershell
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](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](i18n/reference/es.json)):
  [Oskarosan/dsh-locale-es](https://github.com/Oskarosan/dsh-locale-es), MIT. La adaptación
  chilena es una **obra derivada** suya: ver [NOTICE.md](NOTICE.md).
- **Diccionarios `en` y `zh`** ([i18n/catalog.json](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](https://github.com/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](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](#cómo-funciona) for the plugin protocol,
and [CONTRIBUTING.md](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](https://github.com/Oskarosan/dsh-locale-es) and the `en`/`zh`
dictionaries come from DSH itself — see [NOTICE.md](NOTICE.md).

Install

dsh plugin --profile web add github:neobones/dsh-locale-es-cl

Profile: web

  • This package builds from source on install. pnpm will ask you to allow its build script — that is permission to run the package’s code on your machine, outside the agent sandbox. Only allow sources you trust.
  • This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.
Source