Quand et comment dois-je utiliser <resource-bundle>
et <message-bundle>
balises pour la localisation dans faces-config.xml
? Les différences entre ces deux ne sont pas très claires pour moi.
Le <message-bundle>
doit être utilisé chaque fois que vous souhaitez remplacer les messages d'avertissement/d'erreur par défaut JSF qui ont été utilisés par les éléments de validation/conversion JSF. Vous pouvez trouver les clés des messages d'avertissement/d'erreur par défaut dans le chapitre 2.5.2.4 de la spécification JSF .
Par exemple, Messages_xx_XX.properties
fichiers dans com.example.i18n
package comme ci-dessous qui remplace la valeur par défaut 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
peut être configuré comme suit (sans le spécificateur de paramètres régionaux _xx_XX
et l'extension de fichier!):
<message-bundle>com.example.i18n.Messages</message-bundle>
Le <resource-bundle>
doit être utilisé chaque fois que vous souhaitez enregistrer un ensemble de ressources localisé qui est disponible dans l'ensemble de l'application JSF sans avoir à spécifier <f:loadBundle>
dans chaque vue.
Par exemple, Text_xx_XX.properties
fichiers dans com.example.i18n
package comme ci-dessous:
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
peut être configuré comme suit (sans le spécificateur de paramètres régionaux _xx_XX
et l'extension de fichier!):
<resource-bundle>
<base-name>com.example.i18n.Text</base-name>
<var>text</var>
</resource-bundle>
et être utilisé dans main.xhtml
comme suit:
<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>
Depuis Java EE 6/JSF 2, il y a aussi la nouvelle API de validation de bean JSR303 qui est représentée par ces @NotNull
, Size
, @Max
, etc annotations des javax.validation.constraints
package. Vous devez comprendre que cette API est complètement indépendante de JSF. Il ne fait pas partie de JSF, mais JSF se trouve juste avoir support pour cela pendant la phase de validation. C'est à dire. il détermine et reconnaît la présence d'une implémentation JSR303 (par exemple Hibernate Validator), puis lui délègue la validation (qui peut être désactivée en utilisant <f:validateBean disabled="true"/>
, au fait).
Conformément au chapitre 4.3.1.1 de la spécification JSR3 , le fichier de messages de validation JSR303 personnalisé doit avoir exactement le nom ValidationMessages_xx_XX.properties
et il doit être placé à la racine du chemin de classe (donc pas dans un paquet!).
Dans les exemples ci-dessus, le _xx_XX
dans le nom de fichier représente les codes de langue et de pays (facultatifs). Si cela est complètement absent, il devient le bundle par défaut (de secours). Si la langue est présente, par ex. _en
, il sera utilisé lorsque le client aura explicitement demandé cette langue dans le Accept-Language
En-tête de requête HTTP. Il en va de même pour le pays, par ex. _en_US
ou _en_GB
.
Vous pouvez spécifier les paramètres régionaux pris en charge pour le groupe de messages et de ressources de manière générique dans <locale-config>
élément 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>
Les paramètres régionaux souhaités doivent être définis via <f:view locale>
. Voir aussi Localisation en JSF, comment se souvenir des paramètres régionaux sélectionnés par session au lieu de par requête/vue .