Quand et comment dois-je utiliser les balises <resource-bundle>
et <message-bundle>
pour la localisation dans faces-config.xml
? Les différences entre ces deux éléments ne me sont pas très claires.
Quand et comment dois-je utiliser les balises <resource-bundle>
et <message-bundle>
pour la localisation dans faces-config.xml
? Les différences entre ces deux éléments ne me sont pas très claires.
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 au chapitre 2.5.2.4 de la spécification JSF .
Par exemple, les Messages_xx_XX.properties
fichiers dans le com.example.i18n
package comme ci-dessous qui remplacent le required="true"
message par défaut :
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ées qui est disponible dans toute l'application JSF sans qu'il soit nécessaire de le spécifier <f:loadBundle>
dans chaque vue.
Par exemple, les Text_xx_XX.properties
fichiers dans le 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é 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 JSR303 Bean qui est représenté par ceux @NotNull
, Size
, @Max
, etc annotations du javax.validation.constraints
paquet. Vous devez comprendre que cette API n'a aucun rapport avec JSF. Il ne fait pas partie de JSF, mais JSF est juste pris en charge pendant la phase de validation. C'est-à-dire qu'il détermine et reconnaît la présence d'une implémentation JSR303 (par exemple Hibernate Validator) et lui délègue ensuite la validation (qui peut être désactivée en utilisant <f:validateBean disabled="true"/>
, d'ailleurs).
Conformément au chapitre 4.3.1.1 de la spécification JSR303 , 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 package!).
Dans les exemples ci-dessus, le _xx_XX
dans le nom de fichier représente la langue (facultative) et les codes de pays. Si cela est complètement absent, il devient le bundle par défaut (de secours). Si la langue est présente, par exemple _en
, elle sera utilisée lorsque le client a explicitement demandé cette langue dans l' Accept-Language
en-tête de la requête HTTP. Il en va de même pour le pays, par exemple _en_US
ou _en_GB
.
Vous pouvez spécifier les paramètres régionaux pris en charge pour le message et le groupe de ressources de manière générique dans l' <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 dans JSF, comment se souvenir des paramètres régionaux sélectionnés par session au lieu de par demande / vue .