目录

操作步骤

编写代码注意事项

容易疑惑点

代码


操作步骤

步骤:1.新建一个qt工程

2.在该工程的pro文件中添加(什么名字在什么路径下不影响)

TRANSLATIONS = lang_en.ts\
lang_zh.ts\

3.右键工程名,执行qmake。

第一种方法:工具---》外部---》qt语言家---》更新翻译,即可生成.ts文件(其实是个xml文件)。

第二种方法:在想要放ts文件的目录下,按住shift键,点击鼠标右键,选择在此处打开powershell窗口,执行“qt安装目录/bin/lupdate.exe   xxx.pro文件”。

两种方式都会生成ts文件。

4.在qt安装目录的bin下打开qt linguist,或者在开始菜单中打开也行。点击文件---》打开---》把多个ts文件都选中打开。开始翻译。翻译结束ctrl+s保存。

第一种方法:再次点击文件----》发布全部。

第二种方法:在想要放qm文件的目录下,按住shift键,点击鼠标右键,选择在此处打

开powershell窗口,执行“qt安装目录/bin/lrelease.exe   xxx.pro文件”。

两种方式都会生成qm文件。

5.点击qt左下角三角形运行即可。

编写代码注意事项

在main中写QTranslator代码 。

 int main(int argc, char *argv[]){QApplication app(argc, argv);//翻译程序QTranslator translator;translator.load("cn.qm");app.installTranslator(&translator);app.exec();
}

但是在main中像上面方式载入qm文件在实际项目开发过程中没有意义。因为在main中只能加载一个qm文件。如果你的界面只需要一种语言,直接在widget中设置好相应的语言文本就可以了。

所以写到widget中是较为合适的。

在widget中添加QComBoBox,在QComBoBox中添加多种语言。#include <QApplication>Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);m_translator = new QTranslator();}关键代码1:
connect(ui->comboBox,SIGNAL(currentIndexChanged(int)),this,SLOT(changeLang(int)));关键代码2:
void changeLang(int)
{if(m_translator != nullptr){qApp->removeTranslator(m_translator);}bool flag = m_translator->load(langCode);if(flag){qDebug() << "load successful";        qApp->installTranslator(m_translator);}else{qDebug() << "load failed" ;}
}

当你按照上述方式加载文件后,如果文件路径正确,会打印load successful。 但是你切换combobox时,发现你想翻译的文件内容没有发生改变。在main中改变qm文件,widget却可以更改成相应的语言。

什么原因呢?因为改变QComBoxBox时,界面已经初始化了。改变QComBoxBox对应的qm文件之后,会查找带有“tr”的地方。但是这个槽执行到installTranslator就结束了。找不到tr文本。

所以需要在installTranslator之后加类似以下代码(凡是你需要翻译的都要像以下代码一样加上)

ui->label->setText(tr("Hello World"));
ui->label_2->setText(tr("we"));comboBox->setItemText(0, tr("English"));
comboBox->setItemText(1, tr("Chinese"));

在查找资料的过程中,发现有人写以下代码。

ui.retranslateUi(this);

只有label,button之类的是可以这么写的,点击button切换像手机的中英文切换。但是用到combobox时,使用这个就不行了。retranslateUi是ui文件生成的ui_xxx.h中的接口。该接口会将combobox先清空,然后按照你在构造中添加item的顺序重新添加item。导致的问题就是你选择第二个item,界面上永远显示第一个ltem。

容易疑惑点

网上资料有说加载的qm文件必须放在你翻译的界面前面。这句话对了一半。

1.qm文件可以在翻译的界面前面加载,但不是必须的。

2.qm文件也可以在翻译的界面里面加载。但需要加入刷新界面的语句。比如:

ui->label->setText(tr("Hello World"));
ui->label_2->setText(tr("we"));comboBox->setItemText(0, tr("English"));
comboBox->setItemText(1, tr("Chinese"));

代码

widget文件证明了疑惑点中的第二个

secondForm文件证明了疑惑点中的第一个。

ui文件自己根据代码搞吧。

pro文件部分.....
TRANSLATIONS = lang_en.ts\
lang_zh.ts\
lang_la.ts
widget.h#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QComboBox>
#include <QTranslator>#include "secondform.h"namespace Ui {
class Widget;
}class Widget : public QWidget
{Q_OBJECTpublic:explicit Widget(QWidget *parent = 0);~Widget();
private slots:void changeLang(int index);private:void createScreenLocal();void changeTr(const QString& langCode);void refreshLabel();
private:Ui::Widget *ui;QComboBox* combo;static QTranslator * m_translator;secondForm* m_secFormFo;
};#endif // WIDGET_H
widget.cpp#include "widget.h"
#include "ui_widget.h"
#include <QApplication>#include <QDebug>
#include <QVBoxLayout>QTranslator * Widget::m_translator = nullptr;//总共两个问题
//1.加载的qm文件必须放在你翻译的某个界面前面。
//2.假如你没放在前面,在本界面中载入,需要在载入文件之后加入刷新界面的语句。
Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);m_translator = new QTranslator();createScreenLocal();
}Widget::~Widget()
{delete ui;
}void Widget::changeLang(int index)
{QString langCode = QString("D:/project/Qt/translator1/");if(index == 0){langCode +="lang_en.qm";}else if(index == 1){langCode +="lang_zh.qm";}else{langCode +="lang_la.qm";}changeTr(langCode);refreshLabel();m_secFormFo = new secondForm();m_secFormFo->show();
}void Widget::createScreenLocal()
{combo = new QComboBox();combo->addItem(tr("English"));combo->addItem(tr("Chinese"));combo->addItem(tr("Latin"));QVBoxLayout*  layout = new QVBoxLayout();layout->addWidget(combo,1);refreshLabel();setLayout(layout);connect(combo,SIGNAL(currentIndexChanged(int)),this,SLOT(changeLang(int)));
}void Widget::changeTr(const QString &langCode)
{if(m_translator != nullptr){qApp->removeTranslator(m_translator);}bool flag = m_translator->load(langCode);if(flag){qDebug() << "load successful";qDebug() << langCode;qApp->installTranslator(m_translator);}else{qDebug() << "load failed" ;}
}void Widget::refreshLabel()
{ui->label->setText(tr("Hello World"));ui->label_2->setText(tr("we"));combo->setItemText(0, tr("English"));combo->setItemText(1, tr("Chinese"));combo->setItemText(2, tr("Latin"));
}
main.cpp#include "widget.h"
#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();return a.exec();
}
secondForm.h#ifndef SECONDFORM_H
#define SECONDFORM_H#include <QWidget>namespace Ui {
class secondForm;
}class secondForm : public QWidget
{Q_OBJECTpublic:explicit secondForm(QWidget *parent = 0);~secondForm();private:Ui::secondForm *ui;
};
secondForm.cpp#include "secondform.h"
#include "ui_secondform.h"secondForm::secondForm(QWidget *parent) :QWidget(parent),ui(new Ui::secondForm)
{ui->setupUi(this);
}secondForm::~secondForm()
{delete ui;
}

