banner-como-usar-traducciones-laravel

Laravel nos proporciona una manera fácil de traducir nuestras aplicaciones a diferentes idiomas. En este tutorial aprenderemos a trabajar con la internacionalización de nuestros proyecto con este framework.

Las traducciones de un proyecto de Laravel se guardan en el directorio resources/lang/ donde se encontrará un directorio por cada idioma disponible por la aplicación, por defecto viene incluido el idioma inglés (directorio «en»).

Laravel trae 4 archivos con traducciones para el idioma inglés de una aplicación: auth.php, pagination.php, passwords.php y validation.php, pero podemos agregar otros idiomas de una manera sencilla usando el repositorio de GitHub Laravel-langen el cual se encuentra las traducciones de dichos archivos del framework en 50 idiomas. Para usarlo tan solo tenemos que descargar el archivo .zip del repositorio, copiar el directorio del idioma que nos interesa y pegarlo en el directorio resources/lang de nuestro proyecto, por ejemplo para tener inglés, español (directorio es) y portugués (directorio pt-BR): resourcesLang

Cada archivo retorna un array con un conjunto de strings siguiendo el formato ‘clave’  => ‘valor’  que traducen la aplicación. Por ejemplo, si quisiéramos crear un archivo llamado resources/lang/en/mesagges.php sería:

<?php

return [
    'welcome' => 'Welcome to our application'
];

Dicho archivo también lo deberíamos crear en los otros directorios de idiomas presentes en nuestra aplicación.

Configuración

Para establecer el idioma por defecto de una aplicación debemos ir al archivo config/app.php y configurar la opción locale. Por ejemplo, para establecer el español como idioma por defecto:

'locale' => 'es',

Es decir, el valor colocado debe coincidir con el nombre del directorio del idioma.

También, Laravel proporciona la opción fallback_locale  en la cual se establece el idioma a usar en caso que el idioma activo no tenga la traducción respectiva. Por ejemplo, habiendo establecido español como lenguaje predeterminado colocamos el inglés cuando no se obtenga la traducción en el idioma español:

'fallback_locale' => 'en',

Uso

Para trabajar con las traducciones hacemos uso del helper trans() que recibe como parámetro la clave utilizando la notación de puntos (dot notation), es decir, siguiendo la nomenclatura archivo.clave, donde archivo es el nombre del archivo y clave es el elemento que queremos traducir. Por ejemplo para usar el mensaje de error al iniciar sesión en la aplicación que está en el directorio /resources/lang/es/auth.php 

echo trans(auth.failed)

Pero cuando nos encontramos en un archivo .blade.php de una vista usamos:

{{ trans(‘auth.failed’) }}

o con la directiva @lang de Blade:

@lang(‘auth.failed’)

En caso que la clave no exista en el idioma activo ni en el establecido en la opción fallback_locale, la función devolverá dicha clave, es decir para el ejemplo retornará la cadena de texto introducida como auth.failed en vez del texto traducido.

Adicionalmente podemos trabajar las traducciones con el Facade Lang de esta manera, para obtener una clave en particular:

echo Lang::get('auth.failed');

Para saber si existe una clave:

echo Lang::has('auth.failed');

Reemplazo con Parámetros

Podemos usar parámetros para agregar un valor de forma dinámica a la cadena, el cual se coloca utilizando el operador : antes del nombre del parámetro en el texto, que se enviará como segundo argumento al helper trans(). Por ejemplo, para la clave user ubicada en /resources/lang/en/passwords.php  podemos modificarla así:

'user' => 'No podemos encontrar a un usuario con el correo :email.',

y llamar la clave en una vista de esta manera:

echo trans('passwords.user', ['email' => '[email protected]'])

Plurales

En algunas ocasiones es necesario aclarar el número gramatical del término que se está traduciendo, como por ejemplo cuando queremos mostrar los comentarios de un blog, tenemos 3 tipos de posibles mensajes: «No hay comentarios», «Hay un comentario» y «Hay comentarios». En Laravel podemos trabajar con plurales usando el carácter | para diferenciar el plural del singular, colocando los textos correspondientes primero el singular y después del carácter el plural. Es decir que la clave en el archivo /resources/lang/en/posts.php sería:

'comments' => 'No comments|Comments',

y usando la función trans_choice o su equivalente como directiva de Blade @choice para pasar como segundo parámetro el valor con el que se decidirá si es plural o singular, el cual si es mayor

echo trans_choice('posts.comments', 10);
//o en una vista
@choice('posts.comments', 10)

También se pueden usar reglas más complejas para distinguir entre distintos rangos o conjuntos de valores, como por ejemplo:

'comments' => '{0}No comments|{1}One comment|[2,Inf]Comments',

¡Bien! espero que les sea de utilidad para sus proyectos de Laravel. No dejes de comentar en caso de duda y compartir en las redes sociales.

Material relacionado

Regístrate hoy en Styde y obtén acceso a todo nuestro contenido.

Lección anterior Bootstrap Sass en Laravel parte 2 (Bower) Lección siguiente Aplicación multi-idioma en Laravel 5.1