Distribuir aplicaciones en diferentes idiomas es uno de los problemas más comunes en el desarrollo web. Es mucho más fácil usar una aplicación cuando está en nuestro idioma nativo que cuando no.
Los bilingües por favor no opinen 😋
Pero como ya es costumbre, nuestro buen laravel integra una característica para facilitarnos la internacionlización de nuestras aplicaciones.
Laravel Localization es una característica que nos permite mostrar aspectos básicos de nuestra aplicación --Como menús, headers, alertas etc.-- en diferentes idiomas usando archivos .php como “diccionarios de traducción”.
Estos archivos los puedes ubicar en la carpeta resources/lang. Al instalar laravel encontrarás que dentro de esta ruta ya existe la carpeta resources/lang/en la cuál contiene los mensajes predefinidos por laravel para el lenguaje inglés. Dentro de resources/lang podrás agregar tantos lenguajes como desees y/o tu aplicación requiera, siguiendo la estructura resources/lang/{nombre de la carpeta del lenguaje}/messages.php, laravel recomienda llamar a la carpeta del lenguaje acorde al estandar ISO 15897, ejemplo si necesitas mensajes para el español nuestra estructura deberá ser la siguiente: resources/lang/es/messages.php.
Con esto en mente podemos empezar con una pequeña demostración de lo fácil que será pasar nuestra aplicación de un idioma a otro. Empecemos…
Primero vamos a crear una aplicación laravel como habitualmente lo hacemos:
composer create-project--prefer-dist laravel/laravel i18n
Luego de que termine la creación del proyecto vamos a crear nuestro “diccionario” para traducir nuestra aplicación entre el inglés que por defecto está configurado y el español.
Si te sientes más comodo con el mandarin puedes usarlo sin problema…
mkdir resources/lang/es && touch resources/lang/es/messages.php
El archivo messages.php debera retornar un arreglo asociativo de esta forma:
resources/lang/es/messages.php
return [
'greeting' => 'Hola Mundo!'
];
Recuerda que lo que queremos es que nuestra aplicación maneje diferentes idiomas así que debemos replicar esto en todos los archivos messages.php que tengamos para la misma.
resources/lang/en/messages.php
return [
'greeting' => 'Hello world!'# Puedes dejar los que tiene laravel por defecto !
];
Las ventajas de hacer la internacionalización con archivos como diccionario es que evitamos los tipicos errores gramaticales de un traductor, además que no necesitamos sino una sola vista y la traducción se hará de forma dinámica ya lo veremos…
Dentro de nuestra vista default vamos a cambiar lo siguiente:
<divclass="content">
<divclass="title m-b-md">
{{ __('messages.greeting') }}
div>
<divclass="links">
<ahref="https://laravel.com/docs">Docsa>
<ahref="https://laracasts.com">Laracastsa>
<ahref="https://laravel-news.com">Newsa>
<ahref="https://blog.laravel.com">Bloga>
<ahref="https://nova.laravel.com">Novaa>
<ahref="https://forge.laravel.com">Forgea>
<ahref="https://vapor.laravel.com">Vapora>
<ahref="https://github.com/laravel/laravel">GitHuba>
div>
div>
Como te puedes dar cuenta estamos usando un helper de laravel al cual le pasamos el parametro ‘messages.greeting’, si, es el nombre del archivo y la clave de la palabara o frase que queremos usar.
Tambien podríamos usar la directiva de blade @lang('messages.greeting')
.
Listo ahora solo nos falta agregar la lógica necesaria para que nuestrá aplicación muestre el mensaje en un idioma según sea el caso…
En el archivo routes/web.php vamos a hacer lo siguiente:
Route::get('/{locale}', function($locale){
App::setLocale($locale);
return view('welcome');
});
Lo que estamos haciendo es indicarle a la ruta raíz que va a recibir un parametro que será el locale con el que va a funcionar, luego seteamos el valor de nuestra app y eso es todo. Si corremos nuestro servidor y nos dirigimos a las rutas 127.0.0.1/es
y 127.0.0.1/en
veremos como es que nuestra aplicación cambia de idioma…
Por supuesto Laravel localization es una característica mucho más potente. Aquí vimos los aspectos y configuración básicos.
Espero te guste y si quieres puedes dejar tus comentarios sobre que te parece esta característica de laravel.