Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
fd00677
chore: add translation verification tooling, ported from angular-ja
oidacra Aug 14, 2026
fc758b2
feat: turn translation detection into claimable GitHub issues
oidacra Aug 14, 2026
bd5e984
fix: stop translating alert prefixes, which breaks 423 callouts
oidacra Aug 17, 2026
098d4f3
feat: POC de traducción incremental por bloque
oidacra Aug 18, 2026
ee4f2b6
fix: baseline correcto y bucket visible en check-translations
oidacra Aug 18, 2026
336d106
fix: detectar los tres estados silenciosos que se contaban como corre…
oidacra Aug 18, 2026
599763d
fix: no pedir que se traduzcan páginas que ya no existen
oidacra Aug 18, 2026
6a9fa99
fix: vigilar también la interfaz del sitio, no solo el markdown
oidacra Aug 18, 2026
5712714
fix: límites de palabra Unicode en las reglas de signal
oidacra Aug 18, 2026
40863d3
fix: comparar contra el árbol de trabajo, y enseñar qué se vigila
oidacra Aug 18, 2026
6ee7de4
feat: marcar todo lo que ya no existe en el original, y abrir su limp…
oidacra Aug 18, 2026
787a543
fix: auditar una rama con su propio alcance y sin mentir sobre huérfanas
oidacra Aug 18, 2026
e254c7d
fix: el sync de issues confundía pull requests con issues
oidacra Aug 18, 2026
367f90e
revert: no automatizar la creación de issues
oidacra Aug 18, 2026
b9ddad4
chore: reactivar navigation-entries ahora que v22.1 lo trae
oidacra Aug 19, 2026
030d9d5
feat: plantillas de issue derivadas de la convención real del repo
oidacra Aug 19, 2026
725cbbc
refactor: una sola plantilla de issue, no tres
oidacra Aug 19, 2026
e6d8903
feat: agrupar el pendiente en lotes del tamaño de un issue
oidacra Aug 19, 2026
8458f9a
feat: skill para crear los issues de traducción
oidacra Aug 19, 2026
e0f1878
fix: los skills del proyecto no se cargaban por el formato
oidacra Aug 19, 2026
b678079
fix: enmascarar atributos HTML y definiciones de enlace en el linter
oidacra Aug 19, 2026
296f741
fix: no enmascarar los atributos que llevan prosa traducible
oidacra Aug 19, 2026
f746bb9
docs: el cómo traducir vive en CONTRIBUTING, no repetido en cada issue
oidacra Aug 19, 2026
1d0e264
feat: plantilla de pull request
oidacra Aug 19, 2026
2cad41c
fix: detectar por comparación con el original, no por idioma
oidacra Aug 19, 2026
c92acf8
fix: crear el respaldo de links.ts, que estaba desprotegido
oidacra Aug 19, 2026
e422947
docs: AGENTS.md como instrucciones comunes a cualquier agente
oidacra Aug 19, 2026
3ae7dc4
refactor: los skills viven en .agents, con enlace simbólico para Claude
oidacra Aug 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
121 changes: 121 additions & 0 deletions .agents/skills/batch-translate/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
---
name: batch-translate
description: Traducir múltiples archivos de documentación Angular en lote
---

# Batch Translation Agent

Traduce múltiples archivos de documentación Angular del inglés al español de forma secuencial. Para cada archivo aplica el mismo proceso que `/translate-angular-docs`.

## Cuándo usar este agent

- Tienes una lista de archivos relacionados (ej. todos los guides de forms)
- Quieres procesar una carpeta completa o sección
- Necesitas un reporte de qué se tradujo y qué quedó pendiente

## Uso

Pasa una lista de archivos o describe la sección a traducir:

```
/batch-translate guide/forms/overview.md guide/forms/reactive-forms.md guide/forms/validation.md
```

O con una descripción:
```
/batch-translate todos los archivos sin traducir en reference/configs/
```

---

## Proceso para cada archivo

### 1. Verificar estado

Antes de traducir, comprueba si el archivo ya está traducido:
- Si existe `archivo.en.md` → el `archivo.md` ya fue traducido (saltar o confirmar con el usuario)
- Si no existe `archivo.en.md` → el `archivo.md` está en inglés, proceder

