QT的多国语法翻译非常的实用,可以将开发完成的软件,直接翻译成另外一种语言,而不需要更改代码,也就是说一次开发可以同时发布多个语言版本的软件。

  • 翻译过程
  1. 创建翻译文件:从代码中自动提取出能翻译的文本,生成中间ts文件。
  2. 翻译元素:编辑ts文件,手动翻译每一项。
  3. 发布(lrelease)翻译好的ts文件,生成qm文件。
  4. 使用qm文件,翻译相应的文本。
  • 注意:能被翻译得文本需要使用特殊标记
    1.使用QObject::tr()或者QApplication::translate()修饰。例如
label.setText(tr("label"));
pushButton->setText(QApplication::translate("QtDemo", "pushButton"));

翻译详细过程

  1. 创建新的翻译文件
    右击工程 - > create new translation file
  2. 选择翻译成什么语言:这里从英文翻译到中文
  3. 双击打开自动生成ts文件,翻译文本

  4. 发布翻译好的ts文件,自动生成.qm文件(默认在工程目录下)。

  1. 使用.qm文件,翻译文本。
 QTranslator *translator = NULL;translator = new QTranslator;if (translator->load("qtdemo_zh.qm")){qApp->installTranslator(translator);}

翻译完成之后还需要从新绘制界面

