动态切换语言(带源码)

本站所有文章由本站和原作者保留一切权力,仅在保留本版权信息、原文链接、原文作者的情况下允许转载,转载请勿删改原文内容, 并不得用于商业用途。 谢谢合作。
原文链接:动态切换语言(带源码)

在编写国际化程序的时候,在很多情况下都是在系统启动的过程中选择语言,然后加载对应的地方语言翻译文件,实现语言的本地化。
但是也会有用户需要进行动态的语言切换(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 <QDialog> 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 <QApplication> #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 

ts文件,不往上贴了,费劲。

你可能感兴趣的:(动态切换语言(带源码))