docs: cerrar el bloqueante de traducción en la guía de autoservicio (#222) #226
@@ -2,9 +2,9 @@
|
|||||||
|
|
||||||
> **Para quién es este documento:** para Inma y Mixbot, a partir de la conversación del
|
> **Para quién es este documento:** para Inma y Mixbot, a partir de la conversación del
|
||||||
> 2026-08-31 en Buzz: además del audio ([#222](https://gitea.feadulta.com/rafa/feadulta/issues/222),
|
> 2026-08-31 en Buzz: además del audio ([#222](https://gitea.feadulta.com/rafa/feadulta/issues/222),
|
||||||
> ver `docs/guia-tts-audio-autoservicio-inma-mixbot.md`), Rafa quiere traspasar también la
|
> ver `docs/guia-tts-audio-autoservicio-inma-mixbot.md`), Rafa confirmó que la traducción se
|
||||||
> traducción. A diferencia del audio, hoy **no hay un issue abierto pidiéndolo** — este
|
> traspasa también. El endpoint para enlazar traducciones (PR #225) se hizo bajo el paraguas
|
||||||
> documento adelanta el trabajo para cuando se dispare.
|
> del propio #222.
|
||||||
>
|
>
|
||||||
> **Motores autorizados por Rafa (2026-08-31):** un agente local con Haiku desde el propio
|
> **Motores autorizados por Rafa (2026-08-31):** un agente local con Haiku desde el propio
|
||||||
> Claude/Cowork de Inma (no la API de pago de Rafa — es otra cuenta, otro caso), o MiniMax
|
> Claude/Cowork de Inma (no la API de pago de Rafa — es otra cuenta, otro caso), o MiniMax
|
||||||
@@ -13,28 +13,43 @@
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 0. Antes de nada: esto también tiene un tope bloqueante
|
## 0. Crear y enlazar la traducción — ya resuelto
|
||||||
|
|
||||||
Igual que pasaba con el audio, **hoy no hay forma de decirle a WordPress "esta traducción
|
Ya existe un endpoint que crea el post traducido **y** lo enlaza con Polylang (idioma +
|
||||||
va en inglés y es la versión de este post en español"** desde fuera. Ese enlace (idioma +
|
grupo de traducción) en una sola llamada — no hace falta tocar nada de bajo nivel:
|
||||||
grupo de traducción) lo gestiona Polylang con dos funciones PHP internas
|
|
||||||
(`pll_set_post_language`, `pll_save_post_translations`) que **no están expuestas por REST** —
|
|
||||||
ni siquiera de lectura (el único endpoint que hay, `fea/v1/lang/{id}`, solo lee el idioma, no
|
|
||||||
permite fijarlo ni enlazar grupos).
|
|
||||||
|
|
||||||
Podéis crear el post traducido por `POST /wp/v2/posts` sin problema (igual que cualquier
|
```
|
||||||
artículo), pero **quedaría suelto**: sin idioma asignado y sin enlace Polylang al original en
|
POST https://www.feadulta.com/wp-json/fea/v1/crear-traduccion
|
||||||
español, así que el selector de idioma del sitio no lo encontraría y no contaría como "la
|
Authorization: Basic <usuario:contraseña_de_aplicación>
|
||||||
traducción EN de este artículo".
|
Content-Type: multipart/form-data
|
||||||
|
|
||||||
**Esto necesita el mismo tipo de solución que el audio**: un endpoint `fea/v1/crear-traduccion`
|
es_id=<ID del post ES>
|
||||||
(o registrar la taxonomía `language` de Polylang en REST con permisos de administrador) que
|
lang=en|fr|it|pt
|
||||||
haga internamente lo mismo que ya hace `scripts/fea_translate_helper.php::create` en local:
|
title=<título traducido>
|
||||||
crear el post, `pll_set_post_language($id, $lang)`, y `pll_save_post_translations($grupo)`
|
content=<HTML traducido>
|
||||||
enlazándolo con el ES. No lo he encargado todavía — es una pieza más grande que la del audio
|
excerpt=<opcional>
|
||||||
(toca la lógica central de multiidioma del sitio) y prefiero que Rafa decida el momento y el
|
status=draft|publish (default draft)
|
||||||
alcance antes de que Codix la construya. Documento aquí el resto del proceso para que, en
|
model=<opcional, solo trazabilidad — p.ej. "minimax" o "haiku-local">
|
||||||
cuanto ese hueco se cierre, solo falte la llamada final.
|
```
|
||||||
|
|
||||||
|
Respuesta (`201` si crea, `200` si ya existía — **es idempotente**, repetir la llamada con el
|
||||||
|
mismo `es_id`/`lang` nunca duplica):
|
||||||
|
|
||||||
|
```json
|
||||||
|
{"es_id": 56786, "lang": "en", "translation_id": 56787, "created": true,
|
||||||
|
"url": "https://www.feadulta.com/en/?p=56787"}
|
||||||
|
```
|
||||||
|
|
||||||
|
Por detrás replica exactamente lo que hacía `scripts/fea_translate_helper.php::create` en
|
||||||
|
local: asigna el idioma antes de las categorías, mapea cada categoría del ES a su
|
||||||
|
equivalente traducida (o la deja en español si no existe traducción de esa categoría),
|
||||||
|
preserva el resto del grupo de traducciones si el ES ya tenía otros idiomas, y añade los
|
||||||
|
metas de trazabilidad (`traduccion_automatica`, `traduccion_origen`, `traduccion_modelo`,
|
||||||
|
`traduccion_fecha`).
|
||||||
|
|
||||||
|
Verificado por Claudix el 2026-08-31 con una prueba real de extremo a extremo en producción
|
||||||
|
(post ES desechable → traducción EN creada → confirmado con `pll_get_post_translations` que
|
||||||
|
el grupo quedó `{es: ..., en: ...}` — todo borrado después).
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -153,9 +168,8 @@ ritmo), parad y reintentad más tarde, no machaquéis la API.
|
|||||||
|
|
||||||
## 7. Qué falta para que esto sea autoservicio de verdad
|
## 7. Qué falta para que esto sea autoservicio de verdad
|
||||||
|
|
||||||
- **Bloqueante (§0):** endpoint o mecanismo para fijar idioma + enlazar grupo Polylang de
|
Con el endpoint del §0 ya no queda ningún bloqueante de infraestructura conocido para crear
|
||||||
cada traducción — sin esto podéis generar el texto pero no "engancharlo" al sitio como
|
y enlazar traducciones por REST. Lo que sigue siendo trabajo vuestro, no de infraestructura:
|
||||||
traducción real, igual que pasaba con el audio antes del #222.
|
generar el texto (motores del principio del documento), aplicar el QA del §4 antes de
|
||||||
- Decisión pendiente de Rafa (no la resuelvo yo aquí): si vuestro agente de traducción va a
|
llamar al endpoint, y decidir cuándo pasáis una traducción de `draft` a `publish` (mismo
|
||||||
tener acceso de shell/SSH al WordPress (como tenía Hermes) o va a ser puramente REST como
|
criterio que la carta en español, ver `docs/guia-publicacion-carta-inma.md`).
|
||||||
el resto de vuestro trabajo — cambia bastante el diseño del endpoint que haría falta.
|
|
||||||
|
|||||||
Reference in New Issue
Block a user