Laravel – Manejar varios idiomas

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.

Varios idiomas en aplicación de Laravel con PHP

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:

<?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.

Traducción a español

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.

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.

<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.

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.

<?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.

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.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *