2012-05-22 11 views
11

यूनिक्स मशीन पर सर्वर हमेशा डिफ़ॉल्ट लोकेल के रूप में उपयोग कर रहे हैं। के बाद वातावरण उत्पादनLocale.getDefault() हमेशा

LANG=en_US 
LC_CTYPE="C" 
LC_NUMERIC="C" 
LC_TIME="C" 
LC_COLLATE="C" 
LC_MONETARY="C" 
LC_MESSAGES="C" 
LC_ALL=C 

अगर LANG सही ढंग से सेट की गई हो क्यों सर्वर एन वातावरण के साथ शुरू होता मैं तो बस समझ में नहीं आता है।

+0

आप JVM को पुनः आरंभ किया था? –

उत्तर

22

लिनक्स/यूनिक्स/मैक में, सेटिंग्स LC_ALL और LANG जावा प्रोग्राम के लिए डिफ़ॉल्ट लोकेल को नियंत्रित कर सकते हैं। विंडोज़ में, क्षेत्रीय और भाषा विकल्पों के तहत, लोकेशन नियंत्रण कक्ष से सेट होते हैं।

जब JVM एक * nix वातावरण में शुरू होता है, यह ऐसा करेंगे:

  • , पर्यावरण के लिए LANG
  • तो
  • के लिए LC_ALL
  • तो LC_ALL मौजूद नहीं है पर्यावरण के लिए स्कैन स्कैन JVM सेटिंग user.language सेट है, पर्यावरण चर के स्थान पर इसका उपयोग करें।
  • कुछ भी नहीं सेट है, तो en_US करने के लिए डिफ़ॉल्ट (मेरा मानना ​​है कि इस अंतिम विफलता मामला है)

अपने वातावरण में, आप C को LC_ALL सेट, जो सिर्फ सी स्थान है। यह मूल रूप से उन दिनों के लिए पारंपरिक गिरावट है जब स्थानीय लोगों का उपयोग नहीं किया जाता था।

आप अपने मामले में LC_ALL बदल सकते हैं, और अपना JVM पुनरारंभ करें, और आपको java.util.Locale.getDefault() के लिए एक नया मान प्राप्त करना चाहिए।

उदाहरण:

import java.util.Locale; 

public class LocaleTest { 
    public static void main(String[] args) { 
     System.out.println(Locale.getDefault()); 
    } 
} 

यहाँ चल रहा है:

> LC_ALL=en_UK java LocaleTest 
en_UK 

> LC_ALL=ja_JP java LocaleTest 
ja_JP 

भी ध्यान रखें कि आप जावा 1.7.0-b147 चला रहे हैं, वहाँ JRE के लिए पर्यावरण सेटिंग्स पहचान नहीं के साथ एक बग है लोकेल, और हमेशा डिफ़ॉल्ट सिस्टम लोकेल का उपयोग करेगा।

बग यहाँ रिपोर्ट: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7073906

+0

धन्यवाद birryree। लेकिन GetDefault विधि उपयोगकर्ता पर आधारित लोकेल लौटाता है। भाषा गुण। यदि इन गुणों को इस तरह के सर्वर चलाने के दौरान स्पष्ट रूप से पारित नहीं किया जाता है- Duser.language = en_GB तो ये मान कैसे सेट हो जाते हैं? क्या ये गुण सेट होते हैं जब उपयोगकर्ता सिस्टम में लॉग इन करता है या jvm इन गुणों को पर्यावरण के आधार पर सेट करता है। – Delta

+0

@ डेल्टा - जैसा कि मैंने उल्लेख किया है, यह आपके स्थानीय वातावरण को देखेगा और जब JVM शुरू होता है तो लोकेल के लिए 'LC_ALL' या' LANG' चर का उपयोग करें। यदि कुछ भी सेट नहीं है, तो यह कुछ हार्ड कोड किए गए मान ('en_US') के लिए डिफ़ॉल्ट होगा। – birryree

+0

धन्यवाद birreyree। मैं यह परिवर्तन करने जा रहा हूं और देख रहा हूं कि यह सही तरीके से काम करता है या नहीं। मैं आपको पोस्ट कर दूंगा। धन्यवाद – Delta

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