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之国际化

Qt国际化属于Qt高级中的一部分,本想着放到后面来说,上节刚好介绍了Qt Linguist,趁热打铁就一起了解下。对于绝大多数的应用程序,在刚启动时,需要加载默认的语言(或最后一次设置的语言)。在使用...
  • u011012932
  • u011012932
  • 2015年12月12日 17:46
  • 10278

QT国际化(中英转换)

QT国际化(中英转换)我们都知道在安卓中,想做国际化很简单,只需要建立对应的资源文件,在对应的strings里面修改字符即可。但在QT中相对会比较麻烦,没安卓那么简单,不过也不是很复杂,最近在弄国际化...
  • u012528526
  • u012528526
  • 2017年01月24日 13:34
  • 980

Qt国际化方法与国际化不完全问题小结

概述       最近自己在做项目的时候,由于需要跨平台,防止代码乱码,需要把项目中那些中文字都用英文代替,然后翻译成需要的语言。但是在我按照Qt国际化的步骤后,总是有的汉化成功了,有的却没有成功,...
  • Andy_93
  • Andy_93
  • 2016年12月07日 14:39
  • 832

qt 国际化tr()

QString QObject::tr ( const char * sourceText, const char * disambiguation = 0, int n = -1 ) [static...
  • qustdjx
  • qustdjx
  • 2012年04月27日 18:51
  • 2665

QT国际化动态切换

QT国际化动态切换在之前写的一篇QT国际化(中英文切换)中描述了如何用QT语言家工具来更新和发布翻译,以及如何在代码中加载语言库,如果你的需求是根据系统本地语言来切换,那么只需在程序入口处判断本地语言...
  • u012528526
  • u012528526
  • 2017年02月09日 13:41
  • 1067

Qt 国际化之二:多国语界面动态切换的实现

 多国语界面的实现,在MFC中是很别扭的。以前在作MFC时,实现多国语言的界面,只有把资源文件做成各个语言的资源DLL,在程序启动时,根据选择判断选择载入哪个DLL来获取资源。MFC的资源也是分语言的...
  • derryzhang
  • derryzhang
  • 2009年11月25日 17:40
  • 4052

QT国际化

Qt的国际化和本地化 Jump to: navigation, search 国际化是指在代码设计上加入能方便的移植到其他国家和地区的特性。而本地化是指将具有国际化支持的代码翻译成本国或地区的...
  • kl222
  • kl222
  • 2014年03月12日 13:31
  • 5766

Qt国际化多国语言和发布例子

一  Qt Widgets Application类型工程 1. 创建Qt Widgets Application工程hello_i18n 2. 编辑pro工程文件,新增代码 TRANSLAT...
  • happyrabbit456
  • happyrabbit456
  • 2016年06月20日 17:40
  • 1458

Qt 多国语言国际化

简述:Qt 提供了一种国际化方案,在程序使用过程中,不需要重启应用程序就可以实现语言的动态切换 1、实现语言国际化步骤  要实现语言国际化,需要执行以下步骤: A.  对用户可见的...
  • hebbely
  • hebbely
  • 2017年04月06日 16:20
  • 1141

【Qt】VS开发Qt程序的国际化使用

一字一句,解读VS进行QT国际化翻译过程!
  • u010111033
  • u010111033
  • 2016年12月16日 14:00
  • 1133
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:QT国际化
举报原因:
原因补充:

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