Traducciones en Laravel 5.5 [SOLUCIONADO]

Gestión de la localización en aplicaciones Laravel 5.5

Uno de los desafíos habituales cuando se desarrolla software es asegurarse de que la aplicación esté preparada para distintos idiomas y regiones. En este escenario, Laravel 5.5 proporciona una serie de herramientas eficientes para implementar sistemas de localización. El manejo de traducciones es simplificado gracias a su sistema de archivos de lenguaje y funciones auxiliares.

Configuración inicial para la localización

Para comenzar, Laravel establece un idioma predeterminado dentro del archivo config/app.php bajo la clave ‘locale’. Esta configuración representa el idioma por defecto que se utilizará en la aplicación.

'locale' => 'en',

La carpeta resources/lang es donde Laravel guarda los archivos de traducción. Dentro de esta, encontrará un directorio para cada idioma soportado por la aplicación, por ejemplo, ‘es’ para español, ‘en’ para inglés, entre otros.

/resources
  /lang
    /en
    /es

Creación de archivos de traducción

Los archivos de traducción son simples archivos PHP que retornan un array de cadenas traducidas. Cada archivo representa un grupo de traducciones.

<?php 
// resources/lang/es/messages.php
return [
    'welcome' => 'Bienvenido a nuestra aplicación',
];

Utilización de traducciones en plantillas

Para hacer uso de estas traducciones en las vistas de Blade, Laravel ofrece la función __() y la directiva @lang. Estas herramientas buscan y devuelven la cadena indicada del archivo de traducción correspondiente.

<!-- Utilizando la función __() -->
<p><?= __('messages.welcome'); ?></p>
<!-- Utilizando la directiva @lang -->
<p>@lang('messages.welcome')</p>

Soporte para pluralización

Laravel también provee soporte para la pluralización de traducciones a través de la función trans_choice(), la cual selecciona una frase en función de un número.

<?php 
// resources/lang/es/messages.php
return [
    'apples' => 'Hay una manzana|Hay muchas manzanas',
];

<!-- Uso de trans_choice() en Blade -->
<p><?= trans_choice('messages.apples', 1); ?></p> 
<p><?= trans_choice('messages.apples', 10); ?></p> 

Localización basada en información de navegación

Para ajustar el idioma de forma dinámica en Laravel basándose en la información de la solicitud, como puede ser el navegador del cliente, podemos usar la clase Locale junto con algún middleware que ajuste el idioma de la aplicación.

use IlluminateSupportFacadesApp;
use IlluminateSupportFacadesRequest;

App::setLocale(Request::getPreferredLanguage(['en', 'es', 'fr']));

Definición de middleware para cambio de idioma

La creación de un middleware que maneje la localización puede ser hecha mediante el comando de Artisan “make:middleware”. Después, solo necesitaría ajustar el idioma deseado basado en alguna lógica específica dentro del método handle de su middleware.

<?php
namespace AppHttpMiddleware;
use Closure;
use IlluminateSupportFacadesApp;
use IlluminateSupportFacadesSession;

class Language
{
    public function handle($request, Closure $next)
    {
        if (Session::has('applocale')) {
            $locale = Session::get('applocale');
        } else {
            $locale = config('app.locale'); // Idioma predeterminado
        }
        App::setLocale($locale);
        
        return $next($request);
    }
}

Cambio de idioma por elección del usuario

Para permitir el cambio de idioma según la elección del usuario, es posible generar rutas que establezcan la preferencia de idioma en una sesión y luego aplicar dicha configuridad a través del middleware previamente creado.

Route::get('language/{lang}', function ($lang) {
    Session::put('applocale', $lang);
    return back();
});

Persistencia del idioma para usuarios

En aplicaciones con funcionalidades más avanzadas, como la gestión de usuarios, puede ser beneficioso almacenar la preferencia de idioma del usuario en la base de datos. Posteriormente, este valor puede ser recuperado y aplicado en cada petición del usuario.

<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
use AppModelsUser;
use IlluminateSupportFacadesAuth;
use IlluminateSupportFacadesApp;

class UserController extends Controller
{
    public function updateLanguage(Request $request)
    {
        $user = Auth::user();
        $user->language = $request->input('language');
        $user->save();
        App::setLocale($user->language);
        
        return back();
    }
}

Uso de paquetes de terceros para localización

Para un manejo más avanzado y dinámico de traducciones, también se puede optar por usar paquetes de terceros. Paquetes como Laravel Localization permiten una gestión detallada y automática de rutas multiidioma, traducciones en base de datos, y otras funcionalidades útiles para proyectos complejos.

Tips y recomendaciones

  • Organizar adecuadamente los archivos de idioma por categorías facilita la búsqueda de traducciones específicas.
  • Nombre las claves de traducción de manera que sea autoexplicativas y mantenga un esquema consistente.
  • Utilice la pluralización y parámetros dinámicos en sus traducciones para manejar textos más complejos.
  • Implemente pruebas unitarias para verificar que todas las traducciones existen en todos los idiomas soportados por la aplicación.
  • Considere las diferencias culturales no solo en textos, sino también en el formato de fechas, monedas y otras configuraciones regionales.

Implementar un sistema de localización eficiente en Laravel 5.5 es clave para la creación de aplicaciones accesibles y amigables para un público global. Siguiendo las prácticas adecuadas y aprovechando las múltiples herramientas que Laravel ofrece, es posible entregar una experiencia de usuario que se sienta personalizada y respete las particularidades de su idioma y cultura.

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad