Comunidad de diseño web y desarrollo en internet

Crear sitio bilingüe con Laravel

Leyendo los tutoriales que se están compartiendo en la comunidad sobre Laravel, empecé esta semana a trabajar con este framework y quiero compartirles este sencillo tuto de cómo realizar un sitio bilingüe con Laravel.

Ficheros que necesitamos crear/modificar:

  • /app/translation.php
  • /app/start/global.php
  • /app/lang/en/home.php
  • /app/lang/es/home.php
  • /app/views/home/index.php


Creamos el archivo que se encargará de setear la variable 'locale' dinámicamente.

filename: /app/translation.php

Código :

<?php
/*
|--------------------------------------------------------------------------
| Translations
|--------------------------------------------------------------------------
|
| This script gets the locale of user and load the appropriate file 
| that contain the translations.
| 
| English File: /app/lang/en/{section}.php
| Spanish File: /app/lang/es/{section}.php
|
| @Author: Juan Mauricio Escobar Torres.
| @Email: juanmauricioescobar@gmail.com
| @Web: http://www.juanescobar.us
| @Date: September 2013.
| @License: All Rights Reserved.
|
*/

// Set locales allowed.

$localesAllowed = array('es', 'en');

// Set default language.
// It should matchs with $localesAllowed array.

define('DEFAULT_LANG', 'en');

// Set default language if lang session do not exits.

if (!Session::has('locale'))
    Session::put('locale', DEFAULT_LANG);   

// Forcing to change language passing the locale via GET.

if (Input::has('lang'))
    if (in_array(Input::get('lang'), $localesAllowed))
        Session::put('locale', Input::get('lang'));
    else     
        Session::put('locale', DEFAULT_LANG);

// Overwrite locale in /app/config/app.php file.
// Make translation

App::setLocale(Session::get('locale'));


Incluimos el archivo previamente creado(/app/translation.php) en /app/start/global.php para que se ejecute antes de cada petición. Se agrega lo siguiente al final de /app/start/global.php

filename: /app/start/global.php

Código :

/*
|--------------------------------------------------------------------------
| Require The Translation File
|--------------------------------------------------------------------------
|
| Load the translation file for making the webpage bilingue.
| Files that containt the translation are in the path: 
| 
| /app/lang/en|es/{section}.php
|
| {section}.php file can be updated with a text editor.
|
*/

require app_path().'/translation.php';


Creamos los ficheros que contendrán la traducción del contenido estático del sitio.

Ingles
filename: /app/lang/en/home.php

Código :

<?php

return array(

    /*
    |--------------------------------------------------------------------------
    | Home Section
    |--------------------------------------------------------------------------
    |
    | The following language lines contain the default messages used by
    | views/home. 
    |
    */

    'index.toeditthisviewgoto' => 'To edit this view go to',
);


Español
filename: /app/lang/es/home.php

Código :

<?php

return array(

    /*
    |--------------------------------------------------------------------------
    | Home Section
    |--------------------------------------------------------------------------
    |
    | The following language lines contain the default messages used by
    | views/home. 
    |
    */

    'index.toeditthisviewgoto' => 'Para editar esta vista dirijase a',
);


En nuestra vista colocamos el índice del array que contiene la traducción.

Vista de Ejemplo
filename: /app/views/home/index.php

Código :

<p class="well">
    <?php echo trans('home.index.toeditthisviewgoto').' '.__FILE__; ?>
</p>


Por último para cambiar entre lenguajes se pasa el parámetro 'lang' vía GET.

  • Ingles: dominio.com/?lang=en
  • Español: dominio.com/?lang=es


Si no se pasa ningún parámetro el script(/app/translation.php) seteará por defecto lang=en.

Si conocen otras formas de hacer la traducción por favor compártanlas, me gustaría conocer sus experiencias.

Saludos!

¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.

Publica tu comentario

o puedes...

¿Estás registrado en Cristalab y quieres
publicar tu URL y avatar?

¿No estás registrado aún pero quieres hacerlo antes de publicar tu comentario?

Registrate