Kiedy i jak używać tagów <resource-bundle>
i <message-bundle>
do lokalizacji w faces-config.xml
? Różnice między tymi dwoma nie są dla mnie zbyt jasne.
Odpowiedzi:
Ma <message-bundle>
być używany za każdym razem, gdy chcesz zastąpić domyślne ostrzeżenia / komunikaty o błędach JSF, które są używane przez elementy sprawdzania poprawności / konwersji JSF. Klucze domyślnych komunikatów ostrzegawczych / komunikatów o błędach można znaleźć w rozdziale 2.5.2.4 specyfikacji JSF .
Na przykład Messages_xx_XX.properties
pliki w com.example.i18n
pakiecie jak poniżej, które zastępują domyślny required="true"
komunikat:
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
można skonfigurować w następujący sposób (bez specyfikatora ustawień regionalnych _xx_XX
i rozszerzenia pliku!):
<message-bundle>com.example.i18n.Messages</message-bundle>
Ma <resource-bundle>
być używany, gdy chcesz zarejestrować zlokalizowany pakiet zasobów, który jest dostępny w całej aplikacji JSF bez konieczności określania <f:loadBundle>
w każdym pojedynczym widoku.
Na przykład Text_xx_XX.properties
pliki w com.example.i18n
pakiecie jak poniżej:
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
można skonfigurować w następujący sposób (bez specyfikatora ustawień regionalnych _xx_XX
i rozszerzenia pliku!):
<resource-bundle>
<base-name>com.example.i18n.Text</base-name>
<var>text</var>
</resource-bundle>
i być używane w main.xhtml
następujący sposób:
<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>
Ponieważ Java EE 6 / JSF 2, jest również nowy API JSR303 Bean Validation który jest reprezentowany przez tych @NotNull
, Size
, @Max
itp adnotacji na javax.validation.constraints
opakowaniu. Należy zrozumieć, że ten interfejs API nie jest całkowicie powiązany z JSF. Nie jest częścią JSF, ale JSF po prostu obsługuje go na etapie walidacji. Oznacza to, że określa i rozpoznaje obecność implementacji JSR303 (np. Hibernate Validator), a następnie deleguje do niej walidację (którą można wyłączyć <f:validateBean disabled="true"/>
, przy okazji).
Zgodnie z rozdziałem 4.3.1.1 specyfikacji JSR303 , niestandardowy plik komunikatów walidacyjnych JSR303 musi mieć dokładnie taką nazwę ValidationMessages_xx_XX.properties
i musi być umieszczony w katalogu głównym ścieżki klas (a więc nie w pakiecie!).
W powyższych przykładach znak _xx_XX
w nazwie pliku reprezentuje (opcjonalne) kody języków i krajów. Jeśli jest całkowicie nieobecny, staje się pakietem domyślnym (rezerwowym). Jeśli język jest obecny, np _en
. Zostanie użyty, gdy klient wyraźnie zażądał tego języka w Accept-Language
nagłówku żądania HTTP. To samo dotyczy kraju, np . _en_US
Lub _en_GB
.
Można określić obsługiwane ustawienia narodowe zarówno dla wiadomości, jak i pakunku zasobów, ogólnie w <locale-config>
elemencie 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>
Żądane ustawienie regionalne należy ustawić za pomocą <f:view locale>
. Zobacz także Lokalizacja w JSF, jak zapamiętać wybrane ustawienia regionalne na sesję zamiast na żądanie / widok .