问题描述
我应该何时以及如何使用 和
标签在
faces-config.xml中进行本地化
代码>?我不太清楚这两者之间的区别.
When and how should I use <resource-bundle>
and <message-bundle>
tags for localization in faces-config.xml
? The differences between those two are not very clear to me.
推荐答案
<message-bundle>
将在您想要覆盖 JSF 验证/转换内容使用的 JSF 默认警告/错误消息时使用.您可以在 JSF 规范.
<message-bundle>
The <message-bundle>
is to be used whenever you want to override JSF default warning/error messages which is been used by the JSF validation/conversion stuff.You can find keys of the default warning/error messages in chapter 2.5.2.4 of the JSF specification.
例如,com.example.i18n
包中的 Messages_xx_XX.properties
文件如下,它覆盖了默认的 required="true"
留言:
For example, Messages_xx_XX.properties
files in com.example.i18n
package as below which overrides the default required="true"
message:
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
和文件扩展名!):
can be configured as follows (without the locale specifier _xx_XX
and the file extension!):
<message-bundle>com.example.i18n.Messages</message-bundle>
用于注册本地化资源包,该资源包可在整个 JSF 应用程序中使用,无需指定
<f:loadBundle>
在每个视图中.
<resource-bundle>
The <resource-bundle>
is to be used whenever you want to register a localized resource bundle which is available throughout the entire JSF application without the need to specify <f:loadBundle>
in every single view.
例如,com.example.i18n
包中的Text_xx_XX.properties
文件如下:
For example, Text_xx_XX.properties
files in com.example.i18n
package as below:
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
和文件扩展名!):
can be configured as follows (without the locale specifier _xx_XX
and the file extension!):
<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,由 @NotNull
、Size
、@Max表示code> 等
javax 的注解.validation.constraints
包.您应该了解此 API 与 JSF 完全无关.它不是 JSF 的一部分,但 JSF 恰好在验证阶段获得了支持.IE.它确定并识别 JSR303 实现(例如 Hibernate Validator)的存在,然后将验证委托给它(可以使用 ,顺便说一句).
ValidationMessages (JSR303 Bean Validation)
Since Java EE 6 / JSF 2, there's also the new JSR303 Bean Validation API which is represented by those @NotNull
, Size
, @Max
, etc annotations of the javax.validation.constraints
package. You should understand that this API is completely unrelated to JSF. It is not part of JSF, but JSF just happens to have support for it during validations phase. I.e. it determines and recognizes the presence of a JSR303 implementation (e.g. Hibernate Validator) and then delegates the validation to it (which can be disabled by using <f:validateBean disabled="true"/>
, by the way).
根据 JSR303 规范,自定义 JSR303 验证消息文件需要完全名称 ValidationMessages_xx_XX.properties
并且需要放置在类路径的根中(因此,不在包中!).
As per chapter 4.3.1.1 of the JSR303 specification, the custom JSR303 validation messages file needs to have exactly the name ValidationMessages_xx_XX.properties
and it needs to be placed in the root of the classpath (thus, not in a package!).
在上述示例中,文件名中的 _xx_XX
表示(可选)语言和国家/地区代码.如果这完全不存在,那么它就成为默认(回退)包.如果语言存在,例如_en
,然后当客户端在 Accept-Language
HTTP 请求标头.这同样适用于国家,例如_en_US
或 _en_GB
.
In the above examples, the _xx_XX
in the filename represents the (optional) language and country codes. If this is absent altogether, then it becomes the default (fallback) bundle. If the language is present, e.g. _en
, then it'll be used when the client has explicitly requested for this language in the Accept-Language
HTTP request header. The same applies to the country, e.g. _en_US
or _en_GB
.
您可以在 faces-config.xml
的 <locale-config>
元素中为消息和资源包指定支持的语言环境.
You can specify the supported locales for both the message and resource bundle generically in <locale-config>
element of 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>
需要通过 设置所需的语言环境.另请参阅JSF 中的本地化,如何记住每个会话而不是每个请求/视图选择的语言环境.
The desired locale needs to be set via <f:view locale>
. See also Localization in JSF, how to remember selected locale per session instead of per request/view.
这篇关于JSF 中的国际化,什么时候使用消息包和资源包?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!