如何使用 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()
}
我在 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()
}