El desarrollo de un sitio web multi idioma en Laravel se puede llevar a cabo de diferentes formas, todo depende de las necesidades del proyecto que tengamos que llevar a cabo.
Muchas veces sólo necesitamos llevar a cabo la parte multi idioma en lo que a la interfaz se refiere, es decir, contenido estático, esta sin duda es la forma más sencilla de desarrollar un sitio web multi idioma en Laravel.
En otras ocasiones, necesitamos traducir también el contenido de la base de datos, aquí se complica la cosa, ya que para ello deberemos tener nuestra base de datos bien configurada para que soporte multi idioma para todos los modelos que así lo requieran sin tener que reinventar la rueda y evitando escribir código difícil de mantener.
Los casos más complejos, además de tener la necesidad de traducir el contenido de la base de datos, también necesita que las imágenes que gestionan las entradas de la base de datos, en caso de que existan, estén disponibles en diferentes idiomas, algo nada sencillo de desarrollar si no se tiene experiencia en este tipo de desarrollos.
Configurar sitio web multi idioma en Laravel
Antes de empezar a desarrollar nuestro sitio web multi idioma en Laravel es necesario realizar algunas configuraciones importantes, sea cual sea el caso.
Ajustar el idioma por defecto de nuestro sitio web
Lo primero que debemos hacer es abrir el archivo config/app.php para ajustar las siguientes claves con el idioma que deseemos utilizar por defecto:
Con eso lo que estamos haciendo es decirle a Laravel que nuestro idioma por defecto será español, de esta forma, los archivos de traducción que Laravel irá a buscar serán los del idioma establecido.
Definir los idiomas disponibles
Este es más un tema personal que un requisito. A mi me gusta crear un archivo de configuración que contenga los idiomas que hay disponibles en el proyecto. Esto es útil para pintar un campo de selección con los idiomas disponibles y para asegurarnos que la petición para cambiar el idioma de la aplicación contiene un idioma válido.
Vamos a crear un archivo config/languages.php con el siguiente código:
Funciones Helper
A continuación te adjunto un archivo de funciones Helper que son muy útiles para obtener y establecer el idioma de nuestro sitio web multi idioma en Laravel.
Tenemos 3 funciones Helper que hacen lo siguiente:
getCurrentStringLanguage: Obtiene el texto del idioma seleccionado utilizando la configuración establecida (Español, Inglés o Francés).
setLanguageSession: Guarda el idioma seleccionado en sesión. Fíjate que revisamos que el idioma exista en nuestro archivo de configuración.
setCurrentLanguage: Define el idioma de nuestra aplicación, será llamado desde un middleware en cada request.
Middleware para definir el idioma utilizado
Ahora vamos a desarrollar un Middleware que pueda establecer el idioma de nuestra aplicación en cada petición:
Fíjate que nuestro Middleware simplemente está llamando a la función setCurrentLanguage, no necesitamos más.
Registrar el Middleware en el Kernel Http
Ahora vamos a abrir el archivo app/Http/Kernel.php y vamos a añadir nuestro Middleware Language al grupo web:
Con esto hacemos que nuestro Middleware Language sea ejecutado en cada petición a nuestro grupo de rutas web.
Ruta y Controlador para definir el idioma
Teniéndolo todo configurado, nos queda por añadir la lógica necesaria para que visitando una url de nuestro sitio el idioma quede establecido, y aunque la página se refresque, el idioma se mantenga. Esto ya lo hemos conseguido con nuestras funciones Helper, ahora nos queda ver cómo aplicar esto a través de rutas y controladores.
Cada vez que el usuario realice una petición GET a /set_language/{language} con un idioma válido, el idioma de nuestra aplicación será actualizado y guardado en sesión, no necesitamos nada más.
Sitio web multi idioma estático en Laravel
Cuando hablamos de contenido estático en un sitio web multi idioma nos referimos a lo siguiente:
Errores de validación.
Textos visibles en la interfaz que no afecte a la base de datos, menús, etiquetas formularios etcétera.
Mensajes flash.
Contenido de los correos electrónicos en la mayoría de los casos.
Laravel Lang es una dependencia que se instala con Composer y nos ofrece traducciones para las siguientes herramientas de Laravel:
Instalando Laravel Lang tendremos traducidos muchos de los contenidos estáticos de nuestro sitio, ahora nos quedaría traducir lo que nosotros debamos desarrollar, para ello yo recomiendo utilizar archivos .json por cada idioma dentro del directorio lang.
es.json
en.json
it.json
pt.json
fr.json
Donde un hipotético archivo es.json podría ser como sigue:
Y para utilizar estas traducciones en nuestros archivo Blade podríamos hacer lo siguiente:
Un consejo, cuando trabajes con traducciones en archivos json no traduzcas el idioma principal, ya que el string utilizado con la función __() es el string que verá el usuario final, así que únicamente deberemos traducir los idiomas que no sean el utilizado en la aplicación.
Con esto ya tendríamos configurado de forma completa un sitio web multi idioma estático en Laravel.
Sitio web multi idioma dinámico en Laravel
Cuando hablamos de sitios web dinámicos nos referimos a contenido dinámico, normalmente datos proporcionados por nuestra base de datos.
Cubrir este tema en un tutorial es poco viable ya que es un tema complejo y muy extenso, pero tenemos un curso completo de aplicaciones multi idioma en Laravel donde explicamos todo el proceso paso a paso y desde cero.
Ir al curso de aplicaciones multi idioma en Laravel.
Curso Laravel 12
Completo 2026
El único curso 100% actualizado que incluye Laravel 12, Livewire 3, Vue 3, React 19 e Inertia 2. Aprende con proyectos reales y las últimas funcionalidades.
star Incluido en cualquier suscripción