如何使用 C++ 中的 QtLinguist 将程序翻译成语言?

Posted

技术标签:

【中文标题】如何使用 C++ 中的 QtLinguist 将程序翻译成语言?【英文标题】:How to translate a program into a language with QtLinguist in C++? 【发布时间】:2021-12-28 20:51:42 【问题描述】:

我在 QtCreator 上编写了代码来将我的应用程序的 GUI 翻译成英语和西班牙语。此应用程序是用法语编写的。 .ts 翻译文件已生成。我在 QtLinguist 上将字符串翻译成英文(但不是西班牙文),并用绿色箭头在字段上打勾以表明我确定翻译。但是当我通过 lrelease 生成文件 .qm 时,IDE 写道: 正在更新 'C:/Users/user/Documents/ZeroClassGenerator/zeroclassgenerator_en.qm'...

生成 3 个翻译(3 个已完成,0 个未完成) 正在更新 'C:/Users/user/Documents/ZeroClassGenerator/zeroclassgenerator_es.qm'...

生成 0 个翻译(0 个已完成,0 个未完成) 忽略了 3 个未翻译的源文本 “C:\QtSdk2\6.2.1\mingw81_64\bin\lrelease.exe”完成 但是要翻译的文本还没有翻译成英文。但是,我将 .qm 文件与我的软件的可执行文件放在同一个文件夹中,并在主文件中编写了以下代码:

#include "FenPrincipale.h"
#include <QApplication>
#include <QTranslator>

int main(int argc, char *argv[])

    QApplication a(argc, argv);
    QTranslator translator;
    
    translator.load("zeroclassgenerator_en");
    a.installTranslator(&translator);
    FenPrincipale fenetre;
    fenetre.show();
    return a.exec();

由于那个代码不起作用,我写了这个。

#include "FenPrincipale.h"
#include <QApplication>
#include <QTranslator>

int main(int argc, char *argv[])

    QApplication a(argc, argv);
    QTranslator translator;
    
   if( translator.load("zeroclassgenerator_en"))
    a.installTranslator(&translator);
    FenPrincipale fenetre;
    fenetre.show();
    return a.exec();

我不知道我哪里出错了。

【问题讨论】:

But the text to be translated has not been translated into English 是什么意思?您使用哪种语言作为主要语言? 另外,QCoreApplication::installTranslatorQTranslator::load 返回bool,尝试验证他们的结果。 jdfa ,应用语言为法语。 【参考方案1】:

可能发生的是 QTranslator::load 失败;由于您没有指定绝对路径,也没有将目录作为第二个参数传递,因此它只会尝试在您当前的工作目录中查找文件。

为了使其更健壮,您应该 a) 将目录指定为第二个参数,并且 b) 检查 installTranslator() 的返回值:

int main(int argc, char *argv[])

    QApplication a(argc, argv);
    QTranslator translator;
 
    if (!translator.load("zeroclassgenerator_en", QApplication::applicationDirPath()))
        qWarning("Could not load translation file");
    a.installTranslator(&translator);
    FenPrincipale fenetre;
    fenetre.show();
    return a.exec()

【讨论】:

以上是关于如何使用 C++ 中的 QtLinguist 将程序翻译成语言?的主要内容,如果未能解决你的问题,请参考以下文章

Qt的发展和优势

qt linux窗口大小变化后刷新鼠标事件

嵌入式linux QT开发——QT简介

Qt 本地化(翻译)

PyQt:如何更改QInputDialog按钮的文本?

如何使用嵌入在 C++ 中的单声道编译 C# 代码?