2009-05-21 14 views
9

मैं जावा के साथ तुर्की लीरास (आईएसओ 4217 मुद्रा कोड TRY) में कीमतें मुद्रित करने की कोशिश कर रहा हूं।मैं जावा में मुद्रा प्रतीकों को ओवरराइड कैसे करूं?

जब मैं

Currency curr = Currency.getInstance("TRY"); 
Locale trLocale = new Locale("tr", "TR"); 
System.out.println(curr.getSymbol(trLocale)); 

कर उत्पादन है: "YTL"।

हालांकि, तुर्की लीरा के लिए मुद्रा प्रतीक हाल ही में "वाईटीएल" से "टीएल" में बदल गया है (जैसा कि तुर्की लीरा के विकिपीडिया पेज पर देखा जा सकता है)। NumberFormat के साथ स्वरूपण एक समान परिणाम देता है।

मैं वास्तव में अभी तक एक और मुद्रा वर्ग नहीं लिखना चाहता हूं, खासकर जब जावा में एक अंतर्निहित है।

क्या TRY से "टीएल" के लिए जावा के डिफ़ॉल्ट मुद्रा प्रतीक को ओवरराइड करने का कोई तरीका है?

+2

यह तुरंत मदद नहीं करता है, लेकिन एक बग फ़ाइल करें और इसे शायद अगले जावा अपडेट में ठीक किया जाएगा। –

+1

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

उत्तर

2

जावा 7 में आप गुण फ़ाइल में override currencies कर सकते हैं। यदि आप आईएसओ -4217 प्रतीक पर भरोसा कर रहे हैं, तो इसे निर्दिष्ट/ओवरराइड किया जा सकता है।

+1

लेकिन उस गुण फ़ाइल में केवल आईएसओ 4217 संबंधित जानकारी है। और आईएसओ 4217 में मुद्रा प्रतीकों नहीं हैं। – user110665

0

मतलब समय के लिए आप जावा पर प्रतीक्षा कर रहे हैं, जबकि:

System.out.println(curr.getSymbol(trLocale).substring(1)); 
3

Amusingly, विकिपीडिया के अनुसार, मुद्रा कोड "TRL" अप्रचलित (तुर्की लीरा के लिए पुराने कोड) है। मैं नवीनतम JDK में अपग्रेड नहीं किया, (1.5.0_10 पर), लेकिन

Currency curr = Currency.getInstance("TRL");
Locale trLocale = new Locale("tr", "TR");
System.out.println(curr.getSymbol(trLocale));

प्रिंटों:

टी एल

तो शायद अप्रचलित करने के लिए मौजूदा कोड मैप करने के लिए अपना खुद का कुछ लिखो आवश्यकतानुसार कोड और समायोजन और परीक्षण करें।

+0

पुराने मुद्रा कोड का उपयोग करने में सक्षम होने के नाते मुझे लगता है कि एक अच्छा भाग्य है। अच्छा हैक! – extraneon

+0

वैसे उन्होंने छः शून्य को पुरानी मुद्रा से हटा दिया, इसलिए अंतर वास्तव में एक लाख से एक है ... सावधान रहें कि आप क्या चाहते हैं! – vikingsteve

5

आगे के संदर्भ के लिए जी उठने:

आप DecimalFormatSymbols उपयोग कर सकते हैं स्वरूपण प्रयोजनों

Locale trLocale = new Locale("tr", "TR"); 
DecimalFormat decimalFormat = (DecimalFormat) DecimalFormat.getCurrencyInstance(trLocale); 
DecimalFormatSymbols dfs = DecimalFormatSymbols.getInstance(trLocale); 
dfs.setCurrencySymbol("TL"); 
decimalFormat.setDecimalFormatSymbols(dfs); 

या आप एसपीआई के लिए अपील और प्लग-इन आपके मुद्रा प्रतीक कर सकते हैं के लिए मुद्रा बदलने के लिए (शायद अपने स्वयं के बनाने के द्वारा new Locale("tr","TR","try") जैसे देश संस्करण)। ऐसा करने के लिए आपको java.util.spi.CurrencyNameProvider पर कार्यान्वयन प्रदान करना चाहिए और इसे जावा एक्सटेंशन तंत्र के साथ पंजीकृत करना चाहिए। http://java.sun.com/javase/6/docs/api/java/util/spi/LocaleServiceProvider.html

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