web-dev-qa-db-fra.com

Internationalisation dans JSF, quand utiliser le bundle de messages et le bundle de ressources?

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.

82
jsfQ

<message-bundle>

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>

<resource-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>

ValidationMessages (validation du bean JSR303)

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!).


Localisation

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 .

145
BalusC