gpt4 book ai didi

jsf - JSF国际化,什么时候使用message-bundle和resource-bundle?

转载 作者:行者123 更新时间:2023-12-01 21:58:16 24 4
gpt4 key购买 nike

我应该何时以及如何使用<resource-bundle><message-bundle> faces-config.xml 中的本地化标签?我不太清楚这两者之间的区别。

最佳答案

<消息包>

<message-bundle>每当您想要覆盖 JSF 验证/转换内容所使用的 JSF 默认警告/错误消息时,就可以使用它。您可以在 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>
<小时/>

<资源包>

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

例如,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 验证 API,由 @NotNull 表示。 , Size , @Max javax.validation.constraints 的注释包裹。您应该了解此 API 与 JSF 完全无关。它不是 JSF 的一部分,但 JSF 恰好在验证阶段支持它。 IE。它确定并识别 JSR303 实现(例如 Hibernate Validator)的存在,然后将验证委托(delegate)给它(顺便说一句,可以使用 <f:validateBean disabled="true"/> 禁用它)。

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

<小时/>

本地化

在上面的示例中,_xx_XX文件名中代表(可选)语言和国家/地区代码。如果完全不存在,那么它将成为默认(后备) bundle 。如果存在该语言,例如_en ,那么当客户端在 Accept-Language 中明确请求使用这种语言时,就会使用它。 HTTP 请求 header 。这同样适用于国家,例如_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> 设置所需的区域设置。另请参阅Localization in JSF, how to remember selected locale per session instead of per request/view .

关于jsf - JSF国际化,什么时候使用message-bundle和resource-bundle?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2668161/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com