Cómo localizar aplicaciones en Laravel para conseguir su traducción al español y otros idiomas, a través del repositorio Laravel Lang. Cómo ampliar las traducciones de las palabras personalizadas una vez tu aplicación va creciendo.
En este artículo te vamos a explicar cómo puedes localizar al español, o a cualquier otro idioma, un sitio web realizado con Laravel. Para ello vamos a instalar el paquete de idiomas que necesites y decirle a Laravel que lo use de manera predeterminada cuando se solicite una página del proyecto.
Además, aprenderás diversas técnicas para la localización de textos en Laravel, de modo que puedas hacer páginas multi-idioma, aprovechando las funcionalidades que ya te ofrece el framework.
La siguiente guía te ofrece un "paso a paso" para instalar los archivos para localizar al español un proyecto Laravel. Sin embargo, los mismos pasos los puedes aplicar para traducciones a cualquier otro idioma.
Repositorio de localización de Laravel
Existe un repositorio llamado Laravel-Lang/lang en GitHub.
En este repositorio encontramos las localizaciones a muchos idiomas, incluido por supuesto el español. En concreto nos ofrecerán en este repo todas las traducciones de los textos que ya están presentes en una instalación básica de Laravel, así como los textos de toda la parte de login y autorización de usuarios que podemos instalar en los starter kits oficiales, como Breeze, Fortify, Sanctum, etc.
Actualización: Instalación de paquetes de idioma ha cambiado
En este artículo hemos explicado la instalación de paquetes de idioma de laravel-lang, que nos permite traducir fácilmente las aplicaciones Laravel a otros idiomas. Sin embargo, algunas cosas han cambiado y las vamos a explicar antes que nada, para que no cause confusiones.
Muchos de los conceptos explicados en el resto del artículo, sobre la localización de las carpetas de idiomas y la configuración de Laravel para que use el idioma predeterminado, siguen siendo iguales, por lo que el artículo en general seguirá siendo importante que lo leas, en muchos puntos
La diferencia principal sobre lo que hemos explicado en el resto del artículo y que ahora estamos actualizando es que antes en el repositorio de las localizaciones de Laravel a los distintos idiomas estaban los archivos con las traducciones directamente producidos. Ahora no. En él encontramos los archivos php que sirven para generar los archivos de idioma, por lo que para producirlos vamos a tener que usar una herramienta extra que ellos llaman "Translation Managers".
Instalación del paquete de idiomas Laravel-lang
Comenzamos instalando vía composer los paquetes de idiomas, el repositorio completo de laravel-lang.
composer require laravel-lang/lang --dev
Como ves, la instalación se hace solo en "modo desarrollo" con --dev
. Estos archivos realmente no hacen falta en producción, solo los archivos que generaremos con el "Translation Manager".
Instalación del publisher, el translation manager
Hay varios translation managers disponibles. Este que vamos a instalar es el "oficial" de "laravel-lang". Este software se encarga de producir los archivos de las traducciones y colocarlos en la carpeta adecuada.
composer require laravel-lang/publisher laravel-lang/lang --dev
También se instala en modo desarrollo, como puedes ver con el flag --dev
.
Instalar el service provider del publisher
Ahora necesitamos un service provider del publisher, que es el que nos va a crear en nuestra aplicación los comandos necesarios para producir los archivos de las traducciones y colocar esos archivos en las carpetas "lang".
php artisan vendor:publish --provider="LaravelLang\Publisher\ServiceProvider"
Lo bueno de los publisher es que automatizan el proceso de copiado de las carpetas de idioma, con lo que podremos crear una o varias carpetas de idioma directamente con comandos de artisan.
Instalación de los archivos del idioma español
Con el siguiente comando vamos a ver cómo se instalan los archivos de idioma español.
php artisan lang:add es
Para cualquier otro idioma, es simplemente cambiar el "es" por el código del idioma que necesites. Por ejemplo, alemán sería "de".
Ahora te dejamos con el resto del artículo que te explicará cosas importantes como la estructura de carpetas de los idiomas y la configuración de la aplicación para indicarle el paquete de localización que debe de usar.
Instalación de los archivos para localización al español de Laravel
Para instalar los archivos que permiten traducir una página al español, o cualquier otro idioma, tenemos dos posibilidades.
Opción 1.- Descarga el repositorio y copiado de los archivos
Puedes simplemente hace la descarga del repositorio de GitHub en tu ordenador, ya sea vía clonado del repo o bien mediante la descarga directa.
Una vez descargado puedes acceder a los archivos de las traducciones de los idiomas que necesites, desde la carpeta correspondiente al idioma que requieras. Por ejemplo, los archivos de la localización al español están en la ruta:
https://github.com/Laravel-Lang/lang/tree/main/locales/es
Si has descargado el zip de GitHub esa ruta corresponderá con la carpeta siguiente:
locales/es
Los archivos de la traducción al español, es decir, toda la carpeta completa llamada "es", la tienes que pegar en la carpeta de tu aplicación donde se guardan los archivos de localización que tienes en la ruta "lang", que cuelga directamente de la raíz del proyecto.
Es decir, una vez copiados los archivos tendrás una nueva carpeta llamada:
lang/es
Una vez copiados los archivos, lang/es
vez tendrá dentro todos los archivos que descargaste de la carpeta "locales/es" del repositorio indicado. Al final, tendrás una estructura de directorios más o menos como esta imagen:
Importante: sigue leyendo, porque la ruta final del archivo de localizaciones es.json
la tendremos que mover a una carpeta distinta a la que aparece en la imagen anterior. Enseguida te explicamos por qué.
Opción 2.- Hacer un require del repositorio con Composer
Alternativamente puedes descargar este repositorio directamente con Composer.
composer require laravel-lang/lang --dev
Una vez instalado tienes los archivos de traducción en la carpeta vendor/laravel-lang/lang/locales
. Por tanto, para las traducciones al español tendremos que copiar la carpeta
vendor/laravel-lang/lang/locales/es
El destino de la carpeta copiada será el que hemos explicado antes, dentro de lang/es
, o la carpeta que corresponda según el idioma de localización que hayamos instalado.
Cambiar la configuración de la aplicación para definir el idioma
Una vez hemos instalado los archivos de la localización, para que la aplicación se traduzca tenemos además que hacer un cambio en la configuración de la aplicación.
Para ello editamos el archivo config/app.php
y buscamos la declaración "locale
", en la que ponemos el código de la localización deseada.
Tendremos que cambiar:
'locale' => 'en',
Por la correspondiente localización instalada. Para español sería:
'locale' => 'es',
Además, existe otra configuración que nos permite indicar cuál será la localización de la cadena, si es que no existe una correspondencia con aquello que se intenta traducir.
'fallback_locale' => 'en',
Aproximaciones para ampliar y personalizar la localización de Laravel
Obviamente, además de los textos básicos de una aplicación Laravel recién instalada, cuando estés realizando una página multi-idioma irás introduciendo nuevos textos que también tendrás que localizar. Llegado ese punto existen dos aproximaciones posibles para definir las cadenas localizadas en aplicaciones Laravel, que podemos usar de la manera que se adapte mejor a nuestras necesidades.
Archivo de palabras en formato JSON
La más sencilla sería usando un archivo de palabras sueltas en formato JSON. Este archivo de palabras contiene todas las cadenas que se deberían traducir y se coloca en la raíz de la carpeta "lang".
El nombre del archivo json será compuesto por la cadena de la localización, algo como "es", con extensión "json". Por ejemplo, para español tendremos el archivo es.json
.
En los archivos que habíamos copiado anteriormente, veremos que en la carpeta "es" había un archivo llamado "es.json
". Ese archivo contiene todas las cadenas de las traducciones, pero tendremos que moverlo a la carpeta "lang". Por tanto, los archivos de las localizaciones en la carpeta "lang" nos quedarán finalmente como vemos en esta imagen:
En ese archivo están todas las cadenas sueltas que se deben traducir, en pares clave/valor. La clave es la cadena a localizar y el valor es la cadena localizada. Por ejemplo, cada vez que veamos en la aplicación un código como este:
__('Email')
Se buscará en el archivo JSON una clave llamada "Email" y se presentará en la vista su correspondiente valor.
{
//…
"Email": "Correo electrónico",
//…
}
Si no se encuentra una correspondencia de esa clave, se buscará entonces en un archivo en la carpeta lang/es, tal como vamos a explicar a continuación. Si tampoco se encuentra nada allí, entonces se mostrará el mismo mensaje enviado al helper.
Localizaciones en archivos sueltos
Adicionalmente, podríamos tener las localizaciones en archivos sueltos en la carpeta lang/es o similares. Pero no es tan práctico porque si hay muchas cadenas a localizar tendríamos que manejar muchos archivos.
Por ejemplo, podríamos tener un archivo lang/es/email.php con el contenido "Correo electrónico" escrito tal cual. Entonces se usaría si esa cadena no está en el JSON que hemos mencionado anteriormente.
Mensajes de aplicación
A menudo, los mensajes que la aplicación envía por diversos motivos se encuentran también en archivos sueltos de la localización bajo la carpeta correspondiente.
Por ejemplo, los intentos de login fallidos se envían desde el controlador localizados con cadenas que están en un archivo llamado lang/es/auth.php.
En ese archivo tenemos un array asociativo, también clave/valor, donde las claves corresponden con el mensaje que se debe enviar.
Por ejemplo, si vemos un código como este:
__('auth.password')
Se mostrará el mensaje que hay en el archivo lang/es/auth.php
con la clave "password
".
También hay un helper para localización llamado trans()
. Funciona de manera similar al helper __()
. Por ejemplo, si encontramos este código:
trans('pagination.next')
Buscará la traducción en el archivo lang/es/pagination.php
que hay en el array con la clave "next
".
Archivo validation.php para los mensajes de validación de Laravel
Hay otro archivo relevante para las validaciones, que mantiene todos los mensajes de validación. Ese archivo lo puedes usar para traducir los mensajes de validación de Laravel, pero también para traducir los nombres de los campos validados.
Por ejemplo, al construir un formulario si estamos validando un campo input llamado "name" no queremos que nos diga algo como "el campo name es requerido". Entonces tienes que suministrar en validation.php
todas las cadenas de nombres de campos que estés usando en una clave llamada "attributes
".
Esto lo tienes explicado con ejemplos y mayor detalle en la FAQ: ¿Cómo traducir los nombres de los campos (input name) en las validaciones Laravel?
Conclusión
En principio esto es todo lo que necesitas saber para mantener las traducciones de tus aplicaciones Laravel y localizar los textos al español, u otros idiomas. Afortunadamente, no necesitas hacer tú mismo los archivos de localización, ya que están disponibles en el repositorio que hemos compartido. Se trata simplemente de copiarlos en la carpeta "lang
".
En adelante, a medida que vayas desarrollando tu aplicación, tendrás que ampliar los textos de los archivos de localización, con las técnicas y alternativas que hemos explicado.
Hemos visto cómo localizar tu página Laravel a un idioma en concreto, pero por supuesto, puedes configurar diversas localizaciones para construir también páginas multiidioma en Laravel, pero eso ya sería materia para estudio en otro artículo.
Miguel Angel Alvarez
Fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Com...