内容


用 Rational Application Developer 开发多语种 portlet

简化的代码和 ResourceBundle 类

Comments

IBM® WebSphere® Portal 支持不同地区的 30 多种语言。多个国际组织通过多语种 Web 站点提供在不同国家或地区使用的门户。在这种情况下,门户以用户的首选语言同时向大量用户提供门户视图。WebSphere 门户支持以不同语言显示的 portlet。如果不支持所请求的语言,门户将尝试匹配用户的语言首选项。

本文解释如何使用 IBM® Rational® Application Developer for WebSphere Software v9 开发多语种 portlet(您可以遵循本文中的步骤,使用 v7.5 或更高版本)。本文中的 下载 部分提供了使用 ResourceBundle 合并多语种 portlet 的代码片段。

先决条件

为了遵循本文中的步骤,您需要:

  • IBM Rational Application Developer v7.5 和更高版本
    • 可以在 Rational Application Developer v7.5 和更高版本上开发多语种 portlet。
  • IBM WebSphere Portal v7 和更高版本
    • 在 IBM WebSphere Portal v7.x 及最新的版本(v8.x 和 v8.5.x)上都支持基于 ResourceBundle 的多语种 portlet
  • 熟悉 Rational Application Developer、Portlet 和 J2EE 应用程序开发

如何开发多语种 portlet

使用 ResourceBundle 开发多语种 portlet 很容易。ListResourceBundleResourceBundle 的一个抽象子类,它在方便易用的列表中管理区域设置的资源。ListResourceBundle 是在 java.util 库 (java.util.ListResourceBundle) 中提供的。

创建新的 portlet 项目

第一步是在 Rational Application Developer 中创建一个新的 portlet 项目。

  1. 在 Rational Application Developer 中,选择 File > New > Other,如图 1 所示。
图 1. 创建新的 portlet 项目
Rational Application Developer 文件菜单
Rational Application Developer 文件菜单
  1. Select a wizard 窗口中,选择 Portlet Project(如果您愿意,您可以在文本框中搜索向导),然后单击 Next,如图 2 所示。
图 2. 在 "Select a wizard" 窗口中选择 portlet 项目
创建一个新的 portlet 项目窗口
创建一个新的 portlet 项目窗口
  1. New Portlet Project 窗口将打开。在 Project name 文本框中,键入 Multilingual,指定 portlet 的特定详情,比如 Portlet name、Target runtime 等,然后单击 Finish
图 3. 创建名为 Multilingual 的 Portlet 项目
新的 portlet 项目设置
新的 portlet 项目设置

创建一个 ResourceBundle

每一个特定的语言类都需要一个包。为了创建包,在 Rational Application Developer 中:

  1. 右键单击 src 文件夹 (在 Java Resources 下)
  2. 选择 New 然后选择 Package,如图 4 所示。
图 4. 创建新包
New Package 窗口
New Package 窗口

New Java Package 窗口将打开。

  1. Name 文本字段中键入:com.teg.resources,如图 5 所示。
  2. 单击 Finish
图 5. 创建一个名为 com.teg.resources 的新包
新 java 包窗口
新 java 包窗口

创建一个类

接下来,您将为默认语言创建一个类。在 Rational Application Developer 中创建此新类:右键单击 package name > New > Class,如图 6 所示。

图 6. 在 com.teg.resources 包中创建一个新类
新建类菜单
新建类菜单

Java Class 窗口将打开。在 Name 文本字段中键入 MyProviderBundle,如图 7 所示,然后单击 Finish

图 7. 创建名为 MyProviderBundle 的新类
新建一个 java 类的窗口
新建一个 java 类的窗口

现在,复制并粘贴 清单 1 中的代码段到 MyProviderBundle.java。

清单 1. MyProviderBundle.java
package com.teg.resources;
import java.util.ListResourceBundle;
public class MyProviderBundle extends ListResourceBundle {
public static String WELCOME_MSG = "MyPortletHelloMessage";
public static String INFO_MSG = "MyPortletInfoMessage";
public Object[][] getContents() {
    return contents;
    }
static private final Object[][] contents = {
{WELCOME_MSG, "Hello"},
{INFO_MSG, "This is demo for Multilingual Portlet using WebSphere Portal"}
    };
}

注意
MyProviderBundle 类必须扩展 ListResourceBundle (java.util.ListResourceBundle),如清单 1 所示。

使用变量将语言特定的内容存储在 MyProviderBundle 类中。变量 WELCOME_MSG INFO_MSG 存储要显示在门户上的内容,如图 8 所示。

