强制JSF应用程序为i18n使用服务器端语言环境

时间:2015-03-13 08:05:29

标签: java tomcat internationalization jsf-1.2

最近,我开始为JSF 1.2网络应用程序制作i18n。 实际上,目前我们只需要两个语言环境,并且将在具有相同代码库的不同服务器上部署和配置Web应用程序实例。

使用JAVA_OPTS在tomcat(catalina.bat)中的JVM级别指定Locale,如下所示:

-Duser.language=en -Duser.region=US

我们可以在faces-config.xml中指定默认和支持的语言环境,如下所示:

<locale-config>
    <default-locale>en_US</default-locale>
    <supported-locale>en_GB</supported-locale>
</locale-config>

但是这个配置将使用客户端浏览器特定的语言环境而不是服务器默认语言环境(我们现在真正需要的是什么)。

所以我在考虑以编程方式指定语言环境。我首先想到的是:

FacesContext.getCurrentInstance().getViewRoot().setLocale(Locale.getDefault());

但如果我理解正确,这种方式只会为当前用户对webapp的请求设置区域设置。

现在我正在考虑两种方式:

  1. 在成功用户登录后使用FacesContext设置区域设置;
  2. 在Web应用程序的开头指定区域设置配置(不是     确定如何在JSF中执行此操作。
  3. 在应用程序级别有没有更好的方法为FacesContext programmaticaly配置语言环境?

    谢谢,

    尤里

1 个答案:

答案 0 :(得分:0)

为避免拉扯头发,请使用以下方法:

https://stackoverflow.com/a/12079507/1049870

我曾经重写 PhaseListener 实现我自己的:

<image id="unique_image_id" type="image">
    <width>200</width> <!-- Image width in px -->
    <height>200</height> <!-- Image height in px -->
</image>
 </images>


您可以创建更智能的方法。
但请记住,这段代码几乎没有被调用。
从环境变量中读取这个值是最好的选择。