¿Cuándo y cómo debo utilizar 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í.
Respuestas:
Se <message-bundle>
debe usar siempre que desee anular los mensajes de error / advertencia predeterminados de JSF que han sido utilizados por la validación / conversión de JSF. Puede encontrar claves de los mensajes de error / advertencia predeterminados en el capítulo 2.5.2.4 de la especificación JSF .
Por ejemplo, Messages_xx_XX.properties
archivos en el com.example.i18n
paquete como se muestra a continuación, que anula el required="true"
mensaje predeterminado :
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 del archivo):
<message-bundle>com.example.i18n.Messages</message-bundle>
Se <resource-bundle>
debe usar 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, Text_xx_XX.properties
archivos en el com.example.i18n
paquete como se muestra a continuación:
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 del archivo):
<resource-bundle>
<base-name>com.example.i18n.Text</base-name>
<var>text</var>
</resource-bundle>
y utilizarse de la 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>
Desde Java EE 6 / JSF 2, hay también la nueva API JSR303 Bean Validation que está representado por aquellos @NotNull
, Size
, @Max
, etc anotaciones del javax.validation.constraints
paquete. Debe comprender que esta API no tiene ninguna relación con JSF. No es parte de JSF, pero JSF simplemente tiene soporte 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 se puede deshabilitar usando <f:validateBean disabled="true"/>
, por cierto).
Según el capítulo 4.3.1.1 de la especificación JSR303 , el archivo de mensajes de validación JSR303 personalizado debe tener exactamente el nombre ValidationMessages_xx_XX.properties
y debe colocarse en la raíz de la ruta de clase (por lo tanto, ¡no en un paquete!).
En los ejemplos anteriores, _xx_XX
en el nombre del archivo representa el idioma (opcional) y los códigos de país. Si esto está completamente ausente, se convierte en el paquete predeterminado (de reserva). Si el idioma está presente, por ejemplo _en
, se usará cuando el cliente haya solicitado explícitamente este idioma en el Accept-Language
encabezado de la solicitud HTTP. Lo mismo se aplica al país, por ejemplo, _en_US
o _en_GB
.
Puede especificar las configuraciones regionales admitidas para el mensaje y el paquete de recursos de forma genérica en el <locale-config>
elemento 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 establecerse mediante <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 .