何时以及如何在<resource-bundle>
中使用<message-bundle>
和faces-config.xml
标记进行本地化?这两者之间的差异对我来说不是很清楚。
答案 0 :(得分:143)
只要您想覆盖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>
只要您想要注册整个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>
自Java EE 6 / JSF 2以来,还有新的JSR303 Bean Validation API,由@NotNull
,Size
,@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
。