2012-11-09 42 views
9

Tôi đã cố gắng thay đổi ngôn ngữ bằng chức năng QLocale và setDefault nhưng có vẻ như nó không hoạt động. Dưới đây là ví dụ về việc thay đổi ngôn ngữ bằng cách sử dụng thư viện bản địa hóa C và QLocale. Đối với thư viện bản địa hóa C có vẻ như nó hoạt động, nhưng đối với QLocale có vẻ như lệnh gọi hàm setDefault bị bỏ qua.Thay đổi ngôn ngữ trong 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; 

Làm cách nào để thay đổi ngôn ngữ đúng trong Qt để nó ảnh hưởng đến chương trình?

Trả lời

13

QLocale::setDefault() không thay đổi ngôn ngữ hệ thống. Nó thay đổi đối tượng QLocale được tạo với hàm tạo mặc định là gì.

Giả sử, ngôn ngữ hệ thống chỉ có thể được thay đổi thông qua bảng điều khiển/tùy chọn hệ thống của người dùng. Nếu bạn muốn định dạng một cái gì đó không có trong miền địa phương hệ thống, bạn cần phải làm điều đó một cách cụ thể với một đối tượng miền địa phương.

Mã này:

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

Prints này:

"piątek, 9 listopada 2012" 
"pl_PL" 
Các vấn đề liên quan