loadbundle - Internacionalización en JSF, ¿cuándo usar el paquete de mensajes y el paquete de recursos?
message properties jsf (1)
<message-bundle>
El <message-bundle>
se utilizará siempre que desee anular los mensajes de advertencia / error predeterminados de JSF, que han sido utilizados por las funciones de validación / conversión de JSF. Puede encontrar las claves de los mensajes de advertencia / error predeterminados en el capítulo 2.5.2.4 de la especificación JSF .
Por ejemplo, los archivos Messages_xx_XX.properties
en el paquete com.example.i18n
como se muestra a continuación reemplazan el mensaje required="true"
defecto 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
se puede configurar de la siguiente manera (sin el especificador de configuración regional _xx_XX
y la extensión de archivo):
<message-bundle>com.example.i18n.Messages</message-bundle>
<resource-bundle>
El <resource-bundle>
se utilizará siempre que desee registrar un paquete de recursos localizado que esté disponible en toda la aplicación JSF sin la necesidad de especificar <f:loadBundle>
en cada vista.
Por ejemplo, los archivos com.example.i18n
en el paquete com.example.i18n
siguiente manera:
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
se puede configurar de la siguiente manera (sin el especificador de configuración regional _xx_XX
y la extensión de archivo):
<resource-bundle>
<base-name>com.example.i18n.Text</base-name>
<var>text</var>
</resource-bundle>
y se usará en main.xhtml
siguiente manera:
<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 Validation)
Desde Java EE 6 / JSF 2, también existe la nueva API JSR303 Bean Validation que está representada por las @NotNull
, Size
, @Max
, etc. del paquete javax.validation.constraints
. Debe comprender que esta API no tiene relación con JSF. No es parte de JSF, pero JSF tiene soporte para él durante la fase de validación. Es decir, determina y reconoce la presencia de una implementación JSR303 (por ejemplo, Hibernate Validator) y luego le delega la validación (que puede ser desactivada usando <f:validateBean disabled="true"/>
, por cierto).
Según el capítulo 4.3.1.1 de la especificación JSR303 , el archivo personalizado de mensajes de validación JSR303 debe tener exactamente el nombre ValidationMessages_xx_XX.properties
y debe colocarse en la raíz del classpath (¡por lo tanto, no en un paquete!).
Localización
En los ejemplos anteriores, _xx_XX
en el nombre de archivo representa el idioma (opcional) y los códigos de país. Si esto está ausente del todo, entonces se convierte en el paquete predeterminado (de respaldo). Si el idioma está presente, por ejemplo, _en
, se usará cuando el cliente haya solicitado explícitamente este idioma en el encabezado de solicitud HTTP Accept-Language
. Lo mismo se aplica al país, por ejemplo, _en_US
o _en_GB
.
Puede especificar las configuraciones regionales admitidas para el paquete de mensajes y recursos genéricamente en el elemento <locale-config>
de 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>
La configuración regional deseada debe configurarse a través de <f:view locale>
. Consulte también Localización en JSF, cómo recordar la configuración regional seleccionada por sesión en lugar de por solicitud / vista .
¿Cuándo y cómo debo usar las etiquetas <resource-bundle>
y <message-bundle>
para la localización en faces-config.xml
? Las diferencias entre esos dos no son muy claras para mí.