### 2. Crear backup

```bash
cp adev-es/src/content/<ruta>/archivo.md adev-es/src/content/<ruta>/archivo.en.md
```

### 3. Leer el archivo original

Lee el contenido completo antes de traducir.

### 4. Traducir

Aplica todas las reglas del skill `/translate-angular-docs`:
- Respeta el glosario de términos
- Mantén el código intacto (traduce solo los comentarios)
- Preserva el formato markdown
- Mantén alineación de líneas cuando sea posible
- Traduce las etiquetas `<docs-*>` correctamente

### 5. Escribir la traducción

Sobreescribe `archivo.md` con la traducción.

### 6. Verificar anchors

Si se tradujeron encabezados con enlaces internos, actualiza los anchors.

### 7. Stage en git

```bash
git add adev-es/src/content/<ruta>/archivo.md adev-es/src/content/<ruta>/archivo.en.md
```

---

## Reglas del batch

- **Procesar secuencialmente**, un archivo a la vez (no en paralelo)
- **Confirmar antes de empezar** si la lista tiene más de 5 archivos
- **No mezclar archivos** de carpetas muy distintas en un mismo commit
- **Pausar si hay duda** sobre algún término técnico no listado en el glosario — preguntar al usuario

---

## Reporte final

Al terminar, entrega un resumen con este formato:

```
## Resumen de traducción

✅ Traducidos (N archivos):
- guide/forms/overview.md
- guide/forms/reactive-forms.md

⏭️ Omitidos (ya tenían .en.md):
- guide/forms/validation.md

❌ Con problemas:
- guide/forms/template-driven.md → razón

## Próximos pasos

git commit -m "translate: translations for forms guides"
```

---

## Commit al finalizar el lote

Agrupa los archivos de la misma sección en un solo commit:

```bash
# Formato:
git commit -m "translate: translations for <sección>"

# Ejemplos:
# translate: translations for forms guides
# translate: translations for reference configs section
# translate: complete translation of routing guides
```

Si los archivos son de secciones distintas, haz commits separados por sección.
165 changes: 165 additions & 0 deletions .agents/skills/crear-issues-traduccion/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,165 @@
---
name: crear-issues-traduccion
description: Crear los issues de traducción del pendiente, con título, etiquetas y criterios de aceptación según la convención del repo
---

# Crear issues de traducción

Convierte el pendiente detectado en issues de GitHub bien formados. El agrupado
lo calcula la herramienta; lo que aporta este skill es lo que un script no
acierta: **nombrar** cada lote y escribir sus criterios de aceptación.

## Paso 1 — Obtener el pendiente agrupado

```shell
npm run check-translations -- --issues
```

Devuelve lotes ya agrupados por carpeta, subiendo de nivel cuando una carpeta no
reúne suficientes archivos. Cada lote sale marcado con `← renombra esto`: ese es
tu trabajo.

Si necesitas los datos crudos —para contar, filtrar o ver los diffs—:

```shell
npm run check-translations -- --json
```

## Paso 2 — Comprobar qué ya existe

**Antes de crear nada.** El repo mantiene estos issues a mano y duplicarlos es
peor que no crearlos:

```shell
gh issue list --state open --limit 100 --search "traducir OR actualizar"
```

Si un lote ya tiene issue, no lo abras de nuevo. Si el issue existe pero le
faltan archivos que ahora sí detectamos, **coméntalo** en vez de abrir otro.

## Paso 3 — Componer el título

Cuatro patrones, todos sacados del historial del repo:

| Situación | Patrón | Ejemplos reales |
| --- | --- | --- |
| Una carpeta de guías | `Traducir - Guías de <X>` | Guías de Errores · Guías de SSR · Guías de Componentes |
| Un solo documento | `Traducir - Guía de <X>` | Guía de Seguridad · Guía de Tailwind · Guía Zoneless |
| Un tutorial | `Traducir - Tutorial <X>` | Tutorial Signals · Tutorial Learn Angular |
| Página con nombre propio | `Traducir - <Nombre>` | Press Kit · Roadmap · Releases |

Para traducciones desactualizadas, cambia el verbo: `Actualizar - Pasos del
tutorial Learn Angular`.

