Skip to main content

¿Qué es la internacionalización?

Las funciones de internacionalización de Laravel ofrecen un mecanismo cómodo para obtener cadenas de traducción en varios idiomas. Se usan para dar soporte a múltiples idiomas dentro de la aplicación. Hay dos formas de gestionar las traducciones:
Por defecto una aplicación Laravel no incluye el directorio lang. Para personalizarlo, publícalo con el comando Artisan lang:publish.

Configuración del locale

Locale por defecto

Configura el idioma por defecto en config/app.php con locale. Habitualmente usa la variable APP_LOCALE de .env.
fallback_locale es el idioma alternativo cuando no existe traducción en el indicado.

Cambio de locale en tiempo de ejecución

Con setLocale() de la fachada App puedes cambiar el locale por solicitud.

Consultar el locale actual

Crear archivos de idioma

Archivos PHP

Crea archivos PHP en lang/{código_idioma}/. Devuelven un array clave-valor.
Para idiomas con diferencias regionales, sigue ISO 15897. Por ejemplo, para inglés británico usa en_GB, no en-gb.

JSON

Cuando hay muchas traducciones, se recomienda el formato JSON. Crea archivos con el código del idioma en el directorio lang/.
Define las traducciones usando como clave la cadena original (por ejemplo, en inglés).
Con JSON, la propia frase en inglés es la clave, así que la visualización por defecto en inglés funciona sola. En idiomas sin archivo, se muestra la clave (la cadena original).

Cuándo elegir uno u otro

  • Si quieres organizar por funcionalidad (mensajes de validación, etc.)
  • Cuando sobreescribes las traducciones integradas de Laravel (validation.php, auth.php, etc.)
  • Cuando necesitas una jerarquía de claves
  • Cuando hay muchos textos de UI y pensar claves resulta engorroso
  • Cuando prefieres escribir la plantilla en inglés y traducir el resto con archivos
  • Cuando añades i18n a una aplicación ya existente

Obtener cadenas de traducción

Helper __()

Es el método más habitual. En formato PHP se indica como “archivo.clave”.
Si no existe la traducción, se devuelve la propia clave.

Uso en plantillas Blade

En Blade usa {{ __() }}.
La directiva @lang está obsoleta. Actualmente se recomienda {{ __() }}.

Marcadores (placeholders)

Puedes incluir marcadores de la forma :nombre en las traducciones.
Pasa un array de sustituciones como segundo argumento de __().
Se usa igual en Blade.

Plurales

Las reglas de plural varían por idioma. Laravel permite separar singular y plural con |.

Plural básico

También puedes definirlo en JSON.
Obtén el texto con la cantidad usando trans_choice().

Plural por rangos

Puedes indicar rangos con detalle.

Placeholders con plurales

Con :count puedes mostrar la cantidad. El tercer argumento admite sustituciones adicionales.

Sobrescribir archivos de idioma de paquetes

Si un paquete de terceros trae sus propios archivos de idioma, puedes sobrescribirlos colocando el mismo archivo en lang/vendor/{paquete}/{código_idioma}/. Por ejemplo, para personalizar los mensajes en inglés del paquete skyrim/hearthfire:

Ejemplo práctico: middleware de conmutación de idiomas

Ejemplo de un middleware que ajusta el locale automáticamente según la URL, la sesión o las preferencias del usuario.
1

Crear el middleware

2

Implementar el middleware

3

Registrar el middleware

Regístralo en bootstrap/app.php.
4

Añadir la ruta para cambiar de idioma

5

Añadir botones de cambio en Blade

Estructura recomendada de archivos de traducción

Resumen

Última modificación el 13 de julio de 2026