Una pila headless ya se encarga de su renderizado, por lo que Universally se integra como un servicio de traducción que tu servidor llama en lugar de algo que se interpone entre tu sitio. Envías texto, recibes texto y tú decides dónde se almacena y cuándo se actualiza.
La API y las claves se explican en Integrar usando la API. Esta página trata sobre qué partes de ella encajan en un frontend desacoplado.
Qué endpoint encaja
La API de traducción tiene dos que importan aquí, y las configuraciones headless suelen querer la primera:
/v1/traducir/cadenas |
/v1/traducir/html |
|
|---|---|---|
| Envías | hasta 500 cadenas por solicitud | una página renderizada |
| Recibes de vuelta | un mapa de la cadena de origen a la traducción | el documento traducido |
| Encaja | contenido que sale de un CMS como campos | páginas renderizadas por servidor que estabas a punto de devolver |
Con el endpoint de cadenas, tu CMS sigue siendo la fuente de verdad. Obtén los campos que necesitas, envía los valores, almacena lo que recibes de vuelta contra las mismas claves. Nada tiene que adivinar qué parte de una página es contenido.
curl -X POST https://translator.universally.com/v1/translate/strings \
-H "X-API-Key: $UNIVERSALLY_KEY" \
-H "Content-Type: application/json" \
-d '{"strings":["Add to cart","Out of stock"],"targetLanguage":"es"}'
La respuesta contiene las traducciones más un bloque de metadatos: stringsReceived, stringsTranslated, skippedStrings y limitReached. Lee limitReached en cada respuesta. Cuando es true, la respuesta es parcial.
Una cadena que no se tradujo está ausente de translations, no se devuelve sin cambios. Busca cada clave con un fallback a tu propio texto de origen (translations[s] ?? s), o renderizarás undefined. Ver Traducir cadenas.
Las solicitudes repetidas de texto ya traducido se sirven desde el almacenamiento y no cuestan nada adicional. Enviar fresh: true traduce de nuevo y devuelve el resultado sin almacenarlo, así que guarda tu propia copia de cualquier cosa que obtengas de esa manera: una solicitud posterior sin fresh aún devuelve la traducción almacenada. Esas llamadas tampoco cuentan contra tu total de palabras.
Mantén la clave en el lado del servidor
La clave del proyecto no debe llegar al navegador. Cualquier cosa en JavaScript del frontend, en un paquete móvil o en un repositorio es público, y la clave puede gastar tu total de palabras. Llama a la API desde tu servidor o paso de compilación, luego sirve el resultado almacenado a los clientes. Ver Encuentra tu clave de API.
Lo que posees
El plugin de WordPress hace varias cosas además de llamar a un endpoint. A través de la API son tuyas:
- Una URL por idioma. Algo debe enrutar
/es/pricing/a tu renderizado en español. Universally no intercepta el tráfico. Ver Subdominios y subdirectorios para la forma a copiar. - Almacenamiento e invalidación. Guarda las traducciones junto a tu contenido y reenvía una cadena cuando el origen cambie. Traducir en cada solicitud es lento y sin sentido.
- El selector de idioma. No se inyecta ningún widget, por lo que el marcado y el estado son tuyos.
- hreflang y sitemaps. El plugin de WordPress emite alternativos hreflang; tu propio front end emite su propio
<head>, por lo que esos enlaces son parte de la integración. Ver etiquetas hreflang.
Lo que todavía funciona sin WordPress
Cualquier cosa que viva en el panel en lugar del plugin se aplica a tu contenido de la misma manera:
- Reglas del glosario, aplicadas cuando ocurre la traducción, por lo que los nombres de marca también se mantienen en la ruta de la API.
- Editar traducciones manualmente para corregir una cadena específica.
- Variantes de idioma y segmentación regional, ya que una variante se elige por el código de idioma que envías.