Si las páginas las trae una versión nueva de Angular, antepón la versión:
`[Angular 22.1] Traducir guías de Signal Forms`.

### Cómo nombrar la sección

La misma regla del glosario: **el descriptor va en español, el nombre de
producto o API se queda en inglés.**

- `reference/errors` → **Guías de Errores**
- `guide/forms/signals` → **Guías de Signal Forms** (no «Formularios de Señales»)
- `guide/di` → **Guías de Inyección de Dependencias**
- `tools/devtools` → **Guías de Devtools**
- `guide/zoneless` → **Guía Zoneless**

Ante la duda, **mira cómo se llama esa sección en el menú**: ahí ya está
traducida y decidida por alguien.

```shell
grep -n "label:" adev-es/src/app/routing/navigation-entries/index.ts | grep -i <sección>
```

Ese archivo es la mejor referencia de estilo que hay. Por ejemplo:

| En el menú | Qué enseña |
| --- | --- |
| `Enciclopedia de Errores` | el descriptor se traduce |
| `Inyección de Dependencias` | término establecido, en español |
| `Estado dependiente con linkedSignal` | el nombre de la API se queda en inglés |

Nunca uses la ruta como título. `reference/errors` es el dato de entrada, no el
nombre.

## Paso 4 — Elegir etiquetas

- `docs-translation` — **siempre**. El 17 % de los issues del repo no la tiene, y
por eso las búsquedas por etiqueta no son fiables.
- `good first issue` — solo si el lote es pequeño (1–3 archivos), sin bloques de
código complejos y sin terminología nueva.
- `help wanted` — cuando el lote es grande y conviene repartirlo.

No inventes etiquetas: usa las que existen (`gh label list`).

## Paso 5 — Escribir el cuerpo

Estructura fija:

```markdown
<una frase de contexto: de dónde salen estas páginas>

## Archivos

- [ ] `archivo.md`
- [ ] `otro.md`

## Criterios de aceptación

- [ ] Cada archivo tiene su `.en.md` con el original en inglés
- [ ] `npm run lint-glossary` no reporta problemas en los archivos tocados
- [ ] `npm run check-translations` ya no los lista
- [ ] Los prefijos de alerta (`NOTE:`, `TIP:`, `IMPORTANT:`…) siguen en inglés
- [ ] `.md` y `.en.md` van en el mismo commit
```

Para un lote de **actualización** los criterios cambian, porque el trabajo es otro:

```markdown
## Criterios de aceptación

- [ ] Solo se tocaron los bloques que cambiaron en el original
- [ ] `npm run verify-translation -- <ruta>` pasa en cada archivo
- [ ] `npm run check-translations` ya no los lista
- [ ] `.md` y `.en.md` van en el mismo commit
```

### Sobre los criterios

Son verificables con un comando, a propósito. Un criterio como «la traducción
suena natural» no se puede marcar como cumplido sin discutir; «`lint-glossary`
no reporta problemas» sí.

En los lotes de actualización, incluye el conteo de líneas por archivo que da la
herramienta: distingue el trabajo de dos minutos del de media hora y ayuda a
repartir.

## Paso 6 — Crear el issue

```shell
gh issue create \
--title "Traducir - Guías de Errores" \
--label docs-translation \
--body-file cuerpo.md
```

Usa `--body-file`: pasar markdown largo con `--body` se rompe con las comillas y
los saltos de línea.

> [!IMPORTANT]
> Crear issues es una acción visible para toda la comunidad. **Enseña los
> borradores y espera confirmación antes de ejecutar `gh issue create`**, incluso
> si te pidieron crearlos. Un lote mal agrupado o mal nombrado hay que cerrarlo a
> mano después.

## Qué no hacer

- **No abrir un issue por archivo.** El repo agrupa por sección; 31 issues para
31 archivos es ruido que nadie atiende.
- **No mezclar traducir con actualizar** en el mismo issue: el procedimiento es
distinto y los criterios de aceptación también.
- **No incluir archivos huérfanos.** Si `check-translations` los lista como
huérfanos, esas páginas ya no existen en el original: hay que borrarlas, no
traducirlas.
- **No usar la ruta como título.**
Loading