
# Traducciones

Blockstudio incluye sus traducciones en la carpeta `languages`. WordPress las utiliza cuando el idioma del sitio o el idioma del perfil de un usuario coincide con alguno de ellos. Funciona igual cuando Blockstudio se ejecuta como plugin, como plugin de uso obligatorio o como paquete Composer.

## Idiomas disponibles

Blockstudio incluye traducciones para las WordPress configuraciones regionales registradas en su `languages/locales.json` incluido, incluidas variantes regionales y formales e informales. El inglés (`en_US`) es el idioma de origen y no necesita un archivo de traducción. La lista combina las configuraciones regionales compatibles con WordPress de GlotPress con las variantes disponibles en el WordPress de traducción del núcleo de API.

Se conservan las traducciones existentes al alemán (`de_DE`) y al alemán formal (`de_DE_formal`). Las traducciones adicionales se generan con IA mediante GPT-6 Luna y se marcan como generadas por máquina en sus encabezados `.po`. Superan las comprobaciones automatizadas de integridad y formato, pero no todas han sido revisadas por hablantes nativos. Se agradecen las correcciones.

Las traducciones abarcan los controles de campos del editor de bloques, la página de administración, el lienzo, la superposición de herramientas de desarrollo y los mensajes de los endpoints REST. Las etiquetas y los textos de ayuda de tus propios archivos `block.json` pertenecen a tu tema o plugin y utilizan su dominio de texto.

Selecciona el idioma en **Settings > General > Site Language** o elige un idioma personal en tu perfil de WordPress. Blockstudio utiliza esa configuración regional automáticamente. No añade idiomas al selector de idioma de WordPress: la configuración regional también debe estar disponible en tu instalación de WordPress. No se necesita ninguna solicitud a la IA, suscripción de traducción ni ajuste adicional en tiempo de ejecución en tu sitio.

## Sobrescribir una traducción

Los archivos de traducción de `wp-content/languages/plugins` tienen prioridad sobre los incluidos, tanto para las cadenas de PHP (`blockstudio-de_DE.mo` o `blockstudio-de_DE.l10n.php`) como para los scripts (un archivo por cada identificador de script, por ejemplo `blockstudio-de_DE-blockstudio-blocks.json`).

## Contribuir con una traducción

Cada idioma es un archivo `.po` que puedes editar con cualquier editor de texto o con una herramienta de traducción como Poedit. Se agradecen las correcciones y los nuevos idiomas en forma de solicitudes de cambios.

1. Para añadir un idioma, copia `languages/blockstudio.pot` en `languages/blockstudio-<locale>.po`, por ejemplo `blockstudio-fr_FR.po`, y establece los encabezados `Language` y `Plural-Forms`. Para mejorar un idioma, edita su archivo `.po` existente.
2. Traduce las cadenas. Conserva en la traducción los marcadores de posición como `%1$s`.
3. Ejecuta `npm run i18n`. Escribe los archivos `.mo`, `.l10n.php` y `.json` que carga WordPress.
4. Confirma el archivo `.po` junto con los archivos generados y abre una solicitud de cambios.

Si no puedes ejecutar `npm`, basta con una solicitud de cambios que incluya únicamente el archivo `.po`. Los archivos generados pueden añadirse antes de la fusión.

## Generar las traducciones que faltan

Los responsables del mantenimiento pueden generar las entradas que faltan con un Codex CLI autenticado. Este es un comando de desarrollo opcional, no algo que WordPress ejecute:

```bash
npm run i18n:translate -- --dry-run
npm run i18n:translate
```

El modelo predeterminado es `gpt-6-luna`. Para trabajar en una configuración regional, usa `npm run i18n:translate -- --locale fr_FR`. El comando extrae las cadenas de origen más recientes, completa las traducciones que faltan y luego compila los archivos `.mo`, `.l10n.php` y `.json` para cada script. Solo se envían a Codex cadenas de la interfaz pública, su contexto y las formas existentes; no se envía contenido del sitio ni datos de usuarios.

Las traducciones existentes que no estén vacías nunca se sustituyen. Los lotes completados se guardan, así que, si se vuelve a ejecutar el comando tras una interrupción, se reanuda el trabajo pendiente. Antes de guardar, se validan los marcadores de posición como `%1$s`, el marcado HTML, los identificadores técnicos y las formas plurales requeridas. Las entradas difusas y los plurales de origen modificados quedan pendientes de revisión por parte de un traductor. No se recurre a otro modelo si el solicitado no está disponible.

`npm run i18n:locales` actualiza explícitamente la lista de configuraciones regionales y las reglas de pluralización desde WordPress/GlotPress. `npm run i18n:coverage` comprueba que todas las configuraciones regionales de la lista incluida en el repositorio estén completas. Ni las comprobaciones de cobertura ni la integración continua habitual llaman a la IA o recuperan datos de configuraciones regionales. Consulta el README del repositorio para ver las opciones de procesamiento por lotes, concurrencia y recuperación.

## Cadenas traducibles en el código

- PHP: use las funciones WordPress con el dominio de texto `blockstudio`, por ejemplo `__( 'Invalid block.', 'blockstudio' )`.
- JavaScript: importa `__` desde `@/utils/__` y pasa una cadena literal, por ejemplo `__( 'Add row' )`. Una cadena que se construye en tiempo de ejecución no se puede traducir, así que usa una cadena literal por variante.
- Un nuevo paquete de scripts con cadenas traducibles necesita una entrada en `scripts/i18n.ts` y una llamada a `wp_set_script_translations()` con el mismo identificador y `Translations::script_path()`.

Después de cambiar las cadenas, ejecuta `npm run i18n`. Actualiza `languages/blockstudio.pot` y todos los archivos `.po`. Las cadenas nuevas permanecen en inglés hasta que un traductor o `npm run i18n:translate` las complete. CI ejecuta `npm run i18n:check` y `npm run i18n:coverage`, que rechazan archivos compilados obsoletos, problemas de extracción o una cobertura incompleta de las configuraciones regionales. La generación sigue siendo una acción explícita del mantenedor.
