2009-02-20 15 views
15

मैं स्थानीय प्रोग्रामिंग के लिए बिल्कुल नया हूं, और मैं यह पता लगाने की कोशिश कर रहा हूं कि नए लॉन्च किए गए अप्रबंधित सी ++ एप्लिकेशन (ऐप के भीतर से) के लिए उचित प्रारंभिक लोकेल कैसे सेट करें।मैं विंडोज पर सी ++ प्रोग्राम के लिए उचित प्रारंभिक लोकेल कैसे सेट करूं?

जहां तक ​​मैं कह सकता हूं, नए क्षेत्र उचित क्षेत्रीय लोकेल (अंग्रेजी, जर्मन, आदि) के बजाय सी लोकेल से शुरू होते हैं। तो मुझे क्या करना है setlocale(LC_ALL, "???") पर कॉल करें, लेकिन मुझे यकीन नहीं है कि दूसरे तर्क के लिए सही मूल्य कैसे प्राप्त करें। यह "अंग्रेजी" या "जर्मन: जर्मनी" जैसा कुछ होगा - मूल रूप से क्षेत्रीय और भाषा विकल्प नियंत्रण कक्ष के माध्यम से उपयोगकर्ता द्वारा जो भी लोकेल सेट किया गया था। बस स्पष्ट होने के लिए, मैं लोकेल स्ट्रिंग को प्रारूपित करने के तरीके की तलाश में हूं, मैं उस कंप्यूटर के लिए सही लोकेल स्ट्रिंग की तलाश में हूं जहां ऐप चल रहा है।

मुझे लगता है कि कुछ Win32 एपीआई है जो मुझे यह देगी, या शायद एक रजिस्ट्री कुंजी जिसमें उचित मूल्य होगा। क्या कोई जानता है कि मुझे क्या करना चाहिए?

उत्तर

25

सेटलोकेल() सी है, सी ++ नहीं। मैं वीसी 6 पर दोनों के बीच हस्तक्षेप को देखकर बेहद याद रखता हूं, लेकिन यह एक बग था। आम तौर पर, setlocale() केवल सी कार्यों के व्यवहार को प्रभावित करता है।

सी ++ में, स्थानीयकरण std :: locale class द्वारा नियंत्रित किया जाता है। डिफ़ॉल्ट रूप से, लोकेल-संवेदनशील ऑपरेशंस वैश्विक लोकेल का उपयोग करते हैं, जिसे डिफ़ॉल्ट रूप से लोकेल ऑब्जेक्ट का निर्माण करके प्राप्त किया जाता है, और std :: locale :: global (const std :: locale &) के साथ सेट किया जा सकता है।

खाली स्ट्रिंग के साथ लोकेल ऑब्जेक्ट का निर्माण (std :: locale ("")) प्रोग्राम के पर्यावरण से संबंधित एक लोकेल बनाता है।

प्रोग्राम स्टार्टअप पर, वैश्विक लोकेल "सी" या "क्लासिक" लोकेल है। कार्यक्रम के परिवेश स्थान के लिए वैश्विक वातावरण (जो मुझे लगता है कि तुम क्या पूछ रहे हैं है) सेट करने के लिए, आप इस प्रकार लिखें:

std::locale::global(std::locale("")); 

उदाहरण के लिए, मेरी क्षेत्रीय सेटिंग वर्तमान में फ़्रेंच (कनाडा) की तैयारी में हैं। इस चल रहा है:

int main(void) 
{ 
    std::cout << std::locale().name() << std::endl; 
    std::locale::global(std::locale("")); 
    std::cout << std::locale().name() << std::endl; 
    std::locale::global(std::locale("C")); 
    std::cout << std::locale().name() << std::endl; 
    return 0; 
} 

प्रिंट:

C 
French_Canada.1252 
C 
+0

बढ़िया है, यह मैं वास्तव में क्या जरूरत है। ऐसा लगता है कि आप सी लोकेल को भी सेट करने के लिए सेटलोकेल() में दिए गए सी ++ लोकेल के नाम() को पास भी कर सकते हैं। – Charlie

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

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