【Qt一骚操作】Qt语言家 Qt Linguist 使用 【总结】

Qt语言家 Qt Linguist


1)简介

​ 源代码中经常会出现一些字符串,比如定义要显示在控件上的文本,在不同的语言环境下,可能会需要显示不同语言对应的文本。针对多语言切换的需求,Qt提供的解决方案是,在所有需要翻译的字符串处都使用QObject::tr()函数,Qt提取出所有QObject::tr()函数的参数,使用Qt语言家对其进行翻译后发布,Qt程序可以在运行时加载发布的翻译文件以更新文本字符串。

​ QT语言家就是解决字符串乱码和翻译的问题。


2)操作

在QtCreator 中新建一个Demo项目,然后对工程文件中的pro文件进行编辑,在最后加上一行

TRANSLATIONS += demo2_zh_CN.ts

【Qt一骚操作】Qt语言家 Qt Linguist 使用 【总结】_第1张图片

在菜单栏上选择“工具”-“外部”-“Qt语言家”-“更新翻译”
然后在你的项目路径下就会生成一个叫做“demo2_zh_CN.ts”的文件

【Qt一骚操作】Qt语言家 Qt Linguist 使用 【总结】_第2张图片

【Qt一骚操作】Qt语言家 Qt Linguist 使用 【总结】_第3张图片

点击所有程序”-“找到你自己安装的QT目录下找到“Linguist” 打开Qt语言家,“文件”-“打开” 选择项目路径下的Demo2_zh_CN.ts。如图:

【Qt一骚操作】Qt语言家 Qt Linguist 使用 【总结】_第4张图片

左侧上下文面板中,选择MainWindow,在源文下选择”btn1”,在下方面板中,汉语 译文输入框中输入“按钮1”,然后点击上面绿色的勾号按钮,变为勾号,确认这一行已经翻译,最后点击保存退出。

添加翻译与未添加翻译的按钮控件 在ts 文件对比如下:

【Qt一骚操作】Qt语言家 Qt Linguist 使用 【总结】_第5张图片

然后即可回到工程文件中,点击工具–外部–Qt语言家–发布翻译

【Qt一骚操作】Qt语言家 Qt Linguist 使用 【总结】_第6张图片

然后在QtCreator中,编辑main.cpp 载入翻译文件

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
	
	//  ------  载入翻译 -------
    QTranslator translator; // 新建翻译类
    translator.load("Demo2_zh_CN.qm", "./"); // 导入生成的文件
    a.installTranslator(&translator); //装入
	//  ------  载入翻译 -------

    MainWindow w;
    w.show();
    return a.exec();
}


3)试错阶段:

<1>如果想在QtCreator中运行,显示翻译的话,则
    translator.load("Demo2_zh_CN.qm", "../Demo2"); // 导入生成的文件

【Qt一骚操作】Qt语言家 Qt Linguist 使用 【总结】_第7张图片

<2>如果想在编译安装之后,能显示翻译,则需要配置pro文件以及修改load路径地址
Demo2.pro文件

TRANSLATIONS += Demo2_zh_CN.ts

dtk_translations.path = /usr/share/$$TARGET/translations
dtk_translations.files = $$PWD/*.qm

INSTALLS += dtk_translations

main.cpp 需要修改为

translator.load("Demo2_zh_CN.qm", "/usr/share/Demo2/translations"); 

【Qt一骚操作】Qt语言家 Qt Linguist 使用 【总结】_第8张图片

<3>还有一种方式就是把*.qm加入资源文件*.qrc(根据路径不同,也是相应的修改load中的形参)

操作如下:

【Qt一骚操作】Qt语言家 Qt Linguist 使用 【总结】_第9张图片

main.cpp 需要修改为

translator.load("Demo2_zh_CN.qm", ":/"); 

即可实现。


4) Qt翻译–注释添加

重要:讨论添加 == 开发人员注释 == 问题:

QString QObject::tr(const char *sourceText, const char *disambiguation = Q_OBJECT, int n = Q_OBJECT)
// disambiguation -- 消除歧义的意思,个人理解是"注释"

那么针对btn1 按钮的文案添加注释

QPushButton *btn1 = new QPushButton(this);
btn1->setText(tr("btn1", "button"));

将会在ts,以及Qt语言家(Qt Linguist)上产生一些变化,如下图:

【Qt一骚操作】Qt语言家 Qt Linguist 使用 【总结】_第10张图片

在语言家可看出,新增了一个““开发人员注释” 一栏,即可根据这样类似的注释,有区别的去翻译相关空间文案及其信息

【Qt一骚操作】Qt语言家 Qt Linguist 使用 【总结】_第11张图片

你可能感兴趣的:(Qt,qt,开发语言,linux)