En este post te mostraré cómo puedes mostrar tus sitios, aplicaciones o sistemas en Laravel en distintos idiomas usando lo que ya ofrece el propio Framework. Es decir, mostrar tu aplicación web de Laravel en inglés y español, por ejemplo.
Te voy a mostrar un ejemplo simple.
Ubicación de los archivos de traducción
Laravel propone una estructura de directorios muy eficiente. Hay que colocar un directorio cuyo nombre sea la clave del idioma dentro de resources/lang
.
Si por ejemplo quisieras agregar el idioma español, crearías un directorio llamado es
.
Ahora, dentro de cada directorio puedes tener varios archivos que a su vez deben tener un arreglo dentro, con las traducciones. En el ejemplo se apreciará de mejor manera.
Definiendo un archivo de mensajes en inglés
Vamos a suponer que el idioma por defecto será inglés. Dentro de resources/lang/en
he creado un archivo llamado messages.php
cuyo contenido es:
Cuando el idioma sea inglés, estos mensajes serán mostrados. Fíjate en que es un arreglo en donde se coloca la clave (cómo invocamos al mensaje) y el valor, que será el mensaje mostrado al usuario.
Traducción a español
Ahora, dentro del directorio resources/lang/es
, agregué el mismo archivo pero traducido. Queda así:
Fíjate en que las claves del arreglo siguen siendo las mismas, solo cambia el valor que ya es la traducción al español.
Mostrando mensajes traducidos
Dentro de nuestras vistas o plantillas podemos mostrar el mensaje que automáticamente será traducido dependiendo del idioma seleccionado. Para ello recomiendo usar la función __
(sí, dos guiones bajos) que recibe la clave del mensaje que se quiere mostrar.
Nota: en este caso, mi archivo de traducciones se llama messages.php
(por eso accedo a messages
) y después al nombre de la clave.
Si, por ejemplo, mi archivo se llamara titulos.php
entonces accedería con __("titulos.categories")
Esto también funciona dentro de los controladores. Por ejemplo:
En este caso voy a redireccionar con un mensaje de las traducciones. No confundir la clave “message” del método with
que tiene que ver con establecer un mensaje dentro de la sesión para mostrarlo después.
Básicamente __
devuelve un string traducido que puedes o enviar o mostrar en blade.
Cambiando idioma de la aplicación
Para cambiar el idioma de la app de Laravel podemos hacer varias cosas. La primera de ella es ir a config/app.php
, buscar la línea que indica locale
y cambiarla al idioma preferido.
Otra opción es cambiar el idioma de la aplicación en Laravel en tiempo de ejecución. Para ello podemos invocar a App::setLocale()
pasándole la clave del idioma. Por ejemplo, dentro de web.php
(en las rutas) podríamos hacer lo siguiente:
Esto del cambio ya queda a tu criterio. Puedes hacerlo con una acción del usuario, detectarlo automáticamente, tomarlo de la base de datos, etcétera.
Conclusión
Lo que te he mostrado es apenas una sencilla introducción, si quieres profundizar, te recomiendo visitar la documentación de Laravel.
A partir de esto puedes crear tus aplicaciones y mostrar los mensajes traducidos para que, si es necesario agregar otro idioma más tarde, solo agregues las traducciones y no tengas que cambiar toda tu aplicación de Laravel.
En mi blog tengo más contenido sobre Laravel.