2012-11-09 21 views
9

QLocaleとsetDefault関数を使用してロケールを変更しようとしましたが、動作しないようです。次に、CのローカリゼーションライブラリとQLocaleを使用してロケールを変更する例を示します。 Cのローカリゼーションライブラリの場合は動作するようですが、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; 

Qtでロケールを正しく変更してプログラムに影響を与える方法はありますか?

答えて

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" 
関連する問題