Liferay 6 1, Internacionalización en nuestros desarrollos

Post on 18-Nov-2014

1.101 views 0 download

description

 

Transcript of Liferay 6 1, Internacionalización en nuestros desarrollos

Liferay 6.1 para desarrolladoresI18n en nuestros desarrollos

I18n en nuestros desarrollos

Preparado por Jesús Salinas Revelles

Índice de contenidos

‣ Introducción.

‣ Añadir entradas dentro de los ficheros de properties.

‣ Etiquetas jsp para i18n.

‣ La clase LanguageUtil.

‣ I18n en Velocity.

‣ I18n en los temas de Liferay.

I18n en nuestros desarrollos

Preparado por Jesús Salinas Revelles

Introducción

‣ Como ya sabemos la internacionalización en Liferay es muy importante y es manejada en muy diferentes ámbitos por defecto. Por ejemplo, la gestión de contenidos web:

I18n en nuestros desarrollos

Preparado por Jesús Salinas Revelles

Introducción

‣ También se utiliza en la gestión de categorías y muchos otros entornos:

I18n en nuestros desarrollos

Preparado por Jesús Salinas Revelles

Introducción

‣ Los procesos de internacionalización en Liferay Portal se manejan de forma simple e intuitiva. Trabaja con ficheros de propiedades para todos sus componentes.

‣ La infraestructura Liferay nos permite modificar los mensajes I18n que ya maneja el sistema o añadir nuevas entradas.

‣ El desarrollador está obligado a conocer cómo manejar la internacionalización programáticamente en sus desarrollos.

‣ Pasamos a comentarlo a continuación.

I18n en nuestros desarrollos

Preparado por Jesús Salinas Revelles

Introducción

‣ Los ficheros de propiedades definidos en la plataforma, podemos encontrarlos en el fichero portal-impl.jar. Si se descomprime o se accede al código fuente, el usuario encontrará la siguiente estructura de directorios: portal-impl/content.

I18n en nuestros desarrollos

Preparado por Jesús Salinas Revelles

Añadir entradas dentro de los ficheros de properties

‣ Existen diferentes estrategias para añadir nuevas entradas en los ficheros de propiedades de nuestra instalación de Liferay.

‣ Plugin Ext.

‣ Hooks.

‣ Portlets de usuario.

I18n en nuestros desarrollos

Preparado por Jesús Salinas Revelles

Añadir entradas dentro de los ficheros de properties

‣ Plugin Ext:

‣ Dentro de la carpeta ext-impl/src debe crearse una carpeta content donde se almacenan los ficheros de propiedades siguiendo la siguiente notación.

I18n en nuestros desarrollos

Preparado por Jesús Salinas Revelles

Añadir entradas dentro de los ficheros de properties

‣ Hooks:

‣ Los ficheros de propiedades deben darse de alta en el fichero liferay-hook.xml:

<?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.properties</language-properties>! <language-properties>

content/Language_en.properties</language-properties>! <language-properties>

content/Language_es.properties</language-properties></hook>

I18n en nuestros desarrollos

Preparado por Jesús Salinas Revelles

Añadir entradas dentro de los ficheros de properties

‣ Hooks:

‣ La entrada xml language-properties permite definir las rutas donde se encuentran los ficheros i18n.

‣ Si se define la ruta content/Language.properties, el fichero debe encontrarse en la carpeta docroot/WEB-INF/src/content. Se muestra la estructura de un proyecto ejemplo:

I18n en nuestros desarrollos

Preparado por Jesús Salinas Revelles

Añadir entradas dentro de los ficheros de properties

‣ Portlets de usuario:

‣ Si el desarrollador desea crear portlets internacionalizados tendrá que incluir una entrada resource-bundle dentro de la entrada xml portlet del portlet en cuestión.

<?xml version="1.0"?><portlet>...<resource-bundle>content/Language</resource-bundle>

</portlet>

I18n en nuestros desarrollos

Preparado por Jesús Salinas Revelles

Añadir entradas dentro de los ficheros de properties

‣ Portlets de usuario:

‣ Esto implica la siguiente ruta:

‣ Nota: Eclipse en la versión Helios genera la configuración para I18n de forma incorrecta.

I18n en nuestros desarrollos

Preparado por Jesús Salinas Revelles

Etiquetas jsp para i18n

‣ La etiqueta liferay-ui:message muestra un mensaje internacionalizado asociado a una determinada clave.

‣ El atributo key identifica la clave i18n. Por ejemplo:

<%@ taglib uri="http://liferay.com/tld/ui" prefix="liferay-ui" %>

<liferay-ui:message key="my-friends"/ >

I18n en nuestros desarrollos

Preparado por Jesús Salinas Revelles

La clase LanguageUtil

‣ Si necesitamos aplicar I18n en Java tendremos que apoyarnos en la clase LanguageUtil que se encuentra en el paquete com.liferay.portal.kernel.language:

I18n en nuestros desarrollos

Preparado por Jesús Salinas Revelles

La clase LanguageUtil

‣ El método getLanguageId nos permite recuperar el lenguaje utilizado:

‣ Por ejemplo:

public static String getLanguageId(HttpServletRequest request)

public static String getLanguageId(PortletRequest portletRequest)

public static String getLanguageId(Locale locale)

String languageId = LanguageUtil.getLanguageId(request);

I18n en nuestros desarrollos

Preparado por Jesús Salinas Revelles

La clase LanguageUtil

‣ El método get() nos permite la recuperación de un mensaje i18n:

‣ Lo habitual será utilizarlo en una página JSP, siempre se encuentra disponible el contexto de la página, por ejemplo:

public static String get(javax.servlet.jsp.PageContext pageContext,String key)

<label class="aui-field-label"><liferay-ui:message key="absence-type"></liferay-ui:message>

</label><span><%=LanguageUtil.get(pageContext,event.getType()) %>

</span>

I18n en nuestros desarrollos

Preparado por Jesús Salinas Revelles

La clase LanguageUtil

‣ El método format() nos permite recuperar un mensaje parametrizado:

‣ El fichero de propiedades:

public static String format( javax.servlet.jsp.PageContext pageContext, String pattern, Object[] arguments)

x-needs-to-approve-you-as-her-friend={0} necesita su aprobación para convertirse en su amigo.

I18n en nuestros desarrollos

Preparado por Jesús Salinas Revelles

I18n en Velocity

‣ Velocity define variables que podemos utilizar en las plantillas. Incluir en la plantilla init.vm.

#set ($language_id = $user.getLanguageId())

#language("KEY-NAME")

$languageUtil.get($company_id, $locale, "add-application"))

I18n en nuestros desarrollos

Preparado por Jesús Salinas Revelles

I18n en los temas de Liferay

‣ Estamos desarrollando las plantillas de nuestros temas mediante la tecnología Velocity, ¿cómo podemos incluir i18n en nuestros temas?

‣ Para resolver este problema nos apoyamos en la variable predefinida de Velocity, languageUtil:

...<section><div class="footer-title">! <h5>$languageUtil.format($locale, "about-us-title")</h5></div><p class="footer-text">$languageUtil.format($locale, "about-us-description")

</p></section>...