Qt多语言切换-Qt语言家

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);
        else
            qApp->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);
        else
            a.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文件
      image-20210731020325069

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

    image-20210731020359853

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

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

image-20210731020726166

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

image-20210731020832088

image-20210731020845197

6. 最终效果-中文

image-20210731021319542

image-20210731021329242

image-20210731021341859

image-20210731021351003

image-20210731021406946

6. 最终效果-英文

image-20210731021758526

image-20210731021809914

image-20210731021817108

image-20210731021825278

image-20210731021831200

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MallocLu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值