Internationalization jsf2.0中的国际化

Internationalization jsf2.0中的国际化,internationalization,jsf-2,Internationalization,Jsf 2,我想知道国际化在jsf中是如何工作的?我读过关于它的教程,但在我的例子中,它的工作原理略有不同。在那个教程中说我必须使用 FacesContext.getCurrentInstance().getViewRoot().setLocale(newLocale); 在actionListener(用于更改区域设置的侦听器)中,以及支持bean中,必须具有属性getCurrentLocale(),才能在标记中使用它 我有两个带有消息的属性文件(默认和指定区域设置),它们在faces config.x

我想知道国际化在jsf中是如何工作的?我读过关于它的教程,但在我的例子中,它的工作原理略有不同。在那个教程中说我必须使用

FacesContext.getCurrentInstance().getViewRoot().setLocale(newLocale);
在actionListener(用于更改区域设置的侦听器)中,以及支持bean中,必须具有属性
getCurrentLocale()
,才能在
标记中使用它

我有两个带有消息的属性文件(默认和指定区域设置),它们在
faces config.xml
中注册<代码>我只有一页的标签(index.xhtml)


...

我还有两个按钮(带有actionListener)用于每个区域设置。在backingbean中,我只需修改当前的语言环境变量(不要使用
getViewRoot().setLocale(newLocale)
)。但是所有页面的区域设置更改(即使它们没有

假设您有以下两个消息文件

    messages.properties
    messages_de.properties
设置应用程序区域设置
设置应用程序区域设置有三种方法,我认为这里需要第一种方法

1-您可以让浏览器选择区域设置。

WEB-INF/faces config.xml:

<faces-config>
   <application>
      <locale-config>
         <default-locale>en</default-locale>
         <supported-locale>de</supported-locale>
      </locale-config>
  </application>
</faces-config>
3-您可以为单个页面设置区域设置
通过使用带有locale属性的
f:view
元素,例如:

<f:view locale="de">
德语也有同样的意思

next=Weiter
您已经设置了区域设置并声明了mesg bundle,您可以访问它,将标签放在命令按钮上,如

<h:commandButton value="#{msgs.next}"/>


以上答案是从中提取和修改的

我想补充一点:在3。二,。指向您可以在template.xhtml中执行此操作,而不是为每个JSF页面执行此操作。
<f:view locale="#{user.locale}"/>
<?xml version="1.0"?>
<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
      http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
   version="2.0">
   <application>
      <resource-bundle>
         <base-name>com.corejsf.messages</base-name>
         <var>msgs</var>
      </resource-bundle>
   </application>
</faces-config>
<f:loadBundle basename="com.corejsf.messages" var="msgs"/>
next=Next
next=Weiter
<h:commandButton value="#{msgs.next}"/>