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.
1234567891011 /app /lang /en textosphp mensajesphp /es textosphp mensajesphp /fr textosphp mensajesphp
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", );12345678 <?php //app/lang/es/textos.php returnarray( "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", );12345678 <?php //app/lang/en/textos.php returnarray( "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.
// 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 Codehero12345678910 // el parámetro debe ser el nombre del archivo // seguido con el nombre del texto// y separado por un puntoecho 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:
// 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 sistema1234567 // 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.
App::setLocale('en');1 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:
//imaginemos que ahora en nuestro archivo textos.php // en la carpetas es tenemos el siguiente texto en bienvenido 'bienvenido' => 'Bienvenido a Codehero, :nombre',1234 //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.
echo Lang::get('textos.bienvenido', array('nombre'=>'Pedro Perez') ); // Esto devolvera el siguiente texto // Bienvenido a Codehero, Pedro Perez1234 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:
//app/lang/es/texto.php 'frutas'=>'{0} No hay frutas|[1,19] Hay Algunas frutas|[20,Inf] Hay muchas frutas :count',12 //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.
// En la función choice primero pasamos el nombre del texto // y luego el numero a evaluar Lang::choice('textos.frutas', 10);123 // En la función choice primero pasamos el nombre del texto // y luego el numero a evaluarLang::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.