जब और मैं कैसे इस्तेमाल करना चाहिए <resource-bundle>
और <message-bundle>
में स्थानीयकरण के लिए टैग faces-config.xml
? उन दोनों के बीच मतभेद मेरे लिए बहुत स्पष्ट नहीं हैं।
जवाबों:
<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>
जावा ईई 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-Language
HTTP अनुरोध शीर्षक में इस भाषा के लिए स्पष्ट रूप से अनुरोध किया है । यह देश पर लागू होता है, उदाहरण के लिए _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 में स्थानीयकरण भी देखें , अनुरोध / दृश्य के बजाय प्रति सत्र चयनित लोकेल को कैसे याद रखें ।