在JSF中为完整的HTML页面进行国际化的正确方法?

时间:2011-06-27 19:27:12

标签: jsf internationalization

我有一个JSF2应用程序,到目前为止,我正在以一种典型的方式使用消息资源包进行国际化;例如:

<f:view contentType="text/html" locale="#{loginHandler.currentLocale}">

<f:loadBundle basename="MessageResource" var="msg" />

<h:outputText value="#{msg.user_firstNameLabel}" />

我的问题是我有一个信息页面,其中包含两种语言的内容段落。我不想在页面上取每一行文本,并在消息属性文件中将它们作为键值。

如果内容是两个html文件;说contactus_en.html和contactus_fr.html,根据当前区域设置显示正确语言的正确方法是什么?

谢谢! 罗布

1 个答案:

答案 0 :(得分:3)

执行您要求的最简单方法是创建一个控制器,该控制器将读取HTML文件的内容并按需返回。在这种情况下,您可以使用非常简单的声明从JSF页面写出来:

<h:outputText escape="false" value="#{yourController.contactus}" />

由于您要阅读HTML文件的内容,您需要告诉JSF不要逃避它们(因此escape =“false”)。
当然,您的控制器需要提供名为getContactus()的方法,该方法应该读取您感兴趣的HTML文件的内容并将它们作为String返回。我相信你可以轻松应对它:)


修改 - 添加有关如何选择文件的信息。

如果你的HTML文件依赖于语言环境,那么它们已经是双语的,但英语和法语不同,你可以从UIViewRoot轻松获取当前视图Locale:

Locale currentLocale = FacesContext.getCurrentInstance().getViewRoot().getLocale();
String fileName = "contactus_" + currentLocale.toString() + ".html";