【IT168 技术文档】
本文说明了如何使用 Servlet 筛选器来基于业务规则确定区域设置,以及如何对传入请求使用此区域设置。首先,我们将看看 IBM WebSphere Portal V5.1.0.1(以下称为 WebSphere Portal)所使用的区域设置选择算法。然后,我们将说明如何强制 WebSphere Portal 使用通过业务规则选择的区域设置。
例如,您有一个业务要求,需让 URL 采用 http://hostname/sitename/us/en 形式,其中 us 是国家代码,en 是语言代码,即您希望使用 en_US 区域设置显示结果页。类似地,如果 URL 为 http://hostname/sitename/ca/en,则表明希望使用 en_CA 区域设置显示该页。在这种情况下,区域设置编码在 URL 标记中,您可以使用本文描述的技术确定区域设置,并对请求使用此区域设置。
或者,假定您有一个业务要求,需使用没有导航状态的初始 URL。您需要使用用户的首选区域设置显示结果页。如果用户已登录,则使用用户概要中指定的区域设置。如果用户未登录,则要使用浏览器中设置的语言首选项。您可以使用此处描述的技术来应用业务规则,以确定区域设置。
WebSphere Portal 的区域设置选择
为了确定请求的区域设置,WebSphere Portal 将按照以下顺序从三个位置检索区域设置:
从门户 URL 的导航状态。
从用户概要(如果请求是由经过身份验证的用户发出的)。
从 Accept-Language 请求 Header(其中包含在浏览器语言首选项中设置的语言)。
有关详细消息,请参见参考资料,以获得指向 WebSphere Portal 信息中心的 Selecting and changing the language section 的链接。
WebSphere Portal 将使用上面检索到的区域设置为每个传入请求构建一个列表,将使用此列表中的第一个区域设置作为请求的区域设置。将按照以下所示的方式构建列表:
检索到区域设置时,门户将检查 WebSphere Portal 是否支持此区域设置和语言变体。如果某个区域设置仅有语言代码,且语言代码与另一个区域设置相同,则将第一个区域设置称为第二个区域设置的语言变体。在下面的示例中,en_US 是区域设置,而 en 是语言变体。
如果受支持,区域设置和语言变体将添加到该请求的区域设置列表中。例如,假定 en_US 是从用户概要检索到的区域设置。如果 en_US 和 en 是受支持的区域设置,将首先添加 en_US,然后还会向列表中添加 en。
如果遍历了所有检索到的区域设置后,该列表为空,则会将门户缺省区域设置添加到列表中。缺省情况下,缺省区域设置被设置为 en。
要更改门户缺省区域设置,请在 <PortalInstallDir>/shared/app/config/services/LocalizerService.properties 文件中修改以下属性:
locale.default.language=en locale.default.country = locale.default.variant =
有关受支持的区域设置的完整列表,请参见文件 <Portal Install Dir>/shared/app/config/language.properties。
WebSphere Portal 支持 19 种即时可用的区域设置。如果您的应用程序需要支持其他区域设置,请将其添加到 language.properties 文件,同时请确保不存在两个属性名称相同的情况。
为请求设置区域设置
现在您已经了解了 WebSphere Portal 如何为请求选择区域设置,接下来将了解如何基于业务规则设置请求的区域设置。第一个方法是在传入请求 URL 的导航状态中设置区域设置。不过,WebSphere Portal 5.1.0.1 并未提供进行此工作的公共 API。第二种方法(也是最好的方法)是在 Accept-Language 请求 Header 中设置区域设置。不过,对于经过身份验证的请求(即用户已登录),WebSphere Portal 将使用从用户概要获得的区域设置。因此,如果您可以确保从用户的概要返回空区域设置,则 WebSphere Portal 必须使用其从请求 Header 获得的区域设置。
显然,应用程序需要在 WebSphere Portal 处理请求 Header 前对其进行更新。Java Servlet 2.3 规范中提供了此类工具;您可以使用 Servlet 筛选器和请求包装来完成此任务。
在本文的剩下部分,您将了解如何进行以下工作:
开发请求包装来在 Accept-Language 请求 Header 中设置区域设置(在下一步中确定)。
开发和安装 Servlet 筛选器来执行业务逻辑,从而为请求确定区域设置。
配置门户,以使其在处理经过身份验证的请求时不会从用户概要获取区域设置。