Liferay Localización-Traducción


Liferay ofrece la posibilidad de localizar el portal incluyendo en un mismo archivo la lista de literales a traducir mediante la utilización de keys (claves). Es posible incluir keys en el propio portlet o, a modo general, desde el Hook para que afecte a todo el portal.

Para las traducciones se utilizan keys a modo de key=traduccion

En función del idioma en el que estemos visitando el portal, Liferay buscará la key en el Language_xx.properties que corresponda a ese idioma, donde xx es el código identificativo del idioma.

Si no encuentra la key, la buscará en el Language.properties y si tampoco se encuentra en ese archivo la buscará en las que Liferay tiene por defecto ( https://github.com/liferay/liferay-portal/tree/master/portal-impl/src/content ).

En el caso de que la key utilizada no esté especificada en ninguno de los archivos mencionados, simplemente, no realizará el cambio y mostrará el String de la key tal cual.

*En el blog anterior se puede ver cómo configurar el Hook para que detecte los archivos con las claves y donde situar dichos archivos.

Para utilizar éste sistema de traducción se debe incluir la key en cada Language_xx.properties de cada uno de los idiomas a los que queramos localizar el portal junto con su respectiva traducción. Una vez hecho esto, se pueden usar dichas keys dentro de nuestro código.

La forma de utilizar éstas keys puede realizarse mediante el tag de liferay liferay-ui:message o usando la clase java LanguageUtil.

En el caso de que parte del contenido a traducir sea dinámico, Liferay también permite el paso de parámetros en las keys.

A continuación se muestran dos ejemplos, uno simple y otro con parámetros, así como la declaración en el Language properties y las diferentes formas de utilizarlo.

Ejemplo (básico):

Código dentro del jsp:

Archivo con el código (mediante tags):

<liferay-ui:message key="ultimas-noticias" />

Archivo con el código (con la clase):

LanguageUtil.get(pageContext, "ultimas-noticias" );

Paso 1: Para la key “ultimas-noticias” no existe ninguna traducción por defecto y no la hemos traducido ni en el Language_es.properties ni en el Language.properties, por lo tanto, muestra la key tal cual, sin traducción.

Resultado:

01.png

Paso 2: Traducimos la key “ultimas-noticias” en el Language_es.properties.

Language_es.properties:

ultimas-noticias=Últimas noticias

Muestra “Últimas noticias” si navegamos en español, pero sigue mostrando “ultimas-noticias” si navegamos en inglés.

Resultado:

02.png
03.png

Paso 3: Traducimos la key “ultimas-noticias” en el Language.properties.

Language.properties:

ultimas-noticias=Últimas noticias

Muestra “Últimas noticias” independientemente del idioma por el que naveguemos.

Resultado:

04.png

Paso 4: Traducimos la key “ultimas-noticias” en el Language_en.properties.

Language_en.properties:

ultimas-noticias=Last news

Ahora muestra “Last news” cuando navegamos en inglés y “Últimas noticias” en el resto de idiomas.

Resultado:

02.png
05.png

Ejemplo (con parámetros):

Language_es.properties:

delete-profile-x=Eliminado el perfil de {0} del servicio.

Archivo con el código (mediante tags):

<liferay-ui:message key="delete-profile-x" arguments="<%= user.getName() %>" />

Archivo con el código (con la clase):

LanguageUtil.format(pageContext, "delete-profile-x" , user.getName());

Resultado:

Eliminado el perfil de Juan del servicio.

Nota: Hay que tener en cuenta que si sobrescribimos una traducción por defecto es probable que afectemos a literales que usa Liferay, por ejemplo, si modificamos “search” en el Hook no solo afectará a nuestros portlets, sino que también se verá afectado el texto que aparezca en el botón del buscador de Liferay.

Esperamos que os sea de ayuda. ¡ Hasta la próxima !


Leave a Reply

Your email address will not be published. Required fields are marked *