Quand devrais-je utiliser les balises <resource-bundle>
et <message-bundle>
pour la localisation en faces-config.xml
? Les différences entre ces deux ne me sont pas très claires.
Réponse
Trop de publicités?<message-bundle>
L' <message-bundle>
doit être utilisé chaque fois que vous voulez remplacer JSF par défaut messages d'avertissement/erreur qui est été utilisé par le programme JSF/validation de la conversion des trucs.
Vous pouvez trouver les clés de la valeur par défaut messages d'avertissement/erreur dans le chapitre 2.5.2.4 de la spécification JSF.
Par exemple, un Messages_xx_XX.properties
en com.example.i18n
package avec l'entrée suivante qui remplace la valeur par défaut required="true"
message:
javax.faces.component.UIInput.REQUIRED = {0}: Please enter value
peut être configuré comme suit (sans les paramètres régionaux du spécificateur _xx_XX
et de l'extension de fichier!):
<message-bundle>com.example.i18n.Messages</message-bundle>
<resource-bundle>
L' <resource-bundle>
doit être utilisé chaque fois que vous voulez vous inscrire à une ressource localisée bundle est disponible gratuitement dans tout l'ensemble de la JSF application sans avoir besoin de spécifier <f:loadBundle>
dans chaque vue.
Par exemple, un Text_xx_XX.properties
en com.example.i18n
package avec les entrées suivantes:
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
peut être configuré comme suit (sans les paramètres régionaux du spécificateur _xx_XX
et de l'extension de fichier!):
<resource-bundle>
<base-name>com.example.i18n.Text</base-name>
<var>text</var>
</resource-bundle>
et être utilisés en 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 JSR303 Bean Validation de l'API qui est représenté par ceux - @NotNull
, Size
, @Max
, etc annotations de l' javax.validation.constraints
package. Vous devez comprendre que cette API est complètement étrangère à JSF. Il ne fait pas partie de la JSF, mais JSF arrive juste à avoir le soutien lors des validations de phase. I. e. il détermine et reconnaît la présence d'un JSR303 de mise en œuvre (par exemple, Hibernate Validator) et puis les délégués de la validation (qui peut être désactivé à l'aide de <f:validateBean disabled="true"/>
, par la voie).
Comme par chapitre 4.3.1.1 de la JSR303 spécification, la coutume JSR303 les messages de validation de fichier doit avoir exactement le nom de l' ValidationMessages_xx_XX.properties
et il doit être placé dans la racine du classpath (donc, pas dans un paquet!).
Localisation
Dans les exemples ci-dessus, l' _xx_XX
dans le nom de fichier représente l' (facultatif) langue et des codes de pays. Si c'est complètement absentes, alors il devient la valeur par défaut (de secours) bundle. Si la langue est présente, par exemple, _en
, alors il sera utilisé lorsque le client a expressément demandé pour cette langue dans l' Accept-Language
- tête de requête HTTP. La même chose s'applique pour le pays, par exemple, _en_US
ou _en_GB
.
Vous pouvez spécifier les paramètres régionaux pris en charge pour à la fois le message et le regroupement de ressources de manière générique, en <locale-config>
élément d' faces-config.xml
.
<locale-config>
<default-locale>en</default-locale>
<supported-locale>en</supported-locale>
<supported-locale>de</supported-locale>
<supported-locale>es</supported-locale>
<supported-locale>fr</supported-locale>
</locale-config>