2011-09-09 9 views
5

में अंतर्राष्ट्रीयकरण मैं सोच रहा हूं कि अंतर्राष्ट्रीयकरण जेएसएफ में कैसे काम करता है? मैंने इसके बारे में coreservlets.com पर ट्यूटोरियल पढ़ा है, लेकिन मेरे मामले में यह थोड़ा अलग तरीके से काम करता है। कि ट्यूटोरियल में कहा मैं और भी समर्थन सेम संपत्ति getCurrentLocale()<f:view> टैग में इसका इस्तेमाल करने के लिए है (स्थान बदलने के लिए श्रोता)जेएसएफ 2.0

FacesContext.getCurrentInstance().getViewRoot().setLocale(newLocale); 
ActionListener में

का उपयोग करना होगा।

मेरे पास संदेशों के साथ 2 संपत्ति फ़ाइलें हैं (डिफ़ॉल्ट और निर्दिष्ट लोकेल के साथ), वे faces-config.xml में पंजीकृत हैं। <f:view> टैग मैं केवल प्रत्येक स्थान के लिए एक पृष्ठ (index.xhtml)

<f:view locale="#{bean.locale}"> 
... 
</f:view> 

इसके अलावा, मैं (ActionListener साथ) 2 बटन पर है। बैकिंग बीन में मैं बस वर्तमान लोकेल वैरिएबल को संशोधित करता हूं (getViewRoot().setLocale(newLocale) का उपयोग न करें)। लेकिन सभी पृष्ठों (वे <f:view locale="#{bean.locale}"> की जरूरत नहीं है, भले ही)

उत्तर

22

कहना चलें के लिए स्थान परिवर्तन आप दो संदेश फ़ाइलें

messages.properties 
    messages_de.properties 

आवेदन स्थानीय सेटिंग
वहाँ स्थापित करने के तीन तरीके हैं निम्नलिखित है एप्लिकेशन लोकेल और मुझे लगता है कि आपको पहले पहले की आवश्यकता है।

1-आप ब्राउज़र को लोकेल चुनने दे सकते हैं।

डिफ़ॉल्ट और WEB-INF/faces-config.xml:

<faces-config> 
    <application> 
     <locale-config> 
     <default-locale>en</default-locale> 
     <supported-locale>de</supported-locale> 
     </locale-config> 
    </application> 
</faces-config> 

एक ब्राउज़र आपके आवेदन को जोड़ता है जब में समर्थित स्थान सेट करें, यह आमतौर पर HTTP शीर्ष लेख में एक स्वीकार करें-भाषा मूल्य शामिल

2-आप सेट कर सकते हैं स्थानीय रूप से लोकेल।

कॉल UIViewRoot वस्तु की setLocale विधि:

UIViewRoot viewRoot = FacesContext.getCurrentInstance().getViewRoot(); 
viewRoot.setLocale(new Locale("de")); 

3-आपको व्यक्तिगत पेज
के लिए स्थान निर्धारित कर सकते हैं एक स्थान गुण-उदाहरण के लिए f:view तत्व का उपयोग द्वारा:

<f:view locale="de"> 

स्थान गतिशील सेट किया जा सकता:

<f:view locale="#{user.locale}"/> 


घोषणा संदेश बंडल
अब लोकेल आपको निम्न दो संदेश घोषित करने के तरीकों में से एक का उपयोग कर सकते सेट कर दिया जाता है कि

1-के माध्यम से सामना करना पड़ता है-config बंडल सबसे आसान तरीका है चेहरे-कॉन्फ़िगर नाम की एक फ़ाइल की आपूर्ति करें।अपने आवेदन के वेब INF निर्देशिका में एक्सएमएल, निम्नलिखित सामग्री के साथ:

<?xml version="1.0"?> 
<faces-config xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
     http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd" 
    version="2.0"> 
    <application> 
     <resource-bundle> 
     <base-name>com.corejsf.messages</base-name> 
     <var>msgs</var> 
     </resource-bundle> 
    </application> 
</faces-config> 

2-में प्रत्येक JSF पेज है कि यह उपयोग की जरूरत है।

<f:loadBundle basename="com.corejsf.messages" var="msgs"/> 

या तो मामले में, बंडल में संदेशों हैं: प्रत्येक JSF पेज कि, बंडल लिए उपयोग की जरूरत इस तरह के loadBundle तत्व: इसके बजाय एक वैश्विक संसाधन बंडल घोषणा का उपयोग करने का , आप च जोड़ सकते हैं नाम संदेश के साथ एक नक्शा चर के माध्यम से सुलभ।

बटन पर उचित लेबल दिखा अब कहते हैं कि डिफ़ॉल्ट गुण फ़ाइल यानी अंग्रेज़ी संपत्ति

next=Next 

है की सुविधा देता है और जर्मन equivallent यानी

next=Weiter 

है और आप स्थान निर्धारित करने और mesg घोषणा की है बंडल आप इसे कमांड बटन पर लेबल रखने के लिए एक्सेस कर सकते हैं जैसे कि

<h:commandButton value="#{msgs.next}"/> 

ऊपर उत्तर निकाला गया है और Hortsmen Core Java Server Faces book से संशोधित किया गया है।

+0

मैं कुछ जोड़ना चाहता हूं: 3. और 2. बिंदु में। प्रत्येक जेएसएफ पेज के लिए इसे करने के बजाय, आप टेम्पलेट.एक्सएचटीएमएल में कर सकते हैं। – karlihnos

संबंधित मुद्दे