Qt的国际化示例程序以及步骤--实现Qt程序的动态切换语言功能

本文讲解的是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);
.
.

2、在写入的字段加上tr前缀,如tr("hello");
3、在.pro文件中加入TRANSLATOR +=zh_CN.ts
4、命令行模式lupdate -verbose my.pro ----用来生成zh_CN.ts文件
5、用Qt Linguist打开zh_CN.ts文件,编辑每一项对应的翻译文字
6、点击Qt Linguist中的“文件-发布”生成zh_CN.qm文件
7、Qt Creator中重新编译运行即可
    

来自  http://mobile.51cto.com/symbian-270112.htm

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值