QT国际化(i18n)

 

六、QT国际化(i18n)

要使得应用程序支持多种 语言,并且能够灵活切换,就需要添加QT的国际化支持。

打开QTDemo.pro,添加如下语句:

TRANSLATIONS += en.ts zh_CN.ts zh_TW.ts

然后在命令行窗口中输入 以下命令:

lupdate QTDemo.pro

这样就生成了3个语言文件:en.ts,zh_CN.ts,zh_TW.ts,分别存放英文、中文、繁体中

文的字符串。en.ts的内容如下:

<?xml version="1.0" encoding="utf-8"?>

<!DOCTYPE TS><TS version="1.1">

<context>

<name>Form</name>

<message>

<location filename="form1.ui" line="13"/>

<source>Dialog</source>

<translation type="unfinished"></translation>

</message>

<message>

<location filename="form1.ui" line="25"/>

<source>Exit</source>

<translation type="unfinished"></translation>

</message>

</context>

</TS>

这是一个XML文件,其中存放了所有工程中涉及到的字符串。

用linguist(在QT安装目录下的bin目录中)打开zh_CN.ts,选择“编辑”->“翻译文件设置…”,选择

Chinese/China:

选中某一个字符串,在译文文本框中输入对应于中文的字符串:

在翻译完成后一定要记得点击一下字符串前面的“?”,使其变成一个“√”:

最 后选择“文件”->“另外发布为…”,将语言文件发布为zh_CN.qm文件

用同样的方法生成zh_TW.qm文件,唯一不同的地方就是翻译文件设置中应该选择Chinese/Taiwan。

对于en.ts 文 件,不需要翻译,直接发布为en.qm即可。

下面在程序中添加对国际 化的支持,将main.cpp修改为如下内容:

#include <QApplication>

#include <QTranslator>

#include "MyDlg.h"

int main(int argc, char **argv)

{

QApplication app(argc, argv);

QTranslator translator;

translator.load(QString(argv[1]));

app.installTranslator(&translator);

MyDlg *mydlg = new MyDlg;

return mydlg->exec();

}

重新执行make命令,生成可执行程序。

在运行程序时通过传递命 令行参数指定所使用的语言,注意不需要指定扩展名.qm,例

如:

QTDemo zh_CN

这样运行程序时界面就编 程中文的了,是不是很简单啊~


动态的语言切换功能 :

1. 为用户提供一个切换方法,按钮或者菜单都可以。

2. 在用户切换语言的时候,重新装载对应的翻译文件。

    例如切换到日语翻译:

   appTranslator.load("myapp_jp.qm");

3. 重新装载翻译文件后,重新调用tr()生成新的字符串。

    用户可以所有可翻译的字符串搜集到retranslateUi函数。

    (可以参考ui生成的h文件)


实现语言切换菜单的功能:

// 切换翻译文件,全局函数

void switchLanguage(QString lan)
{
    appTranslator.load("myapp_"+ lan, ":/translations/qm/");
}

// 切换到日文界面

void MainWindow::on_actionLanguageJp_triggered()
{

    // 先切换语言文件,然后信息翻译ui
    switchLanguage("jp");
    ui.retranslateUi(this);
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值