本文讲解的是Qt 动态切换语言,在编写国际化程序的时候,在很多情况下都是在系统启动的过程中选择语言,然后加载对应的地方语言翻译文件,实现语言的本地化。
但是也会有用户需要进行动态的语言切换(Dynamic Language Switching),也就是在程序主>体都运行起来后,需要改变语言的选项。而用户不希望因为语言切换而引起程序的重启或者窗口的关闭。
Qt的国际化设计提供了这种可能。要实现这种动态切换,只需要在程序里使用一点小小的技巧,就不是把调用了Qt翻译语句tr的代码集中在某个和窗体变化无关的函数里,比如retranslateStrings()这样的函数里。在改变语言的时候,调用这个函数就可以了。
下面是附带的一个演示程序,仅为证明功能使用。没有过多考虑代码的严密性。
//dialog.cpp #include #include "dialog.h" Dialog::Dialog(QWidget *parent) : QDialog(parent) { label=new QLabel(this); okButton=new QPushButton(this); connect(okButton,SIGNAL(clicked()),this,SLOT(switchlang())); flag=0; retranslateStrings(); QVBoxLayout *mainLayout = new QVBoxLayout; mainLayout->addWidget(label); mainLayout->addWidget(okButton); setLayout(mainLayout); } void Dialog::retranslateStrings() { label->setText(tr("Name:")); okButton->setText(tr("Switch Language")); setWindowTitle(tr("Switch Language ...")); } void Dialog::switchlang() { QTranslator translator; if(0==flag){ translator.load("switchlang_zh"); flag=1; }else { flag=0; } qApp->installTranslator(&translator); retranslateStrings(); } //dialog.h #ifndef DIALOG_H #define DIALOG_H #include class QLabel; class QPushButton; //! [0] class Dialog : public QDialog { Q_OBJECT public: Dialog(QWidget *parent = 0); private: QLabel *label; QPushButton *okButton; int flag; private slots: void retranslateStrings(); void switchlang(); }; //! [0] #endif //main.cpp #include #include "dialog.h" int main(int argc, char *argv[]) { QApplication app(argc, argv); Dialog dialog; dialog.show(); return app.exec(); } //switchlang.pro TEMPLATE = app TARGET = DEPENDPATH += . INCLUDEPATH += . # Input HEADERS += dialog.h SOURCES += dialog.cpp main.cpp TRANSLATIONS+=switchlang_zh.ts
总结:
1、在main.cpp中加入
#include<QTranslator>
.
.
.
QTranslator translator;
translator.load("zh_CN",".");//zh_CN.文件
app.installTranslator(&translator);
.
.
来自 http://mobile.51cto.com/symbian-270112.htm