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的内容如下:

Form

Dialog

Exit

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

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

Chinese/China:

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

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

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

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

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

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

#include

#include

#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);
}


你可能感兴趣的:(Qt)