图 8. 默认语言的资源包类
MyProviderBundle java
MyProviderBundle java

创建语言特定的资源包

为了创建语言特定的资源包,您需要创建一个类(就像 前面 所做的那样)。将该类命名为 MyProviderBundle_<lang>,其中 <lang> 代表语言。

图 9 显示了为法语创建的语言特定的资源包 MyProviderBundle_fr 类。对应的法语内容被分配给变量 WELCOME_MSGINFO_MSG

图 9. 语言特定的资源包类
MyProviderBundle_fr java
MyProviderBundle_fr java

清单 2 中提供了 MyProviderBundle_fr.java 的代码。

清单 2. MyProviderBundle_fr.java
package com.teg.resources;

import java.util.ListResourceBundle;

public class MyProviderBundle_fr extends ListResourceBundle {
public Object[][] getContents() {
    return contents;
    }
static private final Object[][] contents = {
{MyProviderBundle.WELCOME_MSG, "Bonjour"},
{MyProviderBundle.INFO_MSG, "C'estdémo pour portletmultilingueutilisant WebSphere Portal."}
    };
}

您也可以为 portlet 需要支持的所有区域设置创建 ResourceBundle 类。在 portlet.xml 中定义了 WebSphere Portal 支持的默认区域设置。

Rational Application Developer 中的 Portlet 包结构

Rational Application Developer 中 portlet 项目的结构如图 10 所示。展开 com.teg.resources 包,查看已创建的资源包。

图 10. Rational Application Developer 中的 Portlet 包结构
已创建的资源包
已创建的资源包

在 JSP 中使用 ResourceBundle

在创建 ResourceBundle 之后您将需要使用在类文件中声明的变量,在 JSP(MultilingualView.jsp)中显示语言特定的内容。如图 11 所示。

renderRequestobject 获得 JSP 中的区域设置。区域设置基于下列内容(按顺序):

  • 在 URL 中编码的区域设置
  • 用户首选项
  • 接受语言的标题
  • 默认服务器端设置

例如:如果在配置时将西班牙语选择为语言,然后,即使浏览器发送法语作为语言,门户也将返回西班牙语的内容。这是因为用户首选项具有比浏览器(接受语言)更高的优先级。

图 11. 在 JSP 中使用资源包
代码编辑器中清单 3 的截屏
代码编辑器中清单 3 的截屏

MultiLingualPortletView.jsp 的源视图中的代码如图 3 所示。

清单 3. MultilingualPortletView.jsp
<%@page session="false" contentType="text/html" pageEncoding="ISO-8859-1" 
import="java.util.*,javax.portlet.*,com.teg.multilingual.*"%>
<%@ tagliburi="http://java.sun.com/portlet_2_0" prefix="portlet"%>
<portlet:defineObjects/>
<DIV style="margin:6px">
<h1>MultiLingualPortlet</h1>
<p>
<% ResourceBundlerb = ResourceBundle.getBundle("com.teg.resources.MyProviderBundle",
renderRequest.getLocale());%>
<b><%= rb.getString(com.teg.resources.MyProviderBundle.WELCOME_MSG) %></b>&nbsp; 
<%= rb.getString(com.teg.resources.MyProviderBundle.INFO_MSG) %>
</p>
</DIV>

查看多语种 portlet

当 portlet 被部署在 WebSphere Portal 上并被添加到页面之后(对于不支持的语言和默认语言),内容以默认语言(在本例中为英语)出现在 portlet 上。

图 12. portlet 含默认语言的内容
Hello This is a demo for multilingual portlet
Hello This is a demo for multilingual portlet

在设置中,将浏览器或用户首选项的语言更改为法语,然后刷新页面。图 13 显示,portlet 显示了法语的内容。

图 13. 法语的门户内容
与图 12 的消息相同,但使用法语
与图 12 的消息相同,但使用法语

结束语

本文介绍了如何使用 IBM Rational Application Developer 来为 IBM WebSphere Portal 开发多语种 portlet。到目前为止,我已经发现,ResourceBundle 是构建多语种门户的最简单方法。

致谢

我想感谢 Tata Consultancy Services 的 IBM 社交商务品牌主管 Pankaj Bose 和高级开发人员 Sushree Puhan,他们在我编写这篇文章提供了指导和支持。


下载资源


相关主题


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Rational
ArticleID=1006777
ArticleTitle=用 Rational Application Developer 开发多语种 portlet
publish-date=05252015