यह मानते हुए कि आप इसे कॉन्फ़िगर कर दिया है इस प्रकार है: अपने सेम अनुरोध scoped है
<resource-bundle>
<base-name>com.example.i18n.text</base-name>
<var>text</var>
</resource-bundle>
हैं, तो आप सिर्फ अपनी <var>
द्वारा @ManagedProperty
रूप <resource-bundle>
इंजेक्षन कर सकते हैं:
@ManagedProperty("#{text}")
private ResourceBundle text;
public void someAction() {
String someKey = text.getString("some.key");
// ...
}
या यदि आपको बस कुछ विशिष्ट कुंजी की आवश्यकता है:
@ManagedProperty("#{text['some.key']}")
private String someKey;
public void someAction() {
// ...
}
अपने सेम एक व्यापक दायरे में तथापि है, तो #{text}
प्रोग्राम के रूप में विधि स्थानीय दायरे में मूल्यांकन:
public void someAction() {
FacesContext context = FacesContext.getCurrentInstance();
ResourceBundle text = context.getApplication().evaluateExpressionGet(context, "#{text}", ResourceBundle.class);
String someKey = text.getString("some.key");
// ...
}
या यदि आप केवल कुछ विशिष्ट कुंजी की आवश्यकता:
public void someAction() {
FacesContext context = FacesContext.getCurrentInstance();
String someKey = context.getApplication().evaluateExpressionGet(context, "#{text['some.key']}", String.class);
// ...
}
आप इसे मानक ResourceBundle
एपीआई द्वारा भी प्राप्त कर सकते हैं वैसे ही जेएसएफ स्वयं ही सह के तहत कर रहा है vers, आप केवल कोड में आधार नाम दोहराने की आवश्यकता होगी:
public void someAction() {
FacesContext context = FacesContext.getCurrentInstance();
ResourceBundle text = ResourceBundle.getBundle("com.example.i18n.text", context.getViewRoot().getLocale());
String someKey = text.getString("some.key");
// ...
}
या यदि आप JSF के बजाय CDI द्वारा सेम प्रबंधन कर रहे हैं, तो आप उस के लिए एक @Producer
बना सकते हैं:
public class BundleProducer {
@Produces
public PropertyResourceBundle getBundle() {
FacesContext context = FacesContext.getCurrentInstance();
return context.getApplication().evaluateExpressionGet(context, "#{text}", PropertyResourceBundle.class);
}
}
और यह नीचे के रूप में इंजेक्षन:
@Inject
private PropertyResourceBundle text;
वैकल्पिक रूप से, यदि आप जेएसएफ उपयोगिता लाइब्रेरी OmniFaces के Messages
वर्ग का उपयोग कर रहे हैं, तो आप बंडल का उपयोग करने के लिए सभी Message
विधियों को एक बार देने के लिए केवल एक बार अपने रिज़ॉल्यूशन सेट कर सकते हैं।
Messages.setResolver(new Messages.Resolver() {
public String getMessage(String message, Object... params) {
ResourceBundle bundle = ResourceBundle.getBundle("com.example.i18n.text", Faces.getLocale());
if (bundle.containsKey(message)) {
message = bundle.getString(message);
}
return MessageFormat.format(message, params);
}
});
भी देखें javadoc और showcase page में उदाहरण।
'अपने सेम अनुरोध scoped है' यह है कि केवल गुंजाइश है कि propperties फ़ाइल तक पहुंच सकते हैं? –
@ कुरियल: जेएसएफ '@ प्रबंधित पोपर्टी 'व्यापक दायरे में एक संक्षिप्त दायरे को इंजेक्शन देने में सक्षम नहीं है। केवल सीडीआई 'इंजेक्ट' है। यदि आप सीडीआई का उपयोग करते हैं, तो http://stackoverflow.com/q/28045667 – BalusC
@ बालससी पर जाएं, जो संसाधन बंडल फ़ाइल में पैरामीटर के साथ पाठ लिखते समय वाक्यविन्यास फ़ॉर्म का उपयोग किया जाना चाहिए? –