Qt 国际化/多语言

1 篇文章 0 订阅

1. 代码中所有需要翻译的字符串用 "tr(") 包含 
    
2. 在 pro 文件中添加

        TRANSLATIONS  +=  resources/multiLang_zh.ts  \
                          resources/multiLang_en.ts

                        
3. 生成ts文件


        1)  工程目录新建文件夹 resources
        2)  执行 "工具/外部/QT语言家/更新翻译(lupdate)"
           或者通过命令行执行 lupdate 命令
            a. cmd 命令切换至 lupdate 目录下:D:\Qt\Qt5.12.10\5.12.10\mingw73_64\bin
            b. 运行

lupdate -verbose E:\MyProjects\QtDemo\MultiLanguageDemo\MultiLanguageDemo.pro

            c. 可在工程目录下 看到 resources 文件夹 及 multiLang_en.ts 和 multiLang_zh.ts

            d. 编辑 multiLang_zh.ts 文件 将对应英文字符翻译为中文,如下所示

    <message>
        <location filename="../MainWnd.ui" line="66"/>
        <source>OK</source>
		<translation type="unfinished">确定</translation>
 	</message>

          e. 编辑 multiLang_en.ts 文件 对应英文字符输入显示的英文,如下所示

    <message>
        <location filename="../MainWnd.ui" line="66"/>
		<source>OK</source>
		<translation>OK</translation>
    </message>

以上两步(d/e) 可以使用 Qt Linguist 工具翻译应用程序的文本
        
4. 生成qm文件
        
        执行 "工具/外部/QT语言家/发布翻译(lrelease)"
         或者通过命令行执行 lrelease 命令
         1) cmd 命令切换至 lupdate 目录下:D:\Qt\Qt5.12.10\5.12.10\mingw73_64\bin
         2) 运行    

lrelease -verbose E:\MyProjects\QtDemo\MultiLanguageDemo\MultiLanguageDemo.pro

        
         3) 可在工程目录 resources 文件夹下看到  multiLang_en.qmmultiLang_zh.qm
    

5. 在项目工程中添加资源文件 resources 以及其目录下文件

       multiLang_en.qm  和  multiLang_zh.qm


6. main 函数增加以下代码,运行显示中文界面
        在 QApplication a(argc, argv); 后面添加

        QTranslator translator;
        translator.load(":/resources/multiLang_zh.qm");
        a.installTranslator(&translator);

7. 动态切换语言

    1) 定义变量 QTranslator trans

    2) 选择语言 ComboBox 触发槽函数 void onIndexChanged()

    connect(ui->comBoxLanguage, SIGNAL(currentIndexChanged(int)), this, SLOT(onIndexChanged()));

    3) 在 槽函数  void onIndexChanged()  中添加以下内容        

        int nIndex = ui->comBoxLanguage->currentIndex();
        if(nIndex == 0)
            trans.load(":/resources/multiLang_zh.qm");
        else
            trans.load(":/resources/multiLang_en.qm");

        qApp->installTranslator(&trans);

        
8. 重写 changeEvent

        void SettingDlg::changeEvent(QEvent *event)
        {
            qDebug() << "changeEvent ... ";
            switch (event->type())
            {
            case QEvent::LanguageChange:
                translateUI();
                break;
            default:
                QDialog::changeEvent(event);
            }
        }

        

      void SettingDlg::translateUI()
        {
            this->setWindowTitle(tr("Setting dialog"));
            ui->labTips->setText(tr("Please select language"));
            ui->comBoxLanguage->setItemText(0, tr("Chinese"));
            ui->comBoxLanguage->setItemText(1, tr("English"));
        }

多个界面,每个界面都要重写 changeEvent
    
9. 执行 "工具/外部/QT语言家/更新翻译(lupdate)",,并重新翻译 ts 文件中的字符串

     (即重复第3步中   d 和 e 两步)


10. 执行 "工具/外部/QT语言家/发布翻译(lrelease)"


11. 编译运行即可

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值