Todos los ejemplos de abajo son repositorios reales con .lingo/config.json ya versionado y las traducciones ya preparadas, para que puedas leer la configuración junto al resultado que genera. La mayoría son aplicaciones que se pueden ejecutar; un par están ahí para mostrar un formato de archivo por sí mismo. Clona o haz fork de uno, ejecuta lingo link para vincular tu propio motor y haz push.
Elige primero un enfoque#
Hay dos formas de localizar con la CLI, y eso determina qué ejemplos te convienen.
Traduce los archivos que ya tienes. Tu framework guarda las traducciones en su propio formato — Rails YAML, Android XML, Laravel PHP, ARB, Markdown — y la CLI traduce esos archivos in situ. No cambia nada en tu código. Nueve de los once ejemplos de abajo funcionan así.
Escribe sin claves. Envuelves las cadenas en l.text(...) justo donde aparecen, lingo extract te genera un catálogo con claves hash y te olvidas de nombrar y mantener claves de traducción. A cambio, necesitas un paso de compilación y un paquete en tiempo de ejecución; eso es lo que muestran los dos ejemplos de aplicaciones web.
Aplicaciones móviles#
| Ejemplo | Formato | Por qué elegirlo |
|---|---|---|
| iOS | xcode-xcstrings | Un String Catalog reúne todos los idiomas, así que la ruta de destino es la misma que la de origen. |
| Android | android | values/ sin más como origen, y los propios calificadores de Android (values-pt-rBR/) |
| Flutter | flutter | Se conservan los metadatos de @ y los placeholders de ICU; @@locale se reescribe en cada archivo |
Aplicaciones web#
Los dos ejemplos sin claves. Ambos envuelven las cadenas con l.text(...) y generan su catálogo con lingo extract, así que la columna central muestra el paquete de runtime en lugar de un formato de archivo.
| Ejemplo | Paquete | Por qué elegirlo |
|---|---|---|
| React + Vite | @lingo.dev/react | Authoring sin claves; las declaraciones generadas limitan l.text() a las cadenas extraídas |
| Next.js | @lingo.dev/react-next | Creación sin claves con enrutado por idioma, hreflang y un selector: Pages Router |
hreflang en producción
LingoHead construye sus URL de hreflang a partir de una prop baseUrl cuyo valor por defecto es una cadena vacía, así que, tal cual viene, las etiquetas son relativas. Los motores de búsqueda esperan URL absolutas: pásale el origen de tu sitio (<LingoHead baseUrl="https://example.com" />) antes de confiar en ellas.
Contenido y especificaciones#
| Ejemplo | Formato | Por qué elegirlo |
|---|---|---|
| Documentación en Markdown | md, mdx | Prosa por defecto, con campos de frontmatter y props de MDX activados de forma opcional |
| Markdoc | markdoc, json | Contenido de Next.js y textos de la interfaz en un solo push: tres entradas, cada una con opciones distintas. |
| OpenAPI | yaml-openapi | Solo resúmenes y descripciones; rutas, IDs de operación y enums intactos |
Catálogos de frameworks#
| Ejemplo | Formato | Por qué elegirlo |
|---|---|---|
| Rails | yaml-root-key | El idioma es la clave raíz del YAML, así que se reescribe la propia clave raíz |
| Laravel | php, po | Catálogos de Laravel más un archivo gettext; los placeholders :name se conservan en ambos |
| Módulos de TypeScript | typescript | Catálogos como módulos de TypeScript en lugar de JSON. Solo el formato: no los consume ninguna aplicación. |
Los catálogos de TypeScript necesitan un default export
El formato typescript lee una exportación default: export default { … }, con o sin as const. Una exportación con nombre no genera contenido traducible y la ejecución termina con el código fuente copiado literalmente. Así que, si un push indica archivos localizados pero prácticamente cero tokens de salida, revisa primero la forma de la exportación.
Cómo usar uno de estos ejemplos#
npm install -g @lingo.dev/cli
lingo login
lingo link # writes your own orgId and engineId into .lingo/config.json
lingo push --waitNinguno de los ejemplos confirma orgId ni engineId; así se evita que una bifurcación haga push a través del motor de otra persona. lingo link rellena ambos localmente.
Si prefieres la GitHub App a la CLI
La GitHub App lee engineId del .lingo/config.json confirmado en tu repositorio: resuelve la organización a partir de la propia instalación de la App, pero el motor tiene que estar en el archivo. Después de hacer un fork, ejecuta lingo link y confirma la configuración actualizada antes de instalar la App.
No todos los formatos tienen ejemplo#
Estos once cubren los frameworks por los que más suele preguntar la gente, pero el CLI traduce dieciocho formatos. xliff, srt, Xcode .strings y .stringsdict, yaml genérico y JSON/JSONC independiente funcionan todos sin necesidad de tener aquí un repositorio; consulta Formats para ver la lista completa y la configuración que necesita cada uno.
