转载

用 Rational Application Developer 开发多语种 portlet

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 开发多语种 portlet

点击查看大图

关闭 [x]

图 1. 创建新的 portlet 项目

用 Rational Application Developer 开发多语种 portlet

  1. Select a wizard 窗口中,选择 Portlet Project (如果您愿意,您可以 在文本框中搜索向导), 然后单击 Next ,如图 2 所示。

图 2. 在 "Select a wizard" 窗口中选择 portlet 项目

用 Rational Application Developer 开发多语种 portlet

点击查看大图

关闭 [x]

图 2. 在 "Select a wizard" 窗口中选择 portlet 项目

用 Rational Application Developer 开发多语种 portlet

  1. New Portlet Project 窗口将打开。在 Project name 文本框中,键入 Multilingual ,指定 portlet 的特定详情,比如 Portlet name、Target runtime 等,然后单击 Finish

图 3. 创建名为 Multilingual 的 Portlet 项目

用 Rational Application Developer 开发多语种 portlet

点击查看大图

关闭 [x]

图 3. 创建名为 Multilingual 的 Portlet 项目

用 Rational Application Developer 开发多语种 portlet

创建一个 ResourceBundle

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

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

图 4. 创建新包

用 Rational Application Developer 开发多语种 portlet

点击查看大图

关闭 [x]

图 4. 创建新包

用 Rational Application Developer 开发多语种 portlet

New Java Package 窗口将打开。

  1. Name 文本字段中键入:com.teg.resources,如图 5 所示。
  2. 单击 Finish

图 5. 创建一个名为 com.teg.resources 的新包

用 Rational Application Developer 开发多语种 portlet

点击查看大图

关闭 [x]

图 5. 创建一个名为 com.teg.resources 的新包

用 Rational Application Developer 开发多语种 portlet

创建一个类

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

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

用 Rational Application Developer 开发多语种 portlet

点击查看大图

关闭 [x]

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

用 Rational Application Developer 开发多语种 portlet

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

图 7. 创建名为 MyProviderBundle 的新类

用 Rational Application Developer 开发多语种 portlet

点击查看大图

关闭 [x]

图 7. 创建名为 MyProviderBundle 的新类

用 Rational Application Developer 开发多语种 portlet

现在,复制并粘贴 清单 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_MSGINFO_MSG 存储要显示在门户上的内容,如图 8 所示。

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

用 Rational Application Developer 开发多语种 portlet

点击查看大图

关闭 [x]

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

用 Rational Application Developer 开发多语种 portlet

创建语言特定的资源包

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

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

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

用 Rational Application Developer 开发多语种 portlet

点击查看大图

关闭 [x]

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

用 Rational Application Developer 开发多语种 portlet

清单 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 包结构

用 Rational Application Developer 开发多语种 portlet

在 JSP 中使用 ResourceBundle

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

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

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

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

图 11. 在 JSP 中使用资源包

用 Rational Application Developer 开发多语种 portlet

点击查看大图

关闭 [x]

图 11. 在 JSP 中使用资源包

用 Rational Application Developer 开发多语种 portlet

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>   <%= rb.getString(com.teg.resources.MyProviderBundle.INFO_MSG) %> </p> </DIV>

回页首

查看多语种 portlet

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

图 12. portlet 含默认语言的内容

用 Rational Application Developer 开发多语种 portlet

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

图 13. 法语的门户内容

用 Rational Application Developer 开发多语种 portlet

回页首

结束语

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

回页首

致谢

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

回页首

下载

描述 名字 大小
Archive file MultiLingual.zip 13KB
正文到此结束
Loading...