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

How to translate a program into a language with QtLinguist in C++?

我在 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.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();
}

不知道哪里错了

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

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

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()
}