Internationalisation dans le JSF, quand utiliser le paquet de messages et le paquet de ressources?
quand et comment utiliser <resource-bundle>
et <message-bundle>
pour la localisation dans faces-config.xml
? Les différences entre ces deux-là ne sont pas très clair pour moi.
1 réponses
le <message-bundle>
doit être utilisé chaque fois que vous voulez outrepasser les messages d'avertissement/d'erreur JSF par défaut qui est utilisé par les trucs 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
paquet comme ci-dessous qui l'emporte sur le message par défaut 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
peut être configuré comme suit (sans le spécificateur de localisation _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 voulez enregistrer un ensemble de ressources localisées qui est disponible dans l'ensemble Application JSF sans la nécessité de spécifier <f:loadBundle>
dans chaque vue.
par exemple, Text_xx_XX.properties
fichiers dans com.example.i18n
paquet 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 localisation _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 (Jsr303 Bean Validation)
depuis Java EE 6 / JSF 2, Il y a aussi la nouvelle API de Validation Bean JSR303 qui est représentée par @NotNull
, Size
, @Max
, etc annotations of the javax.validation.constraints
package. Vous devez comprendre que cette API est complètement sans rapport avec JSF. Il est ne fait pas partie de JSF, mais JSF se trouve juste avoir support pour lui 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) et lui délègue ensuite la validation (qui peut être désactivée en utilisant <f:validateBean disabled="true"/>
, soit dit en passant).
selon le chapitre 4.3.1.1 de la spécification JSR303 , le fichier de messages de validation custom jsr303 doit avoir exactement le nom ValidationMessages_xx_XX.properties
et il doit être placé dans la racine du chemin de classe (donc, pas dans un paquet!).
localisation
dans les exemples ci-dessus, le _xx_XX
dans le nom du fichier représente la langue (facultative) et les codes de pays. Si cela est complètement absent, alors il devient le paquet par défaut (fallback). Si la langue est présente, par exemple _en
, alors il sera utilisé lorsque le client aura explicitement demandé cette langue dans l'en-tête de requête HTTP Accept-Language
. Il en va de même pour le pays, par exemple _en_US
ou _en_GB
.
vous pouvez spécifier les locales supportées à la fois pour le message et le faisceau 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>
la localisation désirée doit être réglée via <f:view locale>
. Voir aussi de Localisation dans le JSF, façon de rappeler les paramètres régionaux sélectionnés par session au lieu de par demande/view .