csdn文章地址

github网址

1. 前言

本文利用Qt语言大师工具,实现Qt程序的多国家语言切换,在github上放置的开源代码中同时放置了所使用的 Qt语言大师程序。CSDN上有众多的Qt语言大师使用攻略可以参考,但仍要编写本文的目的,是让自己和他人能够更简单的了解和使用Qt自带的多语言切换。将样例代码和 Qt语言大师 程序 均放在开源项目中,省去读者寻找和下载工具的麻烦。

第2章 给出 使用方法总结

第3章 给出 使用样例重要步骤截图

2. 使用方法总结

  1. 修改.pro文件,例如要实现中英文间的切换,则添加两个文件分别存储中文和英文,文件名自拟

    TRANSLATIONS = lang_English.ts \lang_Chinese.ts
    
  2. Qt Creator -> 工具 -> 外部->Qt语言家->更新翻译,则在当前目录下生成了lang_English.ts 和 lang_Chinese.ts两个文件,ts文件能够自动捕捉到 非自写代码里的 可能用于显示的 文本信息,例如窗口名、控件名、控件当前值等,代码中的文本信息若想被捕捉到,需要用到tr包裹,例如tr(“一棵树”),则"一棵树"将会被捕捉到。一种词被tr()一次即可,例如代码中有多个”一棵树",则只把一个写为tr(“一棵树”)。

    这里可能有人会问,我程序中写的显示文本都是中文,需要和英文相互切换,那为什么需要创建lang_English.ts 和 lang_Chinese.ts两个文件而不是lang_English.ts一个文件呢,当我切换成英文是使lang_English.ts生效,切换成中文时使其失效看起来更简单。但是实际上,只要一个文件是中文切换成英文没有问题,英文切换回中文时因为没有目标语言时中文的翻译文件,将不能切换回中文

  3. 用Qt Linguist(Qt 语言大师)软件同时打开两个.ts文件,第一次打开时将弹出选择框选择要翻译的源语言和目标语言,源语言可以不用理会,选择好正确的目标语言即可。例如lang_Chinese.ts选择目标"简体中文",lang_English.ts 选择目标"English"。

  4. 在软件中遍历点击不同的Context和Strings,在Source text的两个translation to中输入对应的翻译。
    例如item:“主窗口”,则在Translation to American English(United States)中输入"main window",在Translation to 简体中文(中国) 中输入 “主窗口”。

    若某个显示文本不想参与语言切换,则在这两个空中不输入 或者 在自写代码中不用tr包裹

  5. Qt Creator -> 工具 -> 外部->Qt语言家->发布翻译,则在当前路径下生成了lang_English.qm 和 lang_Chinese.qm两个文件。

    实际中代码要使用的qm文件,ts文件是中间文件可以删除,但在调试版本中不建议删除,因为如果添加了新的控件或新的要参与翻译的文本信息,则修改ts信息,重新Qt Creator -> 工具 -> 外部->Qt语言家->发布翻译即可,如果删除了ts再需要修改则需要重新执行步骤1到4

  6. 使用代码

    //Qt翻译类
    QTranslator ch;
    QTranslator en;//加载 翻译文件
    en.load("../testLang/lang_English.qm");
    ch.load("../testLang/lang_Chinese.qm");//当QComboBox的currentIndex切换时,切换软件的语言
    //注意 对象ch和en 最好设置为类变量,如果设置为局部变量,那个除了其作用域后,翻译就失效了
    void on_comboBox_currentIndexChanged(int index)
    {if (index == 0)qApp->installTranslator(&ch);elseqApp->installTranslator(&en);ui->retranslateUi(this);
    }
    
    //启动软件时 通过系统的语言环境 设置软件的语言
    int main(int argc, char *argv[])
    {QApplication a(argc, argv);QTranslator ch;QTranslator en;en.load("../testLang/lang_English.qm");ch.load("../testLang/lang_Chinese.qm");// 获取系统语言环境QLocale locale;if (locale.language() == QLocale::Chinese)a.installTranslator(&ch);elsea.installTranslator(&en);MainWindow w;w.show();return a.exec();
    }
    

    如果软件中发现切换语言后,某个类没有成功切换到新的语言(多发生在代码中动态new出的类),则在该类中重写以下函数。

    //.h
    void changeEvent(QEvent *e);//.cpp
    void changeEvent(QEvent *e)
    {if(e->type() == QEvent::LanguageChange){ui->retranslateUi(this);}
    }
    

    3. 使用样例重要步骤截图

    1. 使用 Qt语言大师 打开两个ts文件

    2. 依次选择两个文件的目标语言

    1. 依次点击item,进行翻译

    2. "中文"和"English"不参与翻译

5. 注意右下角的warning窗口将给出警告 来提醒可能存在的格式错误(当然也可以不予理会,只是提醒而已)

6. 最终效果-中文

6. 最终效果-英文

