Localizaciones y Traducciones en Laravel (español e ingles)
Índice de contenido
- 1. Qué es la localización en Laravel y por qué es importante
- 2. Configuración inicial de localización en Laravel
- 3. Creación de archivos de idioma (PHP y JSON) y cadenas de textos para la traducción
- 4. Mostrar traducciones en vistas y controladores
- 5. Cómo cambiar el idioma dinámicamente en tu app
- 6. Localización avanzada y buenas prácticas
- 7. Conclusión: experiencia y recomendaciones prácticas
- ❓Preguntas frecuentes
Con las funciones que ofrece Laravel de manera nativa para el manejo de la localización, es decir, el lugar donde está siendo consumida la aplicación y con esto, poder ofrecer otro servicio, como lo es el de la traducción de textos de manera automática en base a la localización o por selección del usuario. En este apartado, veremos implementar ambos temas.
Ya sabemos como manejar Excepciones personalizadas en Laravel.
La localización en Laravel es una de esas funciones que, una vez las dominas, te permiten llevar tus aplicaciones a otro nivel. En mi experiencia, no solo mejora la usabilidad, sino que también abre la puerta a nuevos mercados y usuarios. A lo largo de esta guía te contaré cómo configurar, crear y gestionar traducciones en Laravel, apoyándome en ejemplos reales y buenas prácticas.
1. Qué es la localización en Laravel y por qué es importante
La localización (L10n) es el proceso de adaptar tu aplicación a diferentes idiomas, monedas o formatos regionales. Laravel lo integra de forma nativa, facilitando tanto la traducción de textos como la detección automática del idioma del usuario.
En uno de mis primeros proyectos multi-idioma, descubrí que bastaba una configuración mínima para ofrecer la interfaz completa en inglés y español. Esta capacidad es especialmente útil si tu aplicación tiene usuarios internacionales o si planeas expandirte fuera de tu mercado inicial.
Diferencia clave:
- Internacionalización (i18n): preparar la app para manejar múltiples idiomas.
- Localización (L10n): adaptar los textos y configuraciones específicas a cada idioma.
2. Configuración inicial de localización en Laravel
Al crear un proyecto Laravel nuevo, notarás que la carpeta /lang no existe. En mis primeros intentos pensé que era un error, pero en realidad Laravel espera que la generes tú con un simple comando:
$ php artisan lang:publishEste comando crea la carpeta /lang y publica los archivos de idioma base que Laravel usa internamente.
El comando lang:publish creará el directorio lang en su aplicación y publicará el conjunto predeterminado de archivos de idioma utilizados por Laravel:
Dentro de config/app.php puedes definir el idioma por defecto modificando la línea:
'locale' => 'es',Si trabajas con múltiples idiomas, también es recomendable ajustar el fallback (idioma de respaldo):
'fallback_locale' => 'en',De esta forma, si falta una traducción en español, Laravel mostrará el texto en inglés.
3. Creación de archivos de idioma (PHP y JSON) y cadenas de textos para la traducción
Laravel proporciona dos formas de gestionar cadenas de traducción que son las empleadas para mostrar los textos traducidos de nuestra aplicación en diferentes idiomas; en ambos casos, debemos de crear una carpeta para almacenar los mismos:
/lang
En donde creamos nuestro archivos de traducción ya sean PHP:
/lang /en messages.php /es messages.php
O en JSONs:
/lang en.json es.json
Usaremos el formato de los archivos en PHP; puedes crear tantos como quieras y modularizar los mensajes según nuestras preferencias.
Finalmente, somos nosotros los que debemos de definir las cadenas traducidas y personalizar las mismas cambiando el texto predefinido por la aplicación y creando las propias; mediante la pareja de clave/valor, de indica la clave y la traducción; por ejemplo:
lang/en/messages.php
<?php
return [
'welcome' => 'Welcome to our application!',
];lang/es/messages.php
<?php
return [
'welcome' => 'Bienvenido a nuestra aplicación!',
];4. Mostrar traducciones en vistas y controladores
Una vez creadas las cadenas, puedes mostrarlas con la función __() o con la directiva @lang en Blade.
echo __('messages.welcome')Como puedes apreciar, debemos de colocar el nombre del archivo y la clave como clave para la función de __() la cual devuelve el texto traducido; este esquema, lo podemos emplear tanto en el controlador y similar como en la vista.
Errores comunes:
- Usar una clave incorrecta (Laravel devolverá la clave literal).
- No publicar la carpeta /lang.
- Olvidar limpiar la caché con php artisan config:clear después de cambiar archivos de idioma.
5. Cómo cambiar el idioma dinámicamente en tu app
Para cambiar el idioma durante la navegación, puedes hacerlo manualmente o mediante un middleware.
Generar middleware de localización
$ php artisan make:middleware LocalizationY en el método handle:
public function handle($request, Closure $next)
{
$locale = $request->get('lang', config('app.locale'));
app()->setLocale($locale);
return $next($request);
}Así, si el usuario visita /home?lang=es, la aplicación cambiará automáticamente al español.
En uno de mis proyectos, añadí un selector de idioma en la cabecera del sitio y guardé la preferencia en sesión para mantener la elección en cada visita:
session(['locale' => $locale]);
app()->setLocale(session('locale', 'es'));6. Localización avanzada y buenas prácticas
Cuando ya dominas la configuración básica, puedes avanzar hacia escenarios más complejos:
- Traducción de contenido dinámico (desde la base de datos): usando paquetes como Spatie Translatable.
- Rutas traducidas: con Laravel Localization.
- SEO multi-idioma: implementando etiquetas <link rel="alternate" hreflang="...">.
Además, Laravel permite pluralización y sustitución de variables en las cadenas:
'notifications' => '{0} No tienes notificaciones|{1} Tienes una notificación|[2,*] Tienes :count notificaciones',Con esta estructura, el framework elige automáticamente la traducción correcta según el número.
7. Conclusión: experiencia y recomendaciones prácticas
La localización es una herramienta que marca la diferencia entre una app funcional y una app preparada para escalar globalmente.
En mi experiencia, lo más importante es mantener una estructura clara en los archivos de idioma, usar nombres de claves coherentes y documentar las nuevas traducciones en equipo.
Si trabajas en equipo, un consejo adicional es usar una herramienta como Phrase o Linguise para sincronizar traducciones y evitar inconsistencias.
Y recuerda: aunque Laravel hace gran parte del trabajo por ti, la calidad de la localización depende de lo organizado que mantengas tus textos y tu flujo de trabajo.
❓Preguntas frecuentes
¿Qué diferencia hay entre JSON y PHP translations?
Los archivos PHP permiten agrupar textos por módulo, mientras que JSON guarda las cadenas directamente. PHP es más escalable.
¿Cómo detecto el idioma automáticamente?
Puedes usar Request::getPreferredLanguage() o crear un middleware que lea el idioma del navegador o de la URL.
¿Puedo traducir contenido dinámico?
Sí, con paquetes como Spatie Translatable puedes guardar versiones en varios idiomas en la base de datos.
¿Cómo cambio el idioma sin recargar la página?
Puedes usar AJAX o Livewire para actualizar el contenido según la selección del idioma del usuario.
El siguiente paso, es aprender el sistema de Autorización en Laravel con Gates y Policies.
Acepto recibir anuncios de interes sobre este Blog.
Veremos como podemos crear textos de traducción en Laravel para emplearlos según la localización detectada o configurada.