JSF 中的国际化,何时使用消息包和资源包? [英] Internationalization in JSF, when to use message-bundle and resource-bundle?

查看:15
本文介绍了JSF 中的国际化,何时使用消息包和资源包?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我应该何时以及如何在 faces-config.xml 中使用 <resource-bundle><message-bundle> 标签进行本地化代码>?这两者之间的区别对我来说不是很清楚.

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>


<资源包>

<resource-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文件如下:

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


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 并且需要放置在类路径的 root 中(因此,不在包中!).

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 元素中为消息包和资源包指定支持的语言环境.

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>

需要通过 <f:view locale> 设置所需的语言环境.另请参阅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 中的国际化,何时使用消息包和资源包?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