QT国际化

转载 2012年03月26日 21:58:34

在编写国际化程序的时候,很多情况下都是在系统启动的过程中选择语言,然后加载对应的地方语言翻译文件,实现语言的本地化。

但是也会有用户需要进行动态的语言切换(Dynamic Language Switching),也就是在程序主体都运行起来后,需要改变语言的选项。而用户不希望因为语言切换而引起程序的重启或者窗口的关闭。

Qt的国际化设计提供了这种可能。要实现这种动态切换,只需要在程序里使用一点小小的技巧,就是把调用了Qt翻译语句tr的代码集中在某个和窗体变化无关的函数里,比如retranslateStrings()这样的函数里。在改变语言的时候,调用这个函数就可以了。

例子:

//dialog.h

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
class QLabel;
class QPushButton;

class Dialog : public QDialog
{
        Q_OBJECT
public:
        Dialog(QWidget *parent = 0);

private:
        QLabel *label;
        QPushButton *okButton;
        int flag;

private slots:
        void retranslateStrings();
        void switchLang();
};

#endif

//dialog.cpp

#include <QtGui>
#include "dialog.h"

Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
{
    label = new QLabel;
    okButton = new QPushButton;
    connect(okButton, SIGNAL(clicked()), this, SLOT(switchLang()));
    flag = 0;
    retranslateStrings();

    QVBoxLayout *mainLayout = new QVBoxLayout;
    mainLayout->addWidget(label);
    mainLayout->addWidget(okButton);
    setLayout(mainLayout);
}

//tr()相关的语句
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();
}

//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

//编译运行
lupdate switchlang.pro
lrelease switchlang.pro

qmake

make




转载地址:http://hi.baidu.com/jiangbeidou/blog/item/b2adedf1d66cfea6a50f5253.html


QT国际化例子

  • 2014年07月11日 12:45
  • 694KB
  • 下载

Qt之国际化

  • 2016年08月09日 09:47
  • 42KB
  • 下载

Qt中动态实现语言国际化

Qt中动态实现语言切换( Qt5.7.1)         为了方便在Widget.ui中放置Combo Box 对象名为languageBox。放置一个button,右击该button改变文本为:...
  • gao_qj
  • gao_qj
  • 2017年07月19日 18:51
  • 99

QT国际化中文

  • 2014年11月04日 14:33
  • 636KB
  • 下载

Qt翻译文件实现国际化

  • 2015年04月23日 10:11
  • 51KB
  • 下载

Qt程序国际化工具使用和相关代码编写规范

1.Qt程序国际化背景          Qt程序国际化指的是提取程序源码中的需要进行翻译的字符串,翻译成相应的语言,置于界面程序中,使得软件能够满足不同国家和地区的用户需求,软件的汉化即是程序国际化...
  • swrd456
  • swrd456
  • 2015年02月27日 16:38
  • 460

Qt应用程序国际化工程示例

  • 2017年06月14日 18:53
  • 21KB
  • 下载

Qt多语言国际化demo

  • 2017年08月04日 14:39
  • 979KB
  • 下载

QT中文乱码与国际化支持

QT国际化支持     Qt内部采用的全Unicode编码,这从根本上保证了多国语界面实现的正确性和便捷性。Qt本身提供的linguist工具,用来实现翻译过程十分方便。MFC中利用资源DLL切换资...

qt多国语言国际化

  • 2012年02月16日 16:54
  • 988KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:QT国际化
举报原因:
原因补充:

(最多只允许输入30个字)