Hook de Idiomas en Liferay

por

El hook que vamos a desarrollar a continuación nos va a servir para llevar a cabo la internacionalización de todo el contenido que mostremos en nuestro portal.

Será un hook en el que definiremos pares de valores de la forma clave=valor las cuales definirán la traducción de una palabra. Se definirán los mismo pares en diferentes ficheros que corresponderán a los diferentes idiomas en los que queremos traducirlo. Vamos a ver de forma mas profunda en un ejemplo muy sencillo a continuación:

Para empezar debemos tener instalado tanto el IDE de Liferay para Eclipse como un Servidor Liferay 6.

Una vez tengamos todo instalado y configurado debemos de crearnos un nuevo Hook vacío que llamaremos "MisIdiomas".

En este caso, nuestro hook no va a sobreescribir ninguna jsp sino que va a definir un archivo de contenido y una serie de properties que haran referencia a los idiomas en los que nosotros queremos traducir los contenidos que nosotros querramos.

Lo primero que debemos de hacer es crear una nueva carpeta que debemos llamar "content" en la ruta "/idiomasVariables-hook/docroot/WEB-INF/src/content" como podemos ver en la imagen:

Ahora vamos a crear 2 archivos dentro de "content" que corresponderán a los idiomas a traducir. Estos archivos deben llamarse Language_en_EN.properties y Language_es_ES.properties . Debemos de usar estos nombre en concreto y no variarlos ya que liferay los usa por defecto cuando cambiamos el idioma desde el portlet de idiomas. En caso de querer otros idiomas se definiría de la misma forma Language_xx_XX.properties(pt_PT para portugués, fr_FR para francés, etc).

Para nuestro hook de ejemplo vamos a definir 2 pares de valores que dereran ir dentro de los 2 archivos properties que hemos creado correspondiendo su valor a cada idioma.

Esto es, en Language_es_ES.properties vamos a escribir:


mensaje1=Hola a todos
mensaje2=Adios a todos

Y en Language_en_EN.properties vamos a escribir:


mensaje1=Hello everybody
mensaje2=Goodbye everybody

Como vemos mantenemos la clave en ambas properties pero variamos el valor.

De esta manera tenemos definidos 2 mensajes que podremos usar donde queramos y que según el idioma que elijamos se podrá en un idioma u otro.

Lo último que nos queda para que todo funcione bien es definir la ruta de estas properties en la configuración del hook. Para ellos debemos ir a /idiomasVariables-hook/docroot/WEB-INF/liferay-hook.xml y dejarlo de la siguiente manera:


<?xml version="1.0"?>
<!DOCTYPE hook PUBLIC "-//Liferay//DTD Hook 6.0.0//EN" "http://www.liferay.com/dtd/liferay-hook_6_0_0.dtd">

<hook>

   <language-properties>content/Language_es_ES.properties</language-properties>

   <language-properties>content/Language_en_EN.properties</language-properties>     

</hook>

Con esto ya tendríamos listo el hook para usarse, solo nos queda desplegarlo en el servidor y listo.

Si queremos probar como funciona el hook podemos definir por ejemplo en el portal_normal.vm del tema de apariencia 2 líneas como las que siguen:

language("mensaje1") language("mensaje2")

Y desplegar el tema también. Una vez desplegado el tema y el hook, debemos poner el portal en español o inglés mediante el portlet de idiomas y veremos como aparecen lo dos mensajes en el idioma seleccionado. En caso de seleccionar un idioma no definido en el hook los mensaje mostrarán el nombre de su clave siemplemente.

Podemos descargarnos el código completo del hook desde el siguiente enlace.

Espero que os sea de utilidad.

COMENTARIOS

13-05-2012 21:08:39
Este tipo de hook no afecta a un portlet concreto como los modificadores de JSP, este afecta a todos y las traducciones las tienes disponibles para todos los portlets, temas, etc. Por ejemplo a través de este hook puedes generar claves para traducir ciertas palabras y usarlas a través de velocities en los temas de apariencia. Lo que deberías hacer es usar la clave que escribes en Language_es_ES.properties y Language_en_EN.properties en tu hook. No es un hook aplicado a 1 solo portlet sino que las traducciones que metes dentro del hook están disponibles en toda la aplicación.
11-05-2012 12:30:09
Hola, gracias por tu post, es muy útil. Estoy intentando modificar mediante un hook el language_es.properties del portlet Mail, ya que más del 60% del portlet no está traducido al español. Sigo los pasos del tutorial, lo del hook.xml y crear los language.propeties pertinentes, pero no veo los efectos en el portlet. Únicamente añado la supuesta estructura del portlet a mi hook, donde coloco los language.properties y la configuración del xml. Pero como sabe mi hook a que portlet debe modificarle los language.properties? falta alguna configuración? Creo que ahí es donde está el fallo, pero no se como resolverlo. Espero que me puedas ayudar, Un saludo y gracias.
28-04-2012 15:33:37
¿Que quieres crear un portlet simplemente?
27-04-2012 18:58:38
hola, quisiera hacer lo mismo para un portle, habra algun procedimiento?

DEJA TU COMENTARIO