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.

79
demandé sur BalusC 2010-04-19 18:26:10

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 .

139
répondu BalusC 2017-05-23 12:17:50