2011-12-12 15 views
5

में एक से अधिक संदेश फ़ाइल होने की संभावना है हमारे पास एक साइट है जिसका उपयोग दो अलग-अलग ग्राहकों के लिए किया जाएगा। पहले अनुरोध के दौरान उपयोगकर्ता को ग्राहक चुनने के लिए कहा जाएगा। उस पाठ के आधार पर, लेबल और साइट सामग्री प्रदर्शित की जानी चाहिए।क्या प्ले फ्रेमवर्क

दो संदेश प्ले ढांचे में और सत्र स्टार्टअप के दौरान संदेशों फ़ाइल तय की जाएगी

अपना शोध के रूप में हम प्रत्येक लोकेल के लिए एक फ़ाइल की तुलना में अधिक हो सकता है दायर करने के लिए करने के लिए क्या यह संभव है, संदेशों आधारित हो हो जाएगा अनुरोध में लोकेल पर।

उत्तर

1

समाधान नीचे के साथ इस समस्या हल कर सकते हैं

  1. एक वर्ग MessagesPlugIn जो play.i18n.MessagesPlugin फैली बनाया गया
  2. Messages जैसे play.i18n.Messages
  3. एक स्थिर था मानचित्र messaagesByClientIDMessages.java
  4. onApplicationStart() ओवरराइड में MessagesPlugIn
  5. में messaagesByClientIDlocales रूप play.i18n.MessagesPlugin
  6. में लोड में गुण लोड Messages.java में एक विधि get() था, सत्र में messaagesByClientID आधारित clientid से संपत्ति को पुनः प्राप्त। यदि संपत्ति एक कस्टम टैग il8nTagplay.i18n.Messages

7.Created में उपलब्ध कॉल get() नहीं है और HTML टेम्पलेट्स में अपनी इस्तेमाल किया। il8nTagMessages.get() में मेथोस का आह्वान करेगा।

1

आप अपना खुद का PlayPlugin लिख सकते हैं और play.PlayPlugin.getMessage(String, Object, Object...) लागू कर सकते हैं। फिर आप सही फ़ाइल चुन सकते हैं। कक्षा play.i18n.Messages को विधि को कार्यान्वित करने के लिए प्रेरणा के रूप में उपयोग किया जा सकता है।

+0

धन्यवाद, इस पृष्ठ को दिए गए उत्तरों के आधार पर मुझे जवाब मिला और ऊपर पोस्ट किया गया। –

4

नहीं, यह इस समय समर्थित नहीं है। आप आसानी से है कि या तो एक प्लगइन (Look at MessagesPlugin) में या यहाँ तक कि @onApplicationStartup टिप्पणी के साथ एक bootstrap job का उपयोग कर

// From MessagesPlugin.java 

//default languange messages 
VirtualFile appDM = Play.getVirtualFile("conf/messages"); 
if(appDM != null && appDM.exists()) { 
    Messages.defaults.putAll(read(appDM)); 
} 

static Properties read(VirtualFile vf) { 
    if (vf != null) { 
     return IO.readUtf8Properties(vf.inputstream()); 
    } 
    return null; 
} 
+0

धन्यवाद, जब मैं नियंत्रकों में संदेश लोड करता हूं तो मैं इसे प्राप्त कर सकता हूं। लेकिन जब मैं टेम्पलेट्स में संदेशों को लोड किया जाता है तो मैं funtionality को कैसे ओवरराइड कर सकता हूं & {}। क्रिप्या मेरि सहायता करे। –

+0

टेम्पलेट संदेश एक साथ काम करने के बाद भी काम करना चाहिए .defaults। क्या आपने कोई सफलता नहीं की है? – mericano1

+0

असल में मेरी आवश्यकता है, एप्लिकेशन में एक ही कुंजी के साथ एक से अधिक संपत्ति फ़ाइल होगी, लेकिन मान अलग हैं। इसे सत्र में "क्लाइंट आईडी" के आधार पर किसी भी फ़ाइल से किसी प्रॉपर्टी को पुनर्प्राप्त करने में सक्षम होना चाहिए। अगर मैं इसे जोड़ूं डिफ़ॉल्ट मैं सत्र मूल्य से नहीं मिला। दूसरा समाधान हल करें।कस्टम मैसेज प्लगइन बनाया गया है जो मैसेजप्लगिन को बढ़ाता है और इसमें हैश मैप था, क्लाइंट आईडी के साथ सभी फाइलों को क्लाइंट आईडी के साथ लोड और वैल्यू के रूप में लोड करें। Message.get() के लिए एक कॉल सत्र में क्लाइंट आईडी के आधार पर मूल्य को वापस ले जाएगा। टेम्पलेट्स मैंने संदेश पुनर्प्राप्त करने के लिए कस्टम टैग का उपयोग किया। आपके समर्थन के लिए –

0

बनाएं अपनी खुद की Module पर play.api.i18n.I18nModule आधारित है, लेकिन MessagesApi का अपना स्वयं का कार्यान्वयन, के आधार पर करने के लिए बाध्य Play की DefaultMessagesApi (here लोड है हिस्सा फ़ाइलों को परिभाषित करने के लिए)

अपने application.conf, disable Play's play.api.i18n.I18nModule में

तब और अपने खुद के सक्षम मॉड्यूल।

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