QTranslator翻译器相关推荐

  1. Office 2010的贴心功能:迷你翻译器

    为了更好地实现跨区域跨语言通信协作,Office 2010进一步完善了多语言功能,在翻译服务中提供了"翻译文档"."翻译选定文本"."迷你翻译器&qu ...

  2. QEMU,一个快速的和便捷的动态翻译器(论文译文)

    QEMU, a Fast and Portable Dynamic Translator论文译文  https://www.usenix.org/legacy/event/usenix05/tech/ ...

  3. 注册界面翻译_B站UP主自制的开源OCR翻译器走红Github,用一次就粉了

    来自:开源最前线(ID:OpenSourceTop)  项目地址:https://github.com/PantsuDango/Dango-Translator 最近一个B站UP主自己撸了一个翻译神器 ...

  4. python在线编程翻译器-【分享】python 翻译器,爬取百度翻译,并附上源码

    [Python] 纯文本查看 复制代码#!/usr/bin/python # -*- coding: cp936 -*- ####################################### ...

  5. python翻译成计算机是啥_基于Python的业英语翻译器实现

    # -*- coding:utf-8 -*-import requests fromrequests.exceptionsimportRequestException #import tk#tkint ...

  6. OpenCASCADE:STEP翻译器的介绍

    OpenCASCADE:STEP翻译器的介绍 介绍 开放级联技术中的 STEP 交换 STEP接口 介绍 STEP越来越广泛地用于各种软件之间的数据交换,涉及CAD.PDM.Analysis等--ST ...

  7. OpenCASCADE:IGES 翻译器的介绍

    OpenCASCADE:IGES 翻译器的介绍 IGES 接口读取 IGES 文件并将它们转换为 Open CASCADE Technology 模型.该界面能够翻译一个实体.一组实体或整个文件.在开 ...

  8. Qt学习笔记之QTranslator

    QTranslator类为文本输出提供国际化支持. 此类的一个对象包含一组从源语言到目标语言的转换.QTranslator提供了在翻译文件中查找翻译的功能.翻译文件是使用Qt Linguist创建的. ...

  9. python文本框清空_用Python制作mini翻译器

    来源:http://suo.im/5ZI20R 1. 实例描述 在平时编程的过程中,会经常在网上翻译一些单词,本文使用Python制作一款翻译小工具,不仅可以自己用,还可以嵌入到程序当中.运行程序,效 ...

最新文章

  1. 敏捷产品Backlog需求管理
  2. Java基类共同属性设置_java – 你有一个Hibernate实体的基类吗?
  3. OSPF路由配置实例
  4. SSAS系列——【03】多维数据(多维数据集对象)
  5. 简单的REST的框架实现
  6. 判断字符串是否以指定字符开头
  7. RuntimeError: ‘cryptography‘ package is required for sha256_password or caching_sha2_password auth m
  8. 一起开心2020暑假训练第二周 图论(模板题)
  9. java nio socket长连接_nio实现Socket长连接和心跳
  10. 百度在线解析站不限速下载
  11. 5001 boost之bind库函数
  12. Java中设计模式之装饰者模式-3
  13. 浅谈测试管理—兵者诡道也
  14. java captcha 验证码_java生成图片验证码的示例代码
  15. java第一个helloworld_Java第一个程序--HelloWorld
  16. CDA 数据分析师 Level1 基本知识(4)--统计学原理
  17. 紫猫数据库使用 (二)
  18. 一步步打造自己的通用上拉加载布局
  19. Google Test使用简介
  20. 微信公众号01: ase实现access_token的存储和被动刷新

热门文章

  1. portainer连接swarm集群
  2. python实现周末舞会问题
  3. UE拖拽UI生成Actor
  4. 铅酸蓄电池simulink_Simulink如何搭建电池模型
  5. python合法命名_python语言合法命名有哪些
  6. 高颜值测试报告- XTestRunner
  7. sql 服务器 客户端配置文件,sql 服务器 客户端配置
  8. 【腾讯云 Finops Crane 集训营】学习云原生成本优化
  9. GIF图片原理和储存结构深入解析
  10. 银河麒麟系统配置apt网络源