Icono del sitio Carlos Herrera

Usar PoEdit (po y mo) en Laravel

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 🙂

Salir de la versión móvil