2010-07-10 17 views
5

मैं अमेरिकी या ब्रिटिश स्थानीय वाक्य के साथ एक std::locale वस्तु का दृष्टांत के प्रयास में।
std::locale loc("en_US") और std::locale loc("en_GB")खराब लोकेल नाम रनटाइम अपवाद फेंक दें। "" या "C" का उपयोग करके लोकेल बनाना ठीक काम करता है; हालांकि, मुझे एक अलग देश लोकेल स्थापित करने में परेशानी हो रही है।std :: locale loc ("en_US") क्यों अपवाद फेंकता है?

कारण मैं इस इकाई परीक्षण के लिए है करने के लिए, सुनिश्चित करें कि स्ट्रिंग छँटाई तरीकों सही ढंग से काम का एक संग्रह बनाने के लिए करना चाहते हैं।

मैं यह भी कहना चाहिए कि मैं विजुअल स्टूडियो 2008 का उपयोग कर Windows में कोडिंग कर रहा हूँ और मैं अपने कोड पार मंच रखने के लिए, यदि संभव हो तो करना चाहते हैं।

उत्तर

6

श्रृंखलाएं जिनमें std::locale समर्थन कार्यान्वयन विशिष्ट हैं, यह हो सकता है कि कार्यान्वयन उस स्ट्रिंग का समर्थन नहीं करता जो आप तर्क के रूप में गुजर रहे हैं।

के बाद आप Windows में प्रोग्रामिंग कर रहे हैं, तो आप Language Strings, जो setlocal द्वारा प्रयुक्त भाषा पहचानकर्ता हैं, और जिस देश पहचानकर्ता के लिए Country/Region Strings रुचि हो सकती है। जहां तक ​​मैं देख सकता हूं, भाषा पहचानकर्ता एक हाइफ़न का उपयोग करते हैं (उदा। एन-यूएस, nl-BE, और zh-HK)।

आप पर std::locale::global(std::locale("zh-CN")) Gets "Bad locale name"??

+2

मैंने देखा है कि मेरी कुलपति ++ एक्सप्रेस 2012 अब स्वीकार करता है "en-US" लेकिन अभी भी "en_US" पर फेंकता । –

5

आप बेहतर इस्तेमाल boost.locale इस के लिए ICU लाइब्रेरी का उपयोग करता है और जानकारी प्राप्त कर सकते हैं। आईसीयू कई स्थानीय प्रदान करता है और आपके द्वारा उपयोग किए जाने वाले ओएस पर निर्भर नहीं है। एसटीडी उत्पन्न करने के लिए :: स्थान में आप लिखते हैं की जरूरत है:

boost::locale::generator gen; 
std::locale loc = gen("en_US"); 

अधिक जानकारी के लिए: http://www.boost.org/doc/libs/1_57_0_b1/libs/locale/doc/html/index.html

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