最近项目需要软件具有中英文双语切换功能,而QT又自带此功能,现将实现方式记录下来。
说到中英文切换,少不了要了解QT的内部编码方式。在此就不详述QT编码方式了,具体可参考 彻底弄懂Qt的编码。只需要记住QT采用utf-8编码!window操作系统采用ansi编码,简体中文操作系统的ansi代表gbk。

1. 生成.ts文件

前置步骤:所有需要翻译的内容用QObject::tr()包起来。具体自行了解一下QObject::tr()的功能。

先创建一个factory类:

// factory.cpp
factory::factory()
{QString str = QObject::tr("我是中国人");
}

打开项目 =>【QT VS TOOLS】=> 【Create New Translation File】=> 【选择语言】=> 【ok】创建ts文件,默认在项目根目录。

2. 打开linguis,打开ts文件,翻译,生成qm文件

【QT VS TOOLS】=> 【Launch Qt Linguist】=> 等待打开linguist工具 =>【linguist打开ts文件】

打开ts文件后看到乱码:

导致的原因是源码文件采用的非utf-8编码格式,要将源码文件改为utf-8格式。
解决方式:【在vs中打开源码文件】=> 【文件】=> 【高级保存选项】=> 【编码:Unicode(utf-8 带签名)】=> 像上述一样再次创建ts文件

再打开linguist看一下:

翻译,然后生成qm文件 【文件】 => 【发布】即可在项目根目录下生成一个与ts同名的qm文件。

3. 中英文切换

这里是重点了,就不使用之前的代码了。实现一个登陆页面语言切换功能。
新建一个CLinguist类,用于语言管理:

// Linguist.h
#pragma once
/*
语言家,配置当前系统的语言
*/#include <QObject>
#include <qtranslator.h>enum Language
{zh_cn,en_us,undefined
};class CLinguist :public QObject
{Q_OBJECT
private:CLinguist();public:// 当前语言 简体中文、英文、未定义Language m_CurrentLanguage = Language::undefined;// 切换语言void ChangeLanguage(Language lan);static  CLinguist * GetLinguistInstance();
private:static CLinguist * linguist;QTranslator * m_trans;
signals:// 语言切换信号,通知当前系统语言已经被切换void LanguageChaned();
};//Linguist.cpp
#include "Linguist.h"
#include <qcoreapplication.h>
CLinguist * CLinguist::linguist = nullptr;
CLinguist::CLinguist()
{m_trans = new QTranslator;
}CLinguist * CLinguist::GetLinguistInstance()
{if (nullptr == linguist){linguist = new CLinguist;}return linguist;
}void CLinguist::ChangeLanguage(Language lan)
{if (lan == this->m_CurrentLanguage || lan == Language::undefined) return;bool ret;switch (lan){case zh_cn:if (nullptr != m_trans){qApp->removeTranslator(m_trans);}ret = m_trans->load("snirisaccesssys_zh.qm");if (ret){qApp->installTranslator(m_trans);}break;case en_us:if (nullptr != m_trans){qApp->removeTranslator(m_trans);}ret = m_trans->load("snirisaccesssys_en.qm");if (ret){qApp->installTranslator(m_trans);}break;default:break;}if(ret){this->m_CurrentLanguage = lan;// 发出语言被切换的信号emit LanguageChaned();}
}

在main函数中设置默认的语言:

int main(int argc, char *argv[])
{QApplication a(argc, argv);/**......*/CLinguist* lin = CLinguist::GetLinguistInstance();lin->ChangeLanguage(Language::zh_cn);/**......*/
}

登陆类CLogin:

// Login.h
#pragma once
#if _MSC_VER >= 1600
#pragma execution_character_set("utf-8")
#endif#include <QObject>
#include <qwidget.h>
#include <qpushbutton.h>
#include <qlineedit.h>
#include <qgridlayout.h>
#include <qlabel.h>
#include <qboxlayout.h>
#include <qmessagebox.h>
#include <qcombobox.h>
#include <qtranslator.h>class CLogin : public QDialog
{Q_OBJECTpublic:CLogin(QWidget *parent = 0);~CLogin();/**... 省略了部分内容,包括布局控件和登陆取消按钮...*/QPushButton * m_btnChangeLanguage;QLineEdit * m_leUserName;QLineEdit * m_lePwd;QTranslator* m_translator;QLabel * m_lblUserName;QLabel * m_lblPwd;void on_btnChangeLanguage_clicked();// 刷新ui界面的文字void RetranslateUI();// 这句比较重要,连接信号槽,因为是单例,所以想买中所有需要切换语言的地方都需要连接CLinguist::LanguageChaned信号CLinguist* lin = CLinguist::GetLinguistInstance();connect(lin, &CLinguist::LanguageChaned, this, &CBaseForm::RetranslateUI);
};// Login.cpp
#include "Login.h"
#include "Linguist.h"CLogin::CLogin(QWidget *parent, int id): CBaseForm(id, parent)
{/**...省略各种控件初始化及布局操作*/m_btnChangeLanguage = new QPushButton;connect(m_btnChangeLanguage, &QPushButton::clicked, this, &CLogin::on_btnChangeLanguage_clicked);RetranslateUI();
}CLogin::~CLogin()
{
}void CLogin::RetranslateUI()
{m_lblUserName->setText(tr("用户名:"));m_lblPwd->setText(tr("密  码:"));m_btnChangeLanguage->setText(tr("中文"));
}void CLogin::on_btnChangeLanguage_clicked()
{CLinguist* lin = CLinguist::GetLinguistInstance();if (lin->m_CurrentLanguage == Language::en_us){lin->ChangeLanguage(Language::zh_cn);}else{lin->ChangeLanguage(Language::en_us);}
}

还有一点想说一下,如何实现中英文切换按钮在设置为中文的时候显示【English】,设置为英文的时候显示【中文】,看下面的图你就懂了:

就是翻译的时候English译文为【中文】,汉语译文为【English】即可!

QT in VS 多语言实现(中英文切换)相关推荐

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

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

  2. QT 语言家 中英文切换

    环境: vs +qt msvc 创建ts文件 第一种: 工具->QT VS Tools 选择 第二种: 点击ok后,生成.pro文件 打开.pro文件,在.pro文件中添加 TRANSLATIO ...

  3. iPhone 手机怎么设置App Store的显示语言,中英文切换

    苹果的 App Store 语言类型取决于你的 Apple ID 账号的国籍设置,它会根据你的 Apple ID 国籍自动调整 App Store 的语言显示.要想把 App Store 设置成中文, ...

  4. QT语言家实现软件中英文切换

    环境:qtcreator 步骤: 首先是源代码中需要进行翻译转换的字符串内容要使用到tr函数包裹 工程文件.pro文件加上TRANSLATIONS += xx.ts 点击下图Qt语言家中的更新翻译,这 ...

  5. Qt实现中英文切换(国际化)

    前言 距离上一次发博客,已经又快一个月过去了,今天写一篇有关于Qt程序如何实现中英文切换的例子,之所以写这个,是因为这是最近项目的一个需求.Qt国际化,网上的例子,很多很多.... 看似很简单,但是真 ...

  6. QT 中英文切换-国际化(解决部分翻译不起作用的问题)

    中英文切换-国际化 1.先看效果 2.核心代码(重新赋值刷新翻译文本) 2.0 pro文件配置 2.1 构造函数 2.2 两个按钮点击事件 3.翻译文件的生成与配置 4. 参考链接 1.先看效果 2. ...

  7. Qt Quick实现国际化 中英文切换简明图文步骤

    目录 前言 一.步骤 1.在pro文件中添加需要生成的ts文件: 2.通过工具-外部-语言家-update 生成zh_CN.ts和en_US.ts 3.通过语言家打开生成的ts文件进行翻译 4.将zh ...

  8. qt 设置中英文切换

    点击设置转换 https://www.cnblogs.com/liangtianmanyue/p/14773710.html 自动检测转换 QT国际化示例, 检测系统语言,设置适合语言,按键切换显示语 ...

  9. designer打开报错 qt_无法启动 Maya 集成的 qt designer 的解决方法和原因 以及 中英文切换...

    无法启动 Maya 集成的 qt designer 的解决方法和原因 以及 中英文切换 前言: Maya 集成了 PySide,同时集成了qt designer,在 Maya 的安装目录下的 bin ...

最新文章

  1. 听障人士的“有声桥梁”:百度智能云曦灵-AI手语平台发布
  2. Tensorflow |(1)初识Tensorflow
  3. 鲸鱼优化算法_Java 代码优化细节之比比谁更细
  4. 牛客网获取输入rowinput_Python爬虫入门例题:抓取牛客网题目
  5. 扔掉 Postman,一个工具全部搞定,真香!
  6. 配置arm-linux-gcc 位置
  7. java获取系统当前时间格式化_java 获取系统当前时间并格式化
  8. 具体数学-第7课(取整基础)
  9. dependencies.dependency.version' for org.hibernate:hibernate-validator:jar is missing.
  10. .net中 参数out,ref,params的区别
  11. 致前行者 | 他们,只用了两公里地铁的钱,就实现了中国探月
  12. 天天在谈BI,到底什么才是真正的商业智能BI
  13. 计算机英语说明文,英语说明文作文
  14. 通信基础篇小项目-----简单网络画板的的实现
  15. Problem:跳房子
  16. maven 创建java项目_手把手教你创建Java Maven依赖项目
  17. 看完这篇 教你玩转渗透测试靶机——Metasploitable2
  18. 21精美ContactPages联系我们页面设计欣赏
  19. 网络安全工具源码分析工具Joern cpg 查询使用教程
  20. 计算机专业毕业论文4000字免费,计算机专业毕业生毕业论文攻略

热门文章

  1. (CNS复现)CLAM——Chapter_03
  2. DOM+CSS3实现小游戏SwingCopters
  3. android高仿微信聊天消息列表自由复制文字,双击查看文本内容
  4. 计算机图形学应用调研论文,计算机图形学的应用论文(2)
  5. 一文详解transformer(Attention Is All You Need)原理
  6. MOOC数据结构 第8周测验
  7. 树莓派PCA9685的舵机MG996R二度自由云台操控代码,搭配mqtt进行远程操控
  8. 卡罗拉 (COROLLA) - 仪表盘
  9. Java中关于时间类的用法
  10. 计算机应用基础试题及答案电大百度云,电大《计算机应用基础》试题及参考答案...