void QtDemo::changeEvent(QEvent *e)
{if(e->type() == QEvent::LanguageChange){ui.retranslateUi(this);//更新显示界面}QMainWindow::changeEvent(e);
}

不需要翻译,也可以卸载翻译:qApp->removeTranslator(translator);

中英文实时切换案例

  • 头文件
#include <QtWidgets/QMainWindow>
#include "ui_qtdemo.h"class QtDemo : public QMainWindow
{Q_OBJECT
public:QtDemo(QWidget *parent = 0);~QtDemo();void changeEvent(QEvent *e);signals :void chineseAction_triggered(bool checked);void englishAction_triggered(bool checked);
public slots :void on_pushButton_clicked();
private:Ui::QtDemoClass ui;
};
  • cpp源文件
#include "qtdemo.h"
#include <QWidget>
#include <QStandardItemModel>
#include <QTreeView>
#include <QAction>
#include <QLabel>
QtDemo::QtDemo(QWidget *parent): QMainWindow(parent)
{ui.setupUi(this);//connect(ui.actionChinese, SIGNAL(triggered(bool)), this, SIGNAL((chineseAction_triggered(bool))));connect(ui.actionChinese, &QAction::triggered, this, &QtDemo::chineseAction_triggered);connect(ui.actionEnglish, &QAction::triggered, this, &QtDemo::englishAction_triggered);//connect(ui.actionChinese, &QAction::triggered, [this]() {//   printf("action chinese triggered\n");//   emit chineseAction_triggered(true);//});
}QtDemo::~QtDemo()
{}void QtDemo::changeEvent(QEvent *e)
{if(e->type() == QEvent::LanguageChange){ui.retranslateUi(this);}QMainWindow::changeEvent(e);
}void QtDemo::on_pushButton_clicked()
{}
//void QtDemo::chineseAction_triggered(bool check)
//{//  //qApp->installTranslator();
//}
  • main函数
#include "qtdemo.h"
#include <QtWidgets/QApplication>
#include <QTranslator>int main(int argc, char *argv[])
{QApplication app(argc, argv);QTranslator *translator = NULL;QtDemo w;QObject::connect(&w, &QtDemo::chineseAction_triggered, [&]() {printf("app Chinese triggered\n");if (!translator){translator = new QTranslator;if (translator->load("qtdemo_zh.qm")){app.installTranslator(translator);}}});QObject::connect(&w, &QtDemo::englishAction_triggered, [&]() {printf("app English triggered\n");if (translator){app.removeTranslator(translator);delete translator;translator = NULL;}});w.show();return app.exec();
}
  • 程序效果

参考资料

Qt 多语言切换——Qt语言家

QT in VS 多语言实现(中英文切换

在VS中实现QT的多国语言翻译相关推荐

  1. VS中使用QT,多国语言翻译问题

    VS版本:VS2010 Qt版本:Qt5.5.1 例 子:英译汉 以下介绍是我站在巨人们的肩膀上,并结合自己在工作中所遇到的问题作出的总结. 在VS中使用Qt编程,VS是不支持中文格式的,所以遇到了语 ...

  2. 在你的项目中使用Crowdin处理多国语言翻译

    在你的项目中使用Crowdin处理多国语言翻译 前言 一.Crowdin平台操作 1.创建仓库 2.翻译文件 二.本地项目操作 1.安装脚手架 2.上传源码 3.下载翻译文件 可能用得到的 前言 Cr ...

  3. QT在QML下实现多国语言翻译

    在某些情况下,我们使用QT开发的界面需要完成多国语言的翻译工作.QT在这方面其实已经给出了支持,本文主要讲述在使用QML编写界面的情况下如何实现多国语言的翻译. 若要实现QT多国语言翻译,必须要搞清楚 ...

  4. QT实现多国语言的动态切换

    摘要:本文论述了如何使用QT实现程序的多语系支持以及多语系的动态切换. 前沿 我们生活中用到的程序大多都是支持单一语言的,比如在中国我们用到的软件大多是汉语的,也有很少部分使用的是英语的,但是很少有软 ...

  5. 威纶触摸屏中如何组态设置多国语言进行切换?

    威纶触摸屏中如何组态设置多国语言进行切换? 如果我们在做一些出口的项目时,需要在触摸屏的画面中显示其他的语言,那么如何进行组态设置呢? 我们举个简单的例子来进行说明: 如下图所示,我们新建一个项目,然 ...

  6. c 程序多语言,怎样在程序中利用C支持多国语言

    怎样在程序中利用C支持多国语言 本文以emule为例,探讨一下多国语言支持的实现.选择emule,因为它的多国语言支持实现的相当好,可以支持动态切换.而且最关键,它是开源的,可以直接通过源码来研究它的 ...

  7. Office内嵌12国语言翻译功能----翻译好助手(转)

    Office内嵌12国语言翻译功能----翻译好助手(转)[@more@] 这是Office XP/2003之后才有的超好用功能,但可能很多人都不知道,所以,每次遇到不会念或看不懂的英文.日文,往往束 ...

  8. android多国语言翻译包命名,android多国语言翻译工具,一键生成28国家翻译6666翻车了...

    最近把软件发到google play苦于多国语言,手动翻译数量太多太蛋疼,因而用百度翻译api进行多国语言翻译.java 很少说直接上代码:json ""; api 匹配的是app ...

  9. 多国语言翻译-多国翻译语言软件免费

    多国语言翻译,今天给大家分享一款免费多国语言翻译,我们为什么要选择这款好用的翻译软件,因为汇集了世界最好的几个翻译平台(百度/谷歌/有道),第一点翻译质量高,选择性多.第二点支持各种语言互译,第三点可 ...

最新文章

  1. Scala in depth 6 Scala的类型系统 上
  2. docker之Dockerfile实践
  3. LeetCode-53. 最大子序和-最简单的动态规划(Python3)
  4. 关于持续集成,质量管理,工具等
  5. string容量JAVA_java的StringBuilder类的长度和容量有什么区别呢?
  6. 《Attention Is All You Need》
  7. MySQL 5.7 免安装版配置
  8. Linkedin如何避免封号
  9. 高手过招 放“码”出击 | 2022 Google 全球编程比赛集结倒计时!
  10. java mac air_敲代码的Macbook Air2020终于到啦
  11. 基于模型的软件开发方法综述
  12. Hashcat密码破解攻略
  13. 计算机网络——应用层之万维网(WWW)
  14. [转]100本名著浓缩成了100句话
  15. o.s.s.s.TaskUtils$LoggingErrorHandler : Unexpected error occurred in scheduled task
  16. NB-IOT的背景基础知识
  17. 常用电子元器件应用要点及识别方法
  18. python 期权量化交易_两种欧式期权的四种支付方式以代码实现
  19. Vue小黑记事本案例
  20. win下bat批量重命名文件

热门文章

  1. js获取当前时间与获取时间戳,时间戳转换时间和时间转换时间戳
  2. 开源WebGIS架构
  3. 【软件工程】小学四则运算 “软件”之初版
  4. XDCTF2014 Writeup
  5. 【原创】过来人聊聊社招大厂与HR谈offer的经验
  6. window 配置 OutLook 2016
  7. 亮度温度(Brightness Temperatures)
  8. vscode如何链接github
  9. 物联网开发平台B-L475E-IOT01A探索套件简介
  10. 编程c语言 十进制转八进制_使用C编程语言处理八进制值