Qt多语言切换-Qt语言家相关推荐

  1. java国际化转换_java 实现国际化 中英文语言切换

    [实例简介] java实现国际化中英文语言切换 java语言切换JSP国际化 [实例截图] [核心代码] JAVA国际化实现 └── struts01 ├── src │   ├── com │   ...

  2. 【大话QT之十四】QT实现多语言切换

    功能需求: 网盘客户端要能够实现多国语言的切换,第一版要支持中.英文的切换.在实现过程中感觉QT对多国语言的支持还是很不错的,制作多语言包很方便,切换的逻辑也很简单.下面就来看一下QT中如何制作多语言 ...

  3. Qt之Qml 国际化—实现简易语言切换功能

    目标:实现一个下拉框,具有切换语言的功能 GIF展示: 版本Qt5.14.2,版本不能低于5.10 qml控件 1.在QML文件中把需要翻译显示的文本用qsTr(" ")包裹起来 ...

  4. Qt之语言家的简单使用(一)(Qt翻译UI,Qt Linguist的使用,含源码+注释)

    文章目录 一.翻译程序示例图 二.流程须知(个人理解) 三.关于对话框中QDialogButtonBox翻译的操作 四.源码 CLinguistTest.h CLinguistTest.cpp CLi ...

  5. 2.4 Qt多国语言切换

     如果要实现qt程序动态语言切换,最简单有效的方法是使用QTranslator类,首先使用QTranslator对象加载相应的翻译语言文件,然后用 QApplication::installTrans ...

  6. VS Qt 使用linguits(Qt语言家)生成.ts的翻译文件并翻译使用的详细过程

    VS 生成ts文件 vs中 Qt VS Tools--Create new translation File选择需要的语言,生成对应ts文件在解决方案的资源管理器的Translation File文件 ...

  7. Qt+C++窗体界面中英文多语言切换

     程序示例精选 Qt+C++窗体界面中英文语言切换 如需安装运行环境或远程调试,见文章底部个人微信名片,由专业技术人员远程协助! 前言 这篇博客针对<<Qt+C++窗体界面中英文语言切换& ...

  8. Qt Quick的多国语言翻译

    一.翻译Qt Quick应用软件 1.对所有用户界面中的文字字符串使用qsTr() QML中的字符串可以使用qsTr().qsTranslate().qsTrId().QT_TR_NOOP().QT_ ...

  9. Qt中,软件多语言国际化翻译的方法与步骤

    Qt中,软件多语言国际化翻译的方法与步骤 在Qt的项目开发过程中,有时软件要翻译成多语言版本,这就涉及到国际化方面的操作.虽然Qt对这方面集成了很多工具,操作起来比较方便,本文还是总结一下国际化的方法 ...

最新文章

  1. 使用phpize安装php模块
  2. C++ text search文本检索在较长的文本段落中搜索单词的算法(附完整源码)
  3. 数据范围BZOJ 3209(花神的数论题-数位统计+1,被数据范围坑了)
  4. 修改Linux字体出现乱码
  5. 高能干货:OpenCV看这篇就够了,9段代码详解图像变换基本操作
  6. 防注入php 留言板代码,简单的 php 防注入代码
  7. mysql 拒绝访问的解决办法
  8. mysql主从应用_MySQL主从复制应用、主从复制原理
  9. Vue.js 学习笔记 一
  10. python中文列名报错__mssql.MSSQLDatabaseException:(207,b“无效列名'Hello'。DBLib错误消息20018...
  11. Oracle如何一次插入多条数据
  12. 兼容sdk7iOS7的issue解决小片段总结
  13. 计算机 运行新ie 命令,怎样修复ie浏览器-运行什么命令可以修复IE浏览器,请说的详细 – 手机爱问...
  14. Pidgin for windows 与MSN、ICQ、QQ、YAHOO、GoogleTalk、AIM/AOL等网络聊天工具互联互通的新型聊天软件
  15. 如何解决微服务的数据聚合Join问题?
  16. 编写一递归函数求斐波纳契数列1,1,2,3,5,8,13,…的前40项。c语言
  17. 怎样禁止macOS 在Safari下载的ZIP文件自动解压?
  18. Godot中的GIProbe和Baked lightmaps
  19. 苹果App Store程序提交审核指南中文版
  20. 《Adobe After Effects CS6中文版经典教程》——2.7 预览特效

热门文章

  1. Linux Shell 脚本交互输入
  2. 邹春明:工业安全,工业4.0的达摩克利斯之剑
  3. 俄罗斯科学家量子计算机,俄罗斯科学家提出颠覆性量子物理观点:整个宇宙都是量子-虎嗅网...
  4. 雷军:互联网创业的葵花宝典
  5. JS使用正则实现不区分字母大小写的高亮效果(不改变原文本的大小写)
  6. 暴走gif的爬取小项目
  7. 问题 F: 筛选法求素数
  8. 第十一届“沣标杯”国际听障摄影展暨“关爱残障”主题公益摄影展征稿启事
  9. 设施农业精准管理科研进展汇总
  10. 笔记二:Maven+SSM之JSON简介