我有一个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,根据当前区域设置显示正确语言的正确方法是什么?
谢谢! 罗布
答案 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";