5.2.3. Portlet localization

In this example you add some language resources and CSS to be used in the JSP of the HelloWorld portlet.

The example is plain JSR-286, except one thing: eXo expects that the resource bundle should be found in the locale/portlet folder. The path is fixed and you need to pack your .properties files in a sub-folder of this path.

  1. Create a new Maven project as follows:

  2. Edit pom.xml:

    
    <project>
      <modelVersion>4.0.0</modelVersion>
      <groupId>com.acme.samples</groupId>
      <artifactId>hello-portlet</artifactId>
      <version>1.0</version>
      <packaging>war</packaging>
      <build>
        <finalName>hello-portlet</finalName>
      </build>

      <dependencies>
        <dependency>
          <groupId>javax.portlet</groupId>
          <artifactId>portlet-api</artifactId>
          <version>2.0</version>
          <scope>provided</scope>
        </dependency>
      </dependencies>
    </project>
  3. Edit web.xml:

    
    <web-app>
      <display-name>hello-portlet</display-name>
    </web-app>
  4. Edit HelloPortlet.java:

    package com.acme.samples;
    
    
    import java.io.IOException;
    import javax.portlet.GenericPortlet;
    import javax.portlet.PortletRequestDispatcher;
    import javax.portlet.RenderRequest;
    import javax.portlet.RenderResponse;
    import javax.portlet.PortletException;
    import javax.portlet.RenderMode;
    public class HelloPortlet extends GenericPortlet {
      @RenderMode(name = "view")
      public void Hello(RenderRequest request, RenderResponse response) throws IOException, PortletException {
        PortletRequestDispatcher prDispatcher = getPortletContext().getRequestDispatcher("/jsp/hello.jsp");
        prDispatcher.include(request, response);
      }
    }
  5. Edit HelloPortlet_en.properties to add language properties:

    com.acme.samples.HelloPortlet.Hello=Hello!
    com.acme.samples.HelloPortlet.Msg1=This is a portlet example.
    com.acme.samples.HelloPortlet.Msg2=Written by a baker.
  6. Edit HelloPortlet_fr.properties to add language properties:

    com.acme.samples.HelloPortlet.Hello=Bonjour!
    com.acme.samples.HelloPortlet.Msg1=C'est un example de portlet.
    com.acme.samples.HelloPortlet.Msg2=Ecrit par un boulanger.
  7. Edit portlet.xml to register supported locale and the resource-bundle:

    
    <portlet-app version="2.0" xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd">
      <portlet>
        <portlet-name>Hello</portlet-name>
        <portlet-class>com.acme.samples.HelloPortlet</portlet-class>
        <supports>
          <mime-type>text/html</mime-type>
        </supports>
        <supported-locale>en</supported-locale>
        <resource-bundle>locale.portlet.HelloPortlet.HelloPortlet</resource-bundle>
        <portlet-info>
          <title>Hello</title>
        </portlet-info>
      </portlet>
    </portlet-app>
  8. Edit Stylesheet.css:

    
    .HelloPortlet1, .HelloPortlet2, .HelloPortlet3 {
      
    padding: 10px;
      
    font-style: italic;
      
    font-size: 18px;
      
    width: 400px;
    }
    .HelloPortlet1 {
      
    background-color: antiquewhite;
    }
    .HelloPortlet2 {
      
    background-color: lemonchiffon;
    }
    .HelloPortlet3 {
      
    background-color: wheat;
    }
  9. Edit hello.jsp to add language properties:

    
    <%@ taglib uri="http://java.sun.com/portlet" prefix="portlet" %>
    <%@ page import="java.util.ResourceBundle"%>
    <%@ page import="org.exoplatform.services.resources.ResourceBundleService"%>
    <%@ page import="org.exoplatform.container.PortalContainer"%>

    <portlet:defineObjects />

    <%
      String contextPath = request.getContextPath();
      ResourceBundle resource = portletConfig.getResourceBundle(request.getLocale());
    %>

    <link rel="stylesheet" type="text/css" href="<%=contextPath%>/skin/Stylesheet.css"/>
    <div class="HelloPortlet1">
      <span><%=resource.getString("com.acme.samples.HelloPortlet.Hello")%></span>
    </div>
    <div class="HelloPortlet2">
      <span><%=resource.getString("com.acme.samples.HelloPortlet.Msg1")%></span>
    </div>
    <div class="HelloPortlet3">
      <span><%=resource.getString("com.acme.samples.HelloPortlet.Msg2")%></span>
    </div>
    • Notice the taglib and portlet:defineObjects is added to be able to use the portletConfig object.

    • To simplify this example, a CSS link is added to the body (JSP) but this is not recommended. Please see the Portlet CSS section for a better way.

After deployment, add the portlet to a page and test:

Note

The locale resource bundle needs to be packed in a sub folder under WEB-INF/classes/locale/portlet/.

Copyright ©. All rights reserved. eXo Platform SAS
blog comments powered byDisqus