हमारे पास बहुत सारे स्ट्रिंग्स थे जिनमें कंपनी या उत्पाद नाम वाले ब्रांडिंग जैसी स्ट्रिंग्स के लिए लॉग की जांच करने या समर्थन से संपर्क करने के बारे में वाक्य से समान उप-स्ट्रिंग शामिल थी। पुनरावृत्ति हमारे लिए कुछ मुद्दों का कारण बन रही थी (मुख्य रूप से टाइपो या प्रतिलिपि/पेस्ट त्रुटियां) लेकिन इससे समस्याएं भी होती हैं जिससे हमारे अनुवादक को अनुवाद करने की मात्रा बढ़ जाती है।मैं जावा संसाधन बंडल तारों में पुनरावृत्ति से कैसे बचूं?
समाधान मैं के साथ आया था कुछ इस तरह चला गया: असली संसाधन बंडल को
public class ExpandingResourceBundleControl extends ResourceBundle.Control {
public static final ResourceBundle.Control EXPANDING =
new ExpandingResourceBundleControl();
private ExpandingResourceBundleControl() { }
@Override
public ResourceBundle newBundle(String baseName, Locale locale, String format,
ClassLoader loader, boolean reload)
throws IllegalAccessException, InstantiationException, IOException {
ResourceBundle inner = super.newBundle(baseName, locale, format, loader, reload);
return inner == null ? null : new ExpandingResourceBundle(inner, loader);
}
}
ExpandingResourceBundle
प्रतिनिधियों लेकिन {{this.kind.of.thing}} में महत्वपूर्ण को देखने के लिए की रूपांतरण करता संसाधन।
हर बार जब आप इनमें से किसी एक को प्राप्त करना चाहते हैं, तो आप तय करना है:
ResourceBundle.getBundle("com/acme/app/Bundle", EXPANDING);
और यह ठीक काम करता है - थोड़ी देर के लिए।
अंततः क्या होता है यह है कि कुछ नए कोड (हमारे मामले में स्वत: जेनरेट कोड जो मैटिस से बाहर था) कस्टम नियंत्रण निर्दिष्ट किए बिना एक ही संसाधन बंडल को देखता है। यह गैर-प्रतिलिपि प्रतीत होता है यदि आप एक साधारण इकाई परीक्षण लिखते हैं जो इसे बिना और उसके बिना कॉल करता है, लेकिन ऐसा तब होता है जब एप्लिकेशन वास्तविक के लिए चलाया जाता है। किसी भी तरह ResourceBundle
के अंदर कैश अच्छा मूल्य निकालता है और इसे टूटे हुए के साथ बदल देता है। मुझे अभी पता लगाना बाकी है कि क्यों और सूर्य की जार फ़ाइलों को डीबग जानकारी के बिना संकलित किया गया था, इसलिए इसे डिबगिंग करना एक गड़बड़ है।
मेरे सवालों का:
वहाँ विश्व स्तर पर डिफ़ॉल्ट ResourceBundle.Control है कि मैं के बारे में पता नहीं हो सकता है की स्थापना के कुछ रास्ता नहीं है? यह सब कुछ सुन्दरता से हल करेगा।
क्या इस तरह की चीज को सुन्दर तरीके से संभालने का कोई और तरीका है, शायद संसाधनबंडल कक्षाओं के साथ छेड़छाड़ किए बिना?
कुछ है जो आसानी से, metaprogramming का उपयोग कर नियंत्रित किया जा सकता है अगर जावा यह था कि। –