Qt

2012-11-09 12 views
9

में लोकेल बदलना मैंने QLocale और setDefault फ़ंक्शन का उपयोग करके लोकेल को बदलने की कोशिश की लेकिन ऐसा लगता है कि यह काम नहीं करता है। सी स्थानीयकरण पुस्तकालय और QLocale का उपयोग कर लोकेल बदलने का उदाहरण यहां दिया गया है। सी स्थानीयकरण पुस्तकालय के लिए ऐसा लगता है कि यह काम करता है, लेकिन QLocale के लिए ऐसा लगता है कि setDefault फ़ंक्शन कॉल को अनदेखा किया जाता है।Qt

QLocale curLocale(QLocale("pl_PL")); 
QLocale::setDefault(curLocale); 
QDate date = QDate::currentDate(); 
QString dateString = date.toString(); 
// prints "Fri Nov 9 2012" but that was not expected 
std::cout << dateString.toStdString() << std::endl; 
// prints "en_US", but shouldn't it be "pl_PL"? 
std::cout << QLocale::system().name().toStdString() << std::endl; 

std::setlocale(LC_ALL, "pl_PL"); 
// prints "pl_PL" 
std::cout << std::setlocale(LC_ALL, 0) << std::endl; 
std::time_t currentTime; 
std::time(&currentTime); 
std::tm* timeinfo = std::localtime(&currentTime); 
char charArray[40]; 
std::strftime(charArray, 40, "%a %b %d %Y", timeinfo); 
// prints "pi lis 09 2012" and that's cool 
std::cout << charArray << std::endl; 

क्यूटी में उचित लोकेल को कैसे बदला जाए, तो यह प्रोग्राम को प्रभावित करता है?

उत्तर

13

QLocale::setDefault() सिस्टम लोकेल को नहीं बदलता है। यह बदलता है कि डिफ़ॉल्ट कन्स्ट्रक्टर के साथ बनाई गई QLocale ऑब्जेक्ट क्या है।

माना जाता है कि सिस्टम लोकेल केवल उपयोगकर्ता द्वारा सिस्टम नियंत्रण पैनल/वरीयताओं के माध्यम से बदला जा सकता है। यदि आप सिस्टम लोकेल में नहीं है जो कुछ प्रारूपित करना चाहते हैं, तो आपको विशेष रूप से लोकेल ऑब्जेक्ट के साथ ऐसा करने की आवश्यकता है।

इस कोड:

QLocale curLocale(QLocale("pl_PL")); 
QLocale::setDefault(curLocale); 
QDate date = QDate::currentDate(); 
QString dateString = QLocale().toString(date); 
qDebug() << dateString; 
qDebug() << QLocale().name(); 

प्रिंटों इस:

"piątek, 9 listopada 2012" 
"pl_PL" 
संबंधित मुद्दे