Qt 动态中英文切换

这篇具有很好参考价值的文章主要介绍了Qt 动态中英文切换。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景:

        需要界面实现动态国际化,一键点击切换中英文或其他语言。


前提:

        已经完成了整个界面的翻译,拿到匹配的ts翻译文件,注意:要保证界面切换后,翻译的全覆盖,要保证任何需要反应的地方,都用到了tr("")包含,不然Linguist会捕捉不到。.ts文件的生成参考下文。

Qt中英文切换(国际化)_雲烟的博客-CSDN博客

工具:

假设已经拿到a.qm b.qm c.qm三个翻译文件

#include <QtCore/QObject>
#include <QtCore/QTranslator>

class LanguageManager:public QObject{
    Q_OBJECT

public:
    ~LanguageManager() override = default;
    void setLanguage(const QString &language);
    QString getLanguage();
    void addLangFile(const QString &name);
    void removeLangFile(const QString &name);
    void reload();
    static LanguageManager *getInstance(){
        if(!instance){
            instance = new LanguageManager;
        }
        return instance;
    }

signals:
    void languageChanged(const QString &lang);

privite:
    LanguageManager();

privite:
    static LanguageManager *instance;
    QString baseDir;
    QList<QString> langFiles;
    QList<QTranslator *> translations;
}
#include "Languagemanager.h"
#include <QApplication>
#include <QCoreApplication>
#include <QDebug>
#include <QStringBuilder>
#include <configFile.h>

LanguageManager *LanguageManager::instance = nullptr;

void LanguageManager::setLanguage(const QString &language)
{
    //写配置文件保存
    SystemConfig sc;
    auto ov = sc.value("qt/language");
    sc.setValue("qt/language",language);
    if(ov!=language){
        reload();
        emit languageChanged(language);
    }
}

QString LanguageManager::getLanguage()
{
    SystemConfig sc;
    return sc.value("qt/language").toString();
}

void LanguageManager::addLangFile(const QString &name)
{
    if(name.isEmpty()){
        return;
    }
    langFiles.append(name);
}

void LanguageManager::removeLangFile(const QString &name)
{
    if(name.isEmpty()){
        return;
    }
    langFiles.removeOne(name);
}
    
void LanguageManager::reload()
{
    auto lang = getLanguage();
    QString qmBase = QApplication::applicationDirPath() + "/" + baseDir;
    if(!qmbase.isEmpty() && !qmBase.endsWith("/")){
        qmBase += "/";
    }
    if(!translations.isEmpty()){
        for(auto const t:translations){
            QCoreApplication::removeTranslator(t);
            t->deleteLater();
        }
        translations.clear();
    }
    for(auto const &qm:langFiles){
        auto *t = new QTranslator(this);
        if(t->load(qmBase % qm % "_" % lang)){
            translations.append(t);
            QCoreApplication::installTranslator(t);
        }else{
            qDebug()<<"load error:"<<qm<<", language"<<lang;
        }
    }
}

LanguageManager::LanguageManager (): baseDir("lang"){}

使用:

        在界面切换的按键或者条目里直接调用即可:

LanguageManager::getInstance()->setLanguage("english");

        注意:该调用界面要重载changeEvent()保证界面即刻生效。

protected:
    void changeEvent(QEvent *evt) override ;

void MainPanel::changeEvent(QEvent *evt) {
    if (evt->type() == QEvent::LanguageChange) {
        ui->retranslateUi(this);
    }
    QWidget::changeEvent(evt);
}

至此,界面即可看到变化,中英文动态切换完成!文章来源地址https://www.toymoban.com/news/detail-684088.html

到了这里,关于Qt 动态中英文切换的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • pycharm界面中英文版本切换方法

    前言 新手报到,记录问题 pycharm还是喜欢英文版界面,那么如何实现中英文切换? 一、按下快捷键:CTRL+ALT+S,打开pycharm设置窗口 二、点击 Plugins ,选择 MarketPlace 文本框,输入 Chinese ,找到自己安装的中文插件 三、点击 Disable 或 Enable ,就可以禁用或启用插件实现中英文切

    2024年02月22日
    浏览(58)
  • winform使用本地化,中英文切换

    在有些软件中,需要中英文切换的功能,甚至其他语言切换的功能,都可以使用winform自带的本地化功能。一共有2种方法。 第一种方法 1.首先建立一个项目,拖几个控件上去,如图所示。 2.点击Form1的属性,设置以下2项 此时,窗体就会变成带有 英语 的字样 3.这个时候,我们

    2023年04月09日
    浏览(55)
  • Vue前端使用I18实现中英文切换

    一、配置vue-i18 1. 进入src/locales/index.js 2. 查看 src/utils/tool.js文件 3. 查看 src/locales/lang/zh-cn.js、src/locales/lang/en.js 二、配置页面 进入需要有翻译功能的页面进行配置,如 login.vue 1. HTML内容 2. JS内容 三、主要步骤 方法一 ① 页面上添加小地球选择语言显示选项 ② 实现添加的小地

    2024年04月25日
    浏览(48)
  • vue 管理后台 使用虚拟键盘组件 支持中英文切换

    前言:在大型触屏设备(如双屏设备)中,就没有键盘去操作,而且在触屏input或者textarea的输入时候就无法去输入值,没办法触发输入框enter事件,所以就需要去建立一个虚拟键盘去操作 就想着找一找vue有没有类似的键盘组件。 还!真!有! 项目使用框架:vue+element ui 官网

    2024年02月11日
    浏览(42)
  • nuxt使用i18n进行中英文切换

    中文效果图: 英文效果图: 版本: 安装:  新建en.js与zh.js两个文件进行切换显示 en.js内容  zh.js内容: 在plugins下新建i18n.js i18n.js内容:  在nuxt.config.js引入i18n.js 切换按钮( 两种切换方式选择一种即可 ) 页面展示 有导航的需要在导航切换的时候处理一下相关内容:

    2024年02月07日
    浏览(54)
  • vmware虚拟机Linux系统中英文输入法及切换方法

            许多同学在安装虚拟机联网之后,打开浏览器进行搜索时,发现无法正常进行中英文的切换,下面将简单介绍一下vmware虚拟机Linux系统( CentOS7)中英文输入法及切换方法。  1:打开虚拟机右上角的网络,点击设置的小图标 2:选择区域和语言( 地区和语言),然后在

    2024年02月12日
    浏览(43)
  • 花一分钟彻底搞懂Mac输入法/中英文/大小写切换

    最近有麦友说:没搞懂 Mac 怎么切换输入法、中英文和大小写,比如以前点按大写锁定键就可以切换到大写,现在要长按。有的时候点按大写锁定键或 shift 键都可以切换中英文,有的时候又不行。切换的时候基本就是碰运气瞎按。 之所以会有这种感觉,可能是因为以下几点:

    2024年02月07日
    浏览(62)
  • 微信小程序英文版:实现一键切换中英双语版(已组件化)

    已经重新优化代码做成了组件,需要可自取:https://github.com/CrystalCAI11/wechat-language-compoment 所有操作都打包在组件里不需要在额外的地方添加代码,直接在你需要的页面里导入组件,再在对应页面的onLoad()里set文本就行了。 第一步,找个地方新建中英文两个字典,我是放在ut

    2024年04月17日
    浏览(60)
  • 【AI实战】开源可商用的中英文大语言模型baichuan-7B,从零开始搭建

    baichuan-7B 是由百川智能开发的一个开源可商用的大规模预训练语言模型。基于 Transformer 结构,在大约1.2万亿 tokens 上训练的70亿参数模型,支持中英双语,上下文窗口长度为4096。在标准的中文和英文权威 benchmark(C-EVAL/MMLU)上均取得同尺寸最好的效果。 GitHub: https://github.c

    2024年02月09日
    浏览(56)
  • Android安卓实战项目(12)—关于身体分析,BMI计算,喝水提醒,食物卡路里计算APP【支持中英文切换】生活助手类APP(源码在文末)

    B站演示 【Android安卓实战项目(12)—生活助手类APP—关于身体分析,BMI计算,喝水提醒,食物卡路里计算APP【支持中英文切换】】 https://www.bilibili.com/video/BV1Wu4y1C76j/?share_source=copy_webvd_source=b2e9b9ed746acda34f499009647748ed 这段代码是一个Android应用程序的主要活动(Activity),它是一

    2024年02月10日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包