Durante el desarrollo de proyectos en Laravel siempre me he preocupado de la parte multi-idioma, en concreto de que un traductor profesional no tiene por qué saber programación ni lo que son las arrays de traducción que existen en un proyecto. Cuando pienso eso, recuerdo a nuestro conocido WordPress y me pregunto… ¿Se podrá usar el sistema po y mo de forma fácil en Laravel como se hace en WordPress?
Después de investigar he creado una pequeña guía que puede ayudarte:
Usar el Package PO y MO con Laravel Gettext
Laravel Gettext es un package creado por el usuario Xinax (puedes acceder desde el siguiente link: https://github.com/xinax/laravel-gettext) Pese a que los pasos están claros, están en inglés, así que te lo detallo paso a paso desde aquí:
Instalación
Usando Composer:
Agrega este código en la parte de Require de tu composer.json
[code lang=»json» ]»xinax/laravel-gettext»: «4.x»[/code]
*Esté código funciona con Laravel 5.3, pero en la web de origen tienen paquetes para versiones anteriores, inclusive para Laravel 4
Luego en tu consola apuntando a la carpeta del proyecto ejecuta:
[code lang=»Bash»]composer update[/code]
Configuración
Dirígete al archivo de configuración: app/config/app.php y agrega esta línea en la parte de providers:
[code lang=»php»]
‘providers’ = [
// …
XinaxLaravelGettext/LaravelGettextServiceProvider::class,
// …
]
[/code]
En tu consola nuevamente ejecuta esto:
[code lang=»bash»] php artisan vendor:publish[/code]
Creará un archivo de configuración para el PO y MO, este se encuentra en /app/config/laravel-gettext.php
Puedes entrar y configurar; como nuestro idioma base será el español debes cambiar el EN_us por ES_es y agregar dentro del array de idiomas soportados también el español.
[code lang=»php»]
/**
* Default locale: this will be the default for your application.
* Is to be supposed that all strings are written in this language.
*/
‘locale’ => ‘es_ES’,
/**
* Supported locales: An array containing all allowed languages
*/
‘supported-locales’ => [
‘es_ES’,
‘en_US’
],
[/code]
Si queremos hacer un cambio de idioma cuando se haga un login podemos usar el middleware agregando esta línea en nuestro Kernel ubicado en app/Http/Kernel.php
[code lang =»php»]
protected $middlewareGroups= [ ‘web’=> [
// …
XinaxLaravelGettextMiddleware/GettextMiddleware::class,
],
// …
]
[/code]
Uso
Aquí algunos ejemplos de como usar esta maravillosa herramienta:
[code lang=»php»]
// ejemplos sin parámetros
echo ‘Cadena sin traducir’;
echo __(‘Cadena para traducir’);
// con parámetros
$str=’parámetros’;
$n=2;
echo __(‘Texto traducido con %s’, $str);
echo __(‘Texto traducido con %s’, [$n, $str]);
[/code]
Cómo podemos usarlo con Blade
[code lang=»php»]
{{ __(‘Texto traducido’) }}
[/code]
Úsalo para traducir todo tu proyecto. Luego para poder editar los po y mo debemos hacer lo siguiente:
Vamos a actualizar los archivos po y mo recogiendo todos los textos que has usado la función __(») y creando un archivo message.po para cada idioma que has configurado previamente.
[code lang=»bash»] php artisan gettext:update [/code]
Usar POEditor
Puedes descargarlo aquí:
Luego ve al lenguaje que necesitas traducir y abre el archivo .po, éste se encuentra en /resources/lang/i18n/ , a continuación presiona el botón Actualizar del programa PO editor. Esto generará un nuevo archivo po con las traducciones existentes.

Con estos pasos tendrás tu Laravel traducido a varios idiomas y sin dolores de cabeza para los traductores. Ya no tendrán que tocar archivos engorrosos php. Así todos contentos 🙂