JSF/Faces 中的国际化,何时使用消息包、资源包和 ValidationMessages?

问题描述 投票:0回答:1

我应该何时以及如何使用

<resource-bundle>
<message-bundle>
标签在
faces-config.xml
中进行本地化?我不太清楚这两者之间的区别。

jsf localization internationalization
1个回答
154
投票

只要您想要覆盖 Jakarta Faces 验证/转换内容所使用的默认警告/错误消息,就可以使用

<message-bundle>
。 您可以在 Jakarta Faces 规范的第 2.5.2.4 章“本地化应用程序消息”中找到默认警告/错误消息的键。它们都有 jakarta.faces
 前缀。

例如,

Messages_xx_XX.properties

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

com/example/i18n/Messages_en.properties


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

com/example/i18n/Messages_nl.properties


jakarta.faces.component.UIInput.REQUIRED = {0}: Dit veld is vereist
可以按如下方式配置(没有区域设置说明符 

_xx_XX

 和文件扩展名!):

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


每当您想要注册可在整个 Faces 应用程序中使用的本地化资源包时,就可以使用

<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>


验证消息(雅加达验证)

从 Java EE 6 / JSF 2 开始,还有 Jakarta Validation API(以前称为 JSR303 Bean Validation),由

@NotNull
 包的 
Size
@Max
jakarta.validation.constraints
等注释表示。您应该了解此 API 与 Jakarta Faces
完全无关。它不是 Faces 的一部分,但 Faces 恰好在验证阶段为其提供支持。 IE。它确定并识别 Jakarta Validation 实现(例如 Hibernate Validator)的存在,然后将验证委托给它(顺便说一句,可以使用 <f:validateBean disabled="true"/>
 禁用它)。

根据 Jakarta 验证规范第 6.3.1.1 章“默认消息插值算法”

,自定义 Jakarta 验证消息文件需要具有 exactly 名称 ValidationMessages_xx_XX.properties 并且需要将其放置在 的

root
中类路径(因此,不在包中!)。

本地化

在上面的示例中,文件名中的

_xx_XX

代表(可选)语言和国家/地区代码。如果完全不存在,那么它将成为默认(后备)捆绑包。如果存在该语言,例如

_en
,那么当客户端在
Accept-Language
 HTTP 请求标头中明确请求该语言时,就会使用它。这同样适用于国家,例如
_en_US
_en_GB
您可以在 

<locale-config>

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>

需要通过 
<f:view locale>

设置所需的区域设置。另请参阅

JSF 中的本地化,如何记住每个会话而不是每个请求/视图选择的区域设置

© www.soinside.com 2019 - 2024. All rights reserved.