जेएसएफ में अंतर्राष्ट्रीयकरण, संदेश-बंडल और संसाधन-बंडल का उपयोग कब करना है?


84

जब और मैं कैसे इस्तेमाल करना चाहिए <resource-bundle>और <message-bundle>में स्थानीयकरण के लिए टैग faces-config.xml? उन दोनों के बीच मतभेद मेरे लिए बहुत स्पष्ट नहीं हैं।

जवाबों:


148

<संदेश-बंडल>

<message-bundle>जब भी आप JSF डिफ़ॉल्ट चेतावनी / त्रुटि संदेशों जो JSF सत्यापन / रूपांतरण सामान द्वारा इस्तेमाल किया गया है ओवरराइड करना चाहते इस्तेमाल किया जा रहा है। आप JSF विनिर्देशन के अध्याय 2.5.2.4 में डिफ़ॉल्ट चेतावनी / त्रुटि संदेशों की कुंजी पा सकते हैं ।

उदाहरण के लिए, पैकेज Messages_xx_XX.propertiesमें फाइलें com.example.i18nजो नीचे डिफ़ॉल्ट 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

निम्नानुसार कॉन्फ़िगर किया जा सकता है (लोकेल स्पेसियर _xx_XXऔर फ़ाइल एक्सटेंशन के बिना !):

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

<संसाधन बंडल>

<resource-bundle>जब भी आप एक स्थानीय संसाधन बंडल जो निर्दिष्ट करने के लिए आवश्यकता के बिना पूरे JSF आवेदन भर में उपलब्ध है पंजीकृत करना चाहते इस्तेमाल किया जा रहा है <f:loadBundle>हर एक दृश्य में।

उदाहरण के लिए, नीचे दिए गए पैकेज Text_xx_XX.propertiesमें फाइलें 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

निम्नानुसार कॉन्फ़िगर किया जा सकता है (लोकेल स्पेसियर _xx_XXऔर फ़ाइल एक्सटेंशन के बिना !):

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

और main.xhtmlनिम्नानुसार उपयोग किया जाएगा :

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

मान्यकरण (JSR303 बीन सत्यापन)

जावा ईई 6 / JSF 2 के बाद से, वहाँ भी जो उन का प्रतिनिधित्व करती है नया JSR303 बीन मान्यता एपीआई है @NotNull, Size, @Maxके, आदि एनोटेशन javax.validation.constraintsपैकेज। आपको यह समझना चाहिए कि यह एपीआई जेएसएफ से पूरी तरह से संबंधित नहीं है। यह JSF का हिस्सा नहीं है, लेकिन JSF सत्यापन चरण के दौरान इसका समर्थन करने के लिए होता है । यानी यह JSR303 कार्यान्वयन (जैसे हाइबरनेट वैलिडेटर) की उपस्थिति को निर्धारित करता है और पहचानता है और फिर इसके सत्यापन को दर्शाता है (जिसे उपयोग करके अक्षम किया जा सकता है <f:validateBean disabled="true"/>)।

JSR303 विनिर्देशन के अध्याय 4.3.1.1 के अनुसार , कस्टम JSR303 सत्यापन संदेश फ़ाइल को बिल्कुल नाम की ValidationMessages_xx_XX.propertiesआवश्यकता है और इसे क्लासपाथ की जड़ में रखा जाना चाहिए (इस प्रकार, पैकेज में नहीं!)।


स्थानीयकरण

उपरोक्त उदाहरणों _xx_XXमें, फ़ाइल नाम में (वैकल्पिक) भाषा और देश कोड का प्रतिनिधित्व करता है। यदि यह पूरी तरह से अनुपस्थित है, तो यह डिफ़ॉल्ट (फ़ॉलबैक) बंडल बन जाता है। यदि भाषा मौजूद है, उदाहरण के लिए _en, तो इसका उपयोग तब किया जाएगा जब क्लाइंट ने Accept-LanguageHTTP अनुरोध शीर्षक में इस भाषा के लिए स्पष्ट रूप से अनुरोध किया है । यह देश पर लागू होता है, उदाहरण के लिए _en_USया _en_GB

आप <locale-config>तत्व के तत्व में संदेश और संसाधन बंडल दोनों के लिए समर्थित स्थान निर्दिष्ट कर सकते हैं 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>

वांछित स्थान के माध्यम से सेट करने की आवश्यकता है <f:view locale>JSF में स्थानीयकरण भी देखें , अनुरोध / दृश्य के बजाय प्रति सत्र चयनित लोकेल को कैसे याद रखें


1
नमस्ते बालुस सी, क्या हम कई <संदेश-बंडल> का उपयोग कर सकते हैं और इसे जावा बीन से कैसे कॉल कर सकते हैं?
T8Z

<संसाधन-बंडल> का उपयोग करते समय फ़ोल्डर संरचना को विशेष देखभाल की आवश्यकता होती है। यदि आप कहते हैं कि चेहरों में निम्नलिखित हैं- config.xml <संसाधन-बंडल> <आधार-नाम> org.abc.def.messages </ आधार-नाम> <var> msg </ var> </ संसाधन-बंडल> तब सभी message.properties, message_es.properties, message_de.properties केवल 'src / main / Resources / org / abc / def फ़ोल्डर' में होनी चाहिए। यानी 'डीफ़' फ़ोल्डर के तहत 'संदेश' फ़ोल्डर न बनाएं। जब तक 'डिफ' नहीं है, संसाधन-बंडल यह उम्मीद कर रहा है कि यह सभी मैसेज_xx.properties फ़ाइलों को खोजने की अपेक्षा करता है।
राहुल सैनी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.