Los archivos de idioma de una app son una misma tarea con trece extensiones de archivo. Tienes entre manos un archivo JSON, un strings.xml, un archivo PO o un catálogo de cadenas, y quieres tener esas mismas cadenas en cinco idiomas más sin que falle la compilación.
El formato cambia. La tarea no: conserva las claves y los marcadores de posición, traduce los valores y repite el proceso en cada lanzamiento.
¿Qué opción deberías usar?
| Ideal para | Cuándo se queda corto | |
|---|---|---|
| AI Glot | Cualquiera de los formatos siguientes, varios idiomas en una sola tarea, un glosario que hay que respetar y cada lanzamiento | No hace falta para diez cadenas |
| Una plataforma de gestión de traducciones (Crowdin, Lokalise, Phrase) | Un equipo con un flujo de trabajo continuo, revisores y conexión a un repositorio | Tienes que configurar un proyecto y conectar el repositorio antes de traducir la primera cadena |
| DeepL | Archivos XLIFF de hasta 10 MB | Acepta XLIFF, pero no los demás formatos de esta lista, y su glosario sustituye términos sin entender por qué deben mantenerse |
| ChatGPT, Claude u otro asistente | Un puñado de cadenas | Tienes que escribir la instrucción y añadir el glosario a cada conversación. Los archivos largos se generan token a token, despacio, y consumen tu límite de uso. Cada ejecución puede cambiar una clave o estropear un marcador de posición |
| Un traductor autónomo o una agencia | La página de la App Store y la introducción de tu app | Es lento, se cobra por palabra y, además, tienes que preparar los archivos |
Paga a una persona para traducir las cinco cadenas que venden tu app: la ficha de la tienda y la primera pantalla. Deja que un motor se encargue de los miles de cadenas que hay detrás.
Elige tu archivo
Cada formato tiene su propia página, con una herramienta gratuita y todos los detalles. Esto es lo principal que debes saber sobre cada uno.
| Archivo | Dónde se encuentra | Qué debes saber |
|---|---|---|
| JSON | locales/en.json |
Las claves se devuelven en el mismo orden. Las instrucciones protegen marcadores de posición como {count} |
| ARB (Flutter) | lib/l10n/app_en.arb |
Las entradas de metadatos @ se copian. Cambia @@locale al idioma de destino |
| YAML | config/locales/en.yml |
Se reconocen los marcadores de posición %{name} al estilo de Rails. Los comentarios se eliminan al volver a guardar el archivo |
| TOML | i18n/en.toml (Hugo) |
Solo cambian los valores de texto. Por lo general, los comentarios se conservan |
| XLIFF | exportaciones de tus herramientas | Versiones 1.2 y 2.0. Las etiquetas en línea se reconstruyen a partir del texto original |
| PO y POT | locale/fr/LC_MESSAGES/app.po |
Las entradas en plural reciben las formas del idioma de destino y se reescribe la cabecera Plural-Forms |
| Qt Linguist | app_fr.ts |
Los mensajes en plural (numerus) aún no se traducen. Después, ejecuta lrelease |
| Catálogo de cadenas | Localizable.xcstrings |
Todos los idiomas están en un solo archivo. Las sustituciones y las variantes de dispositivo no se modifican |
| iOS .strings | fr.lproj/Localizable.strings |
Se devuelve en UTF-8 y se conservan los bloques de comentarios. También se gestionan los plurales de .stringsdict |
| Android XML | res/values-fr/strings.xml |
Se gestionan los plurales y las matrices de cadenas. Se respeta translatable="false" |
| RESX y RESW | Resources.fr.resx |
Recibes un archivo por idioma. Los comentarios para desarrolladores se mantienen en inglés |
| Java .properties | messages_fr.properties |
Solo UTF-8. Si un valor continúa en la línea siguiente, ponlo primero en una sola línea |
No todos los formatos organizan los idiomas de la misma manera. Un catálogo de cadenas reúne todos los idiomas en un archivo. La mayoría de los demás formatos, incluidos JSON, Android e iOS, guardan un idioma por archivo, así que cada idioma de destino tiene su propio archivo.
Cómo queda un archivo traducido
Solo cambian los valores.
{ "cart.title": "Your cart", "cart.title": "Votre panier", "cart.items": "{count} items", "cart.items": "{count} articles", "cart.checkout": "Go to checkout" "cart.checkout": "Passer à la caisse"}El recorrido de un archivo
- 1SubirEl archivo tal cualO un ZIP con varios
- 2Dinos qué necesitasIdiomas y alcanceGratis
- 3Leer el planCadenas, palabras y costeGratis
- 4AprobarEl único paso que genera gastoConsume créditos
- 5DescargarUn archivo por idiomaSuéltalo aquí
No se consume nada antes del cuarto paso, y corregir un plan equivocado no cuesta nada.
Cómo hacerlo, paso a paso
1. Prueba un archivo gratis. Cada página de formato incluye una herramienta gratuita que no requiere crear una cuenta.
2. Sube el archivo en la aplicación o envíalo desde la línea de comandos, como explicamos más abajo.
3. Explica lo que necesitas en una frase.
Translate this file into French.
Skip every key that starts with "internal.".
La frase determina qué se traduce en todo el archivo. Las reglas sobre cómo debe expresarse el texto, como «mantén cada {placeholder} exactamente como está» o «usa un registro informal», van en el segundo cuadro al aprobar, porque se aplican a cada cadena tal como está escrita.
4. Añade un glosario con el nombre del producto, los nombres de las funciones y las palabras que tu aplicación siempre utiliza de la misma forma. Cómo crear uno.
5. Elige un nivel de calidad.
Lite ofrece aproximadamente tres veces más palabras por crédito y es más rápido. Es ideal para la larga cola de ajustes y textos de ayuda. Standard es para las cadenas que el usuario lee primero. En Standard, un crédito equivale a una palabra.
6. Aprueba y descarga.
Un archivo, muchos idiomas
Los nombres de archivo son solo un ejemplo. Si quieres traducir una carpeta completa de archivos de idioma, comprímelos en un ZIP: puedes procesar hasta 200 archivos y 20 MB en un solo trabajo.
Tres formas de usarlo
Desde la línea de comandos es la opción que suelen elegir los desarrolladores. Son los mismos cuatro pasos, en un script:
# 1. Create the job. Free. Returns a plan and an id.
id=$(aiglot batches create locales/en.json \
--instruction "Translate into French. Skip every key that starts with internal." \
--json | jq -r '.data.id')
# 2. Read the plan for free, then commit.
aiglot batches get "$id" --json | jq '.data.plan'
aiglot batches approve "$id" --quality lite \
--instructions "Keep every {placeholder} exactly as written."
# 3. When the status is completed, bring the file back.
aiglot batches download "$id" --output locales/fr.json
Con tu agente de IA: conecta AI Glot como servidor MCP. El agente puede leer tu repositorio, proponer los términos del glosario que encuentre, añadirlos a tu espacio de trabajo, ejecutar el trabajo y devolver los archivos a su sitio.
En la aplicación: sube el archivo, haz clic y descárgalo. Ideal para un trabajo puntual.
Si quieres integrar la API, consulta la documentación de la API.
Comprueba el resultado
Compila la aplicación en un idioma traducido y abre las tres pantallas con las cadenas más largas. Después, ejecuta el linter habitual o comprueba que no falte ninguna clave, porque una clave modificada aparecerá como una cadena ausente. El texto traducido suele ocupar más que el inglés, así que comprueba que los botones y las etiquetas no se desborden.
En Precios puedes consultar cuánto cuesta un volumen mayor. Además, una cuenta gratuita incluye créditos para procesar un archivo real.
Los límites indicados aquí eran los vigentes cuando se redactó este texto: 200 archivos y 20 MB por ZIP. El límite de DeepL procede de su propia documentación. Los nombres de archivo y el recuento de cadenas de los diagramas son ejemplos. En tu plan puedes consultar las cifras reales de tus archivos, y hacerlo es gratis.
