post thumbnail

Laravel 4 desde Cero: Internacionalización

Publicado Por: Ramses Velasquez, El 24/02/2014


Detalles del Curso:

Dificultad: Novato

Duración: 20 min


En este nuevo capítulo de Laravel veremos como este framework nos ayuda a crear sistemas en diferentes idiomas de manera sencilla. Hoy en día es importante que todos los grandes sistemas permitan ser utilizados con diferentes idiomas e intercambiar entre ellos fácilmente. Para poder lograr esto de la manera más escalable posible se deben tener todos los textos en archivos separados por cada idioma.


Archivos de Lenguajes

Los archivos de texto deben ir en la carpeta app/lang y dentro de esta carpeta debe haber una carpeta por cada idioma. Veamos un ejemplo de como podría quedar nuestro directorio con archivos de texto para español e ingles.

/app
    /lang
        /en
            textos.php
            mensajes.php
        /es
            textos.php
            mensajes.php
        /fr
            textos.php
            mensajes.php

Cada uno de estos archivos debe tener un arreglo con todos los textos que queramos tener en diferentes idiomas. Vamos a ver como serian estos arreglos.

<?php
//app/lang/es/textos.php

return array(
    "bienvenido" => "Bienvenido a Codehero",
    "iniciar"    => "Iniciar Sesión",
    "cancelar"   => "Cancelar",
);
?> 
<?php
//app/lang/en/textos.php

return array(
    "bienvenido" => "Welcome to Codehero",
    "iniciar"    => "Login",
    "cancelar"   => "Cancel",
);
?> 

Como podemos observar cada texto tiene una clave igual en cada archivo. De esta manera solo tenemos que llamar a las claves y dependiendo del idioma que este seleccionado Laravel buscara el texto apropiado.


Uso de los Textos

Para utilizar estos textos Laravel tiene la función Lang::get(), la cual debemos llamar en donde queramos imprimir alguno de los strings que tenemos en los archivos de idiomas.

<?php

// el parámetro debe ser el nombre del archivo 
// seguido con el nombre del texto
// y separado por un punto
echo Lang::get('textos.bienvenido');

// Si el sistema esta en español esto nos devolverá
// Bienvenidos a Codehero

// Si el sistema esta en ingles esto nos devolverá 
// Welcome to Codehero

?> 

El framework busca el texto automáticamente en el archivo del idioma que tengamos establecido y si no lo consigue imprimir el parámetro. En caso de que queramos pasar un idioma determinado sin que busque el que esta establecido podemos pasarlo como parámetro:

<?php
// pasamos el idioma como tercer parámetro 
// el segundo parametro se explicara en breve 

echo Lang::get('textos.bienvenido', array(), 'en');

// De esta manera obtenemos el texto de ingles sin importar 
// cual sea el idioma establecido en el sistema
?> 

Cambiar el idioma

Para cambiar el idioma se utiliza la función App::setLocale a la cual se le pasa como parámetro el idioma que se desee utilizar.

<?php
App::setLocale('en');
?> 

Textos con Parámetros

En ocasiones nos conseguiremos con textos a los que debemos completar con nombres o números que pueden cambiar de posición dependiendo del idioma y valor dependiendo del momento que se usen. Para eso Laravel permite pasarle parámetros a los textos siempre y cuando se hayan definido en el archivo de texto. Vemos como funciona esta característica:

<?php
//imaginemos que ahora en nuestro archivo textos.php
// en la carpetas es tenemos el siguiente texto en bienvenido

'bienvenido' => 'Bienvenido a Codehero, :nombre',
?> 

Como podemos observar al final tenemos :nombre, esto funciona como una especie de variable, la cual definimos al momento de llamar al texto. Para hacer esto utilizamos el segundo parámetro de la función Lang::get, el cual vimos anteriormente que era un arreglo vacío. En este arreglo ponemos el nombre de la variable que queramos utilizar y el valor que la vayamos a dar.

<?php
echo Lang::get('textos.bienvenido', array('nombre'=>'Pedro Perez') );

// Esto devolvera el siguiente texto
// Bienvenido a Codehero, Pedro Perez
?> 

Texto Plurales

Cuando tenemos textos que van a cambiar dependiendo de una variable numérica es tedioso tener que poner varios if para verificar que texto se colocara. Para esto laravel nos presenta la función Lang::choice, la cual nos facilita esta tarea. Veamos como se utiliza esta función:

<?php
//app/lang/es/texto.php
'frutas'=>'{0} No hay frutas|[1,19] Hay Algunas frutas|[20,Inf] Hay muchas frutas :count',

?> 

Como podemos observar en el texto tenemos unos rangos y textos para cada rango, separados por (|). Para establecer texto para un solo numero colocamos el numero entre llaves {}, para establecer rangos colocamos el principio y el fin entre corchetes. Si queremos imprimir el numero utilizamos :count.

<?php
// En la función choice primero pasamos el nombre del texto 
// y luego el numero a evaluar
Lang::choice('textos.frutas', 10);

?> 

Conclusiones

En este capitulo hemos aprendido a utilizar las funciones para internacionalizar nuestra aplicación. Si lo hacemos uso de estas funciones desde que empezamos nuestros proyectos sera muy fácil tener aplicaciones en varios idiomas. Cualquier duda o comentarios estaré atento a la sección de comentarios.


¿Te ha gustado esta publicación?

Compártela:

Por Ramses Velasquez

Conoce más sobre este autor aquí


comments powered by Disqus