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.
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.
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:
<?php
return [
"add_category" => "Add category",
"categories" => "Categories",
"name" => "Name",
"description" => "Description",
"category_created" => "Category created",
"save" => "Save",
"go_back" => "Go back",
"edit" => "Edit",
"delete" => "Delete",
"edit_category" => "Edit category",
"confirm_action" => "Please confirm",
"category_updated" => "Category updated",
"category_deleted" => "Category deleted",
"products" => "Products",
"add_product" => "Add product",
"price" => "Price",
"stock" => "Stock",
"category" => "Category",
"product_created" => "Product created",
];
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.
Ahora, dentro del directorio resources/lang/es
, agregué el mismo archivo pero traducido. Queda así:
<?php
return [
"add_category" => "Agregar categoría",
"categories" => "Categorías",
"name" => "Nombre",
"description" => "Descripción",
"category_created" => "Categoría creada",
"save" => "Guardar",
"go_back" => "Volver",
"edit" => "Editar",
"delete" => "Eliminar",
"edit_category" => "Editar categoría",
"confirm_action" => "Por favor, confirme",
"category_updated" => "Categoría actualizada",
"category_deleted" => "Categoría eliminada",
];
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.
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.
<h1>{{__("messages.categories")}}</h1>
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:
<?php
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/public function store(Request $request)
{
(new Product($request->input()))->saveOrFail();
return redirect()->route("products.index")->with("message", __("messages.product_created"));
}
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.
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.
<?php
/*
|--------------------------------------------------------------------------
| Application Locale Configuration
|--------------------------------------------------------------------------
|
| The application locale determines the default locale that will be used
| by the translation service provider. You are free to set this value
| to any of the locales which will be supported by the application.
|
*/
'locale' => 'en'
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:
<?php
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Route;
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/// Cambiar idioma. En este caso "en":
App::setLocale("en");
// Y luego, todas nuestras rutas...
Route::get("/", function () {
return redirect()->route("categories.index");
});
Route::resource("categories", "CategoriesController");
Route::resource("products", "ProductController");
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.
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.
El día de hoy te mostraré cómo crear un servidor HTTP (servidor web) en Android…
En este post te voy a enseñar a designar una carpeta para imprimir todos los…
En este artículo te voy a enseñar la guía para imprimir en una impresora térmica…
Hoy te voy a mostrar un ejemplo de programación para agregar un módulo de tasa…
Los usuarios del plugin para impresoras térmicas pueden contratar licencias, y en ocasiones me han…
Hoy voy a enseñarte cómo imprimir el € en una impresora térmica. Vamos a ver…
Esta web usa cookies.