SlideShare una empresa de Scribd logo
1 de 19
Descargar para leer sin conexión
Liferay 6.1 para
desarrolladores
I18n 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>
...

Más contenido relacionado

La actualidad más candente

Insertsar un video
Insertsar un  videoInsertsar un  video
Insertsar un video
arecerv
 

La actualidad más candente (20)

Docker desde cero
Docker desde ceroDocker desde cero
Docker desde cero
 
nerdear.la 2016 - Docker workshop
nerdear.la 2016 - Docker workshopnerdear.la 2016 - Docker workshop
nerdear.la 2016 - Docker workshop
 
WebRTC y Kurento en el T3cgFest 2015
WebRTC y Kurento en el T3cgFest 2015WebRTC y Kurento en el T3cgFest 2015
WebRTC y Kurento en el T3cgFest 2015
 
Insertsar un video
Insertsar un  videoInsertsar un  video
Insertsar un video
 
Framework
FrameworkFramework
Framework
 
Divide y vencerás con docker y core os
Divide y vencerás con docker y core osDivide y vencerás con docker y core os
Divide y vencerás con docker y core os
 
Maven
MavenMaven
Maven
 
DevOps+[Chef/Docker]
 DevOps+[Chef/Docker] DevOps+[Chef/Docker]
DevOps+[Chef/Docker]
 
Workshop 1 - Introducción a los Microservicios y Contenedores (@TechHub - Goo...
Workshop 1 - Introducción a los Microservicios y Contenedores (@TechHub - Goo...Workshop 1 - Introducción a los Microservicios y Contenedores (@TechHub - Goo...
Workshop 1 - Introducción a los Microservicios y Contenedores (@TechHub - Goo...
 
Gwt
GwtGwt
Gwt
 
Semana 1 Microservicios
Semana 1   MicroserviciosSemana 1   Microservicios
Semana 1 Microservicios
 
Linea del tiempo de los frameworks
Linea del tiempo de los frameworksLinea del tiempo de los frameworks
Linea del tiempo de los frameworks
 
Containers - Hablemos de Docker
Containers - Hablemos de DockerContainers - Hablemos de Docker
Containers - Hablemos de Docker
 
Introducción a Docker
Introducción a DockerIntroducción a Docker
Introducción a Docker
 
Tema 5
Tema 5Tema 5
Tema 5
 
Introducción a Docker
Introducción a DockerIntroducción a Docker
Introducción a Docker
 
Introduccion a java i
Introduccion a java iIntroduccion a java i
Introduccion a java i
 
Guia instalación NetBeans como entorno de desarrollo para Android:
Guia instalación NetBeans como entorno de desarrollo para Android: Guia instalación NetBeans como entorno de desarrollo para Android:
Guia instalación NetBeans como entorno de desarrollo para Android:
 
Yii framework
Yii frameworkYii framework
Yii framework
 
Docker: la revolución en virtualización
Docker: la revolución en virtualizaciónDocker: la revolución en virtualización
Docker: la revolución en virtualización
 

Similar a Liferay 6 1, Internacionalización en nuestros desarrollos

Windows 10 Developer Readiness. Interfaces Adaptativas
Windows 10 Developer Readiness. Interfaces AdaptativasWindows 10 Developer Readiness. Interfaces Adaptativas
Windows 10 Developer Readiness. Interfaces Adaptativas
Javier Suárez Ruiz
 
SPIPEDU avanzado - 10 febrero
SPIPEDU avanzado - 10 febreroSPIPEDU avanzado - 10 febrero
SPIPEDU avanzado - 10 febrero
spipedu
 
Informe proyecto final programacion i (2)
Informe proyecto final programacion i (2)Informe proyecto final programacion i (2)
Informe proyecto final programacion i (2)
CRISSTHOFER
 
Curso SPIPEDU avanzado - 10 Febrero
Curso SPIPEDU avanzado - 10 FebreroCurso SPIPEDU avanzado - 10 Febrero
Curso SPIPEDU avanzado - 10 Febrero
comcinco
 
Taller Open Cms Instalacion
Taller Open Cms InstalacionTaller Open Cms Instalacion
Taller Open Cms Instalacion
osmarinero
 

Similar a Liferay 6 1, Internacionalización en nuestros desarrollos (20)

Taller 1 la_cipoepm
Taller 1 la_cipoepmTaller 1 la_cipoepm
Taller 1 la_cipoepm
 
Atix30
Atix30Atix30
Atix30
 
Examen de programacion
Examen de programacionExamen de programacion
Examen de programacion
 
MobileCONGalicia Introducción a Android
MobileCONGalicia Introducción a AndroidMobileCONGalicia Introducción a Android
MobileCONGalicia Introducción a Android
 
Asp.net
Asp.netAsp.net
Asp.net
 
ASP.NET Guia de desarrollo de sitios y aplicaciones web dinamicas
ASP.NET Guia de desarrollo de sitios y aplicaciones web dinamicasASP.NET Guia de desarrollo de sitios y aplicaciones web dinamicas
ASP.NET Guia de desarrollo de sitios y aplicaciones web dinamicas
 
Tutorial CodeIgniter + Netbeans 7
Tutorial CodeIgniter + Netbeans 7Tutorial CodeIgniter + Netbeans 7
Tutorial CodeIgniter + Netbeans 7
 
Atix13
Atix13Atix13
Atix13
 
Windows 10 Developer Readiness. Interfaces Adaptativas
Windows 10 Developer Readiness. Interfaces AdaptativasWindows 10 Developer Readiness. Interfaces Adaptativas
Windows 10 Developer Readiness. Interfaces Adaptativas
 
SPIPEDU avanzado - 10 febrero
SPIPEDU avanzado - 10 febreroSPIPEDU avanzado - 10 febrero
SPIPEDU avanzado - 10 febrero
 
Informe proyecto final programacion i (2)
Informe proyecto final programacion i (2)Informe proyecto final programacion i (2)
Informe proyecto final programacion i (2)
 
El universo JavaScript en Drupal 8
El universo JavaScript en Drupal 8El universo JavaScript en Drupal 8
El universo JavaScript en Drupal 8
 
Curso SPIPEDU avanzado - 10 Febrero
Curso SPIPEDU avanzado - 10 FebreroCurso SPIPEDU avanzado - 10 Febrero
Curso SPIPEDU avanzado - 10 Febrero
 
Creación de actividades
Creación de actividadesCreación de actividades
Creación de actividades
 
PROGRAMACIÓN ORIENTADA A OBJETOS
PROGRAMACIÓN ORIENTADA A OBJETOSPROGRAMACIÓN ORIENTADA A OBJETOS
PROGRAMACIÓN ORIENTADA A OBJETOS
 
Python
PythonPython
Python
 
Plone CMS, como herramienta de apoyo a los procesos educativos
Plone CMS, como herramienta de apoyo a los procesos educativosPlone CMS, como herramienta de apoyo a los procesos educativos
Plone CMS, como herramienta de apoyo a los procesos educativos
 
Plone CMS, como herramienta de apoyo a los procesos educativos, EFD 2014 Caracas
Plone CMS, como herramienta de apoyo a los procesos educativos, EFD 2014 CaracasPlone CMS, como herramienta de apoyo a los procesos educativos, EFD 2014 Caracas
Plone CMS, como herramienta de apoyo a los procesos educativos, EFD 2014 Caracas
 
Taller Open Cms Instalacion
Taller Open Cms InstalacionTaller Open Cms Instalacion
Taller Open Cms Instalacion
 
Programacion web i
Programacion web iProgramacion web i
Programacion web i
 

Más de Ematiz Tecnología, S.L.

Liferay 6.1 Campos personalizados desde el panel de control
Liferay 6.1  Campos personalizados desde el panel de controlLiferay 6.1  Campos personalizados desde el panel de control
Liferay 6.1 Campos personalizados desde el panel de control
Ematiz Tecnología, S.L.
 
Liferay versión 6.1 Trabajando con LDAP, introducción
Liferay versión 6.1  Trabajando con LDAP, introducciónLiferay versión 6.1  Trabajando con LDAP, introducción
Liferay versión 6.1 Trabajando con LDAP, introducción
Ematiz Tecnología, S.L.
 

Más de Ematiz Tecnología, S.L. (11)

Contenidos personalizados en alfresco ecm
Contenidos personalizados en alfresco ecmContenidos personalizados en alfresco ecm
Contenidos personalizados en alfresco ecm
 
El core de Alfresco 4.2
El core de Alfresco 4.2El core de Alfresco 4.2
El core de Alfresco 4.2
 
Perfiles en maven
Perfiles en mavenPerfiles en maven
Perfiles en maven
 
Filtrado de recursos en Maven
Filtrado de recursos en MavenFiltrado de recursos en Maven
Filtrado de recursos en Maven
 
Estructura de un informe en JasperReports
Estructura de un informe en JasperReportsEstructura de un informe en JasperReports
Estructura de un informe en JasperReports
 
Introducción a JasperReports
Introducción a JasperReportsIntroducción a JasperReports
Introducción a JasperReports
 
Liferay 6.1 Service Builder
Liferay 6.1  Service BuilderLiferay 6.1  Service Builder
Liferay 6.1 Service Builder
 
Liferay 6.1 Campos personalizados desde el panel de control
Liferay 6.1  Campos personalizados desde el panel de controlLiferay 6.1  Campos personalizados desde el panel de control
Liferay 6.1 Campos personalizados desde el panel de control
 
Liferay versión 6.1 Trabajando con LDAP, introducción
Liferay versión 6.1  Trabajando con LDAP, introducciónLiferay versión 6.1  Trabajando con LDAP, introducción
Liferay versión 6.1 Trabajando con LDAP, introducción
 
Liferay 6.1 Campos personalizados
Liferay 6.1 Campos personalizadosLiferay 6.1 Campos personalizados
Liferay 6.1 Campos personalizados
 
Trabajando con imagenes en liferay 6.1
Trabajando con imagenes en liferay 6.1Trabajando con imagenes en liferay 6.1
Trabajando con imagenes en liferay 6.1
 

Liferay 6 1, Internacionalización en nuestros desarrollos

  • 1. Liferay 6.1 para desarrolladores I18n en nuestros desarrollos
  • 2. 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.
  • 3. 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:
  • 4. 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:
  • 5. 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.
  • 6. 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.
  • 7. 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.
  • 8. 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.
  • 9. 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>
  • 10. 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:
  • 11. 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>
  • 12. 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.
  • 13. 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"/ >
  • 14. 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:
  • 15. 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);
  • 16. 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>
  • 17. 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.
  • 18. 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"))
  • 19. 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> ...