JSF的国际化,何时使用消息包和资源包?

时间:2010-04-19 14:26:11

标签: jsf localization internationalization

何时以及如何在<resource-bundle>中使用<message-bundle>faces-config.xml标记进行本地化?这两者之间的差异对我来说不是很清楚。

1 个答案:

答案 0 :(得分:143)

&LT;消息束&GT;

只要您想覆盖JSF验证/转换内容使用的JSF默认警告/错误消息,就会使用<message-bundle>。 您可以在JSF specification的第2.5.2.4节中找到默认警告/错误消息的键。

例如,Messages_xx_XX.properties包中的com.example.i18n文件如下所示,它会覆盖默认的required="true"消息:

com/example/i18n/Messages_en.properties

javax.faces.component.UIInput.REQUIRED = {0}: This field is required

com/example/i18n/Messages_nl.properties

javax.faces.component.UIInput.REQUIRED = {0}: Dit veld is vereist

可以配置如下(没有语言环境说明符_xx_XX和文件扩展名!):

<message-bundle>com.example.i18n.Messages</message-bundle>

&LT;资源束&GT;

只要您想要注册整个JSF应用程序中可用的本地化资源包,就可以使用<resource-bundle>,而无需在每个视图中指定<f:loadBundle>

例如,Text_xx_XX.properties包中的com.example.i18n个文件如下:

com/example/i18n/Text_en.properties

main.title = Title of main page
main.head1 = Top heading of main page
main.form1.input1.label = Label of input1 of form1 of main page

com/example/i18n/Text_nl.properties

main.title = Titel van hoofd pagina
main.head1 = Bovenste kop van hoofd pagina
main.form1.input1.label = Label van input1 van form1 van hoofd pagina

可以配置如下(没有语言环境说明符_xx_XX和文件扩展名!):

<resource-bundle>
    <base-name>com.example.i18n.Text</base-name>
    <var>text</var>
</resource-bundle>

并在main.xhtml中使用如下:

<h:head>
    <title>#{text['main.title']}</title>
</h:head>
<h:body>
    <h1 id="head1">#{text['main.head1']}</h1>
    <h:form id="form1">
        <h:outputLabel for="input1" value="#{text['main.form1.input1.label']}" />
        <h:inputText id="input1" label="#{text['main.form1.input1.label']}" />
    </h:form>
</h:body>

ValidationMessages(JSR303 Bean验证)

自Java EE 6 / JSF 2以来,还有新的JSR303 Bean Validation API,由@NotNullSize@Max等{{3}注释表示。包。您应该了解此API与JSF 完全不相关。它不是JSF的一部分,但在验证阶段,JSF恰好有支持。即它确定并识别JSR303实现的存在(例如Hibernate Validator),然后将验证委托给它(顺便说一下,可以使用<f:validateBean disabled="true"/>禁用它。)

根据javax.validation.constraints的第4.3.1.1章,自定义JSR303验证消息文件需要完全名称ValidationMessages_xx_XX.properties,并且需要将其放在<类路径的strong> root (因此,不在包中!)。


本地化

在上面的示例中,文件名中的_xx_XX表示(可选)语言和国家/地区代码。如果完全不存在,则它将成为默认(回退)捆绑包。如果语言存在,例如_en,当客户端在JSR303 specification HTTP请求标头中明确请求此语言时,将使用它。这同样适用于该国家,例如_en_US_en_GB

您可以在<locale-config>的{​​{1}}元素中为消息和资源包指定支持的区域设置。

faces-config.xml

需要通过<locale-config> <default-locale>en</default-locale> <supported-locale>nl</supported-locale> <supported-locale>de</supported-locale> <supported-locale>es</supported-locale> <supported-locale>fr</supported-locale> </locale-config> 设置所需的区域设置。另请参阅Accept-Language