JSF'de uluslararasılaştırma, ileti paketi ve kaynak paketi ne zaman kullanılır?


84

Ne zaman ve nasıl kullanmalıyım <resource-bundle>ve <message-bundle>etiketleri de yerelleştirme için faces-config.xml? Bu ikisi arasındaki farklar benim için çok net değil.

Yanıtlar:


148

<message-bundle>

<message-bundle>Eğer JSF doğrulama / dönüşüm malzeme tarafından kullanılmış olan MTU varsayılan uyarı / hata iletileri geçersiz kılmak istediğiniz zaman kullanılmak üzere olduğunu. Varsayılan uyarı / hata mesajlarının anahtarlarını JSF spesifikasyonunun 2.5.2.4 bölümünde bulabilirsiniz .

Örneğin , varsayılan mesajı geçersiz kılan aşağıdaki paketteki Messages_xx_XX.propertiesdosyalar :com.example.i18nrequired="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

aşağıdaki gibi yapılandırılabilir (yerel ayar belirticisi _xx_XXve dosya uzantısı olmadan !):

<message-bundle>com.example.i18n.Messages</message-bundle>

<kaynak-paketi>

<resource-bundle>Belirtmek gerek kalmadan tüm MTU uygulaması boyunca kullanılabilir yerelleştirilmiş kaynak paketi kaydetmek istediğiniz zaman kullanılmak üzere olan <f:loadBundle>her görünümde.

Örneğin, aşağıdaki gibi paketteki Text_xx_XX.propertiesdosyalar com.example.i18n:

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

aşağıdaki gibi yapılandırılabilir (yerel ayar belirticisi _xx_XXve dosya uzantısı olmadan !):

<resource-bundle>
    <base-name>com.example.i18n.Text</base-name>
    <var>text</var>
</resource-bundle>

ve main.xhtmlaşağıdaki şekilde kullanılmalıdır :

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

Java EE 6 / JSF 2 yılından bu yana, aynı zamanda kişiler tarafından temsil edilir yeni JSR303 Bean Doğrulama API var @NotNull, Size, @Maxbir, vb açıklamalar javax.validation.constraintspakette. Bu API'nin JSF ile tamamen alakasız olduğunu anlamalısınız . JSF'nin bir parçası değildir, ancak JSF, doğrulama aşamasında bunu desteklemektedir . Yani bir JSR303 uygulamasının varlığını belirler ve tanır (örn. Hazırda Bekletme Doğrulayıcısı) ve daha sonra doğrulamayı ona devreder (bu <f:validateBean disabled="true"/>arada kullanılarak devre dışı bırakılabilir ).

Bölüm 4.3.1.1 gereğince JSR303 şartname , özel JSR303 doğrulama mesajları dosya olması gerekir tam adını ValidationMessages_xx_XX.propertiesve yerleştirilmesi gereken root sınıf yolunda bir (böylece, bir pakette!).


Yerelleştirme

Yukarıdaki örneklerde, _xx_XXdosya adındaki (isteğe bağlı) dili ve ülke kodlarını temsil eder. Bu tamamen yoksa, varsayılan (geri dönüş) paket haline gelir. Dil mevcutsa, örneğin _en, istemci bu dili Accept-LanguageHTTP istek başlığında açıkça talep ettiğinde kullanılacaktır . Aynı durum ülke için de geçerlidir, örneğin _en_USveya _en_GB.

İletinin ve jenerik kaynak paketinin her ikisi için desteklenen yerel ayarları belirtebilirsiniz <locale-config>unsuru 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>

İstenilen yerel ayarın üzerinden ayarlanması gerekiyor <f:view locale>. Ayrıca bkz . JSF'de Yerelleştirme, istek / görünüm yerine oturum başına seçilen yerel ayarın nasıl hatırlanacağı .


1
Merhaba Balus C, birden çok <message-bundle> kullanabilir miyiz ve onu java bean'den nasıl arayabiliriz?
T8Z

<resource-bundle> kullanılırken klasör yapısına özel dikkat gösterilmelidir. Faces-config.xml <resource-bundle> <base-name> org.abc.def.messages </base-name> <var> msg </var> </resource-bundle> içinde aşağıdakilere sahip olduğunuzu söylerseniz, o zaman tüm message.properties, message_es.properties, message_de.properties yalnızca 'src / main / resources / org / abc / def klasöründe' olmalıdır. yani 'def' klasörü altında 'mesajlar' klasörü oluşturmayın. Tüm messages_xx.properties dosyalarını bulmayı beklediği kaynak paketinin beklediği 'def'e kadar.
Rahul Saini
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.