java - जावा मुद्रा प्रदर्शित नाम अंतर्राष्ट्रीयकरण



internationalization currency (1)

क्या कोई कारण है कि अंग्रेजी में प्रदर्शित होने वाले स्थानीय अनुवाद के बावजूद निश्चित प्रदर्शन नाम अंग्रेजी में प्रदर्शित होते हैं (यानी: अनुवाद नहीं)।

उदाहरण के लिए: लोकेल: "आरयू" का अनुवाद नहीं किया गया है

Locale locale = new Locale("ru");
Currency curr = Currency.getInstance("USD");
System.out.println(curr.getDisplayName(locale));
// US Dollar

लोकेल: "es" का अनुवाद किया गया है

Locale locale = new Locale("es");
Currency curr = Currency.getInstance("USD");
System.out.println(curr.getDisplayName(locale));
// dólar estadounidense

क्या यह जानबूझकर है? या जावा को इसका अनुवाद करने के लिए आस पास नहीं मिला है? या मैं कुछ गलत कर रहा हूँ?

मैंने उन फ़ाइलों का पता लगाने की कोशिश की जहां ये अनुवाद संग्रहीत हैं लेकिन उन्हें नहीं मिला। अगर कोई मुझे उस संसाधन के बारे में बता सकता है जो उपयोगी होगा

धन्यवाद।


लोकेल सेवा प्रदाता

जावा डेटा प्रदान करने के लिए एक एक्स्टेंसिबल तंत्र का उपयोग करता है (जैसे स्ट्रिंग, फ़ॉर्मेटर्स, आदि) जो स्थानीय है

क्लासेस स्थानीय-संवेदनशील डेटा का एक कारखाना LocaleServiceProvider लिए LocaleServiceProvider को लागू कर सकता है। java.text और java.text में बहुत से कक्षाएं इन प्रदाताओं पर निर्भर करती है ताकि उन्हें ऑब्जेक्ट बनाने के लिए विभिन्न Locale साथ ठीक से काम किया जा सके।

आप java.util.spi पैकेज में स्थानीय सेवा प्रदाता के उदाहरण पा सकते हैं, जो आम तौर पर टेक्स्ट या नंबरों को ऐसे तरीके से प्रदर्शित करने के लिए उपयोग किया जाता है जो लोकेल पर निर्भर होता है इसमें CurrencyNameProvider भी शामिल है जिसका उपयोग Currency#getDisplayName कॉल करते समय किया जाता है।

कार्यान्वयन ढूँढना

किसी विशिष्ट LocaleServiceProvider (जैसे CurrencyNamePovider ) का उपयोग करने वाले LocaleServiceProviderPool का उपयोग प्रदाता के उदाहरणों को खोजने के लिए करते हैं, जो किसी विशिष्ट लोकेल का समर्थन करते हैं।

LocaleServiceProviderPool पहले JRE में शामिल डिफ़ॉल्ट कार्यान्वयन का उपयोग करने का प्रयास करता है यदि यह नहीं मिला है, तो यह जावा में सरल सेवा प्रदाता इंटरफ़ेस (एसपीआई) तंत्र पर निर्भर करता है और तीसरे पक्ष के पुस्तकालयों द्वारा प्रदान किए गए कार्यान्वयन को खोजने के लिए ServiceLoader 1 का उपयोग करता है।

लोकेल के ट्यूटोरियल में यही लिखा है:

ये विधियां पहली बार जांचती हैं कि जावा रनटाइम पर्यावरण अनुरोधित लोकेल का समर्थन करता है; यदि हां, तो वे उस समर्थन का उपयोग करते हैं अन्यथा, तरीकों ने अनुरोधित लोकेल का समर्थन करने वाले एक प्रदाता को खोजने के लिए उचित इंटरफ़ेस के लिए स्थापित प्रदाताओं के getAvailableLocales () विधियां कॉल की हैं।

sun.util.locale.provider साथ आने वाले प्रदाताओं के डिफ़ॉल्ट कार्यान्वयन को sun.util.locale.provider के पैकेज में पाया जा सकता है। sun.util.locale.provider यह जटिल है, लेकिन यह अनिवार्य रूप से जार localedata.jar से डेटा प्राप्त करता है। ओरेकल java_home/jre/lib/ext/localedata.jar में, यह java_home/jre/lib/ext/localedata.jar । यदि आप इस जार में मौजूद फाइलों को सूचीबद्ध करते हैं, और sun.util.resources.es और sun.util.resources.es में फाइलों की जांच करते हैं, तो आप देखेंगे कि रूसी के लिए स्पैनिश के लिए निर्धारित अधिक से अधिक मुद्रा नाम हैं।

यहां ओपनजेडीके के लिए फ़ाइलें हैं: रूसी बनाम स्पैनिश

क्या होगा अगर यह बिल्कुल परिभाषित नहीं है

पदानुक्रम में लोकेल का आयोजन किया जाता है उदाहरण के लिए, किसी देश के किसी विशिष्ट क्षेत्र में एक लोकेल हो सकता है जो देश के लोकेल से कुछ स्थानीय मतभेदों को दर्शाता है। यदि लोकेल के लिए डेटा नहीं मिला है, लोकेल LocaleServiceProviderPool लोकेल के माता-पिता का उपयोग करने का प्रयास करेगा।

लोकेल के पेड़ की जड़ मूल रूप से एक "फॉलबैक" काल्पनिक लोकेल है जो सभी स्थानीयकृत डेटा के लिए डिफ़ॉल्ट मान प्रदान करता है।

यह संभवतः क्या हो रहा है जब आप रूसी में यूएसडी में डिस्प्ले नाम के लिए पूछते हैं।

तानाना

कोई भी प्रोग्राम अतिरिक्त लोकेल जानकारी प्रदान कर सकता है। मेटाडेटा फ़ाइल बनाकर और CurrencyNameProvider कार्यान्वित करके उन्हें सेवा प्रदाता 1 को परिभाषित करने की आवश्यकता है आप लापता स्थानीयकृत डेटा अपने खुद के जार में भर सकते हैं।

निष्कर्ष

या जावा को इसका अनुवाद करने के लिए आस पास नहीं मिला है?

यह बहुत ज्यादा मामला है।

या मैं कुछ गलत कर रहा हूँ?

नहीं, आप या तो डिफ़ॉल्ट पर भरोसा कर सकते हैं या स्वयं को स्थानीय डेटा प्रदान कर सकते हैं।

1 META-INF/services/java.text.spi.DateFormatProvider , संसाधन META-INF/services/java.text.spi.DateFormatProvider को लोड करने के लिए META-INF/services/java.text.spi.DateFormatProvider । यदि ऐसी फाइल मिली है, तो इसमें कार्यान्वयन के विशिष्ट वर्ग नाम होना चाहिए। यह तब क्लासलोडर के माध्यम से इसका एक उदाहरण बनाने की कोशिश करता है






currency