QTranslator 在 if 语句中使用时不起作用
QTranslator not working when used in a if statement
我使用 Qt Linguist 添加了一个翻译文件。然后我在加载我的应用程序时继续使用 QTranslator
:
QTranslator translator;
bool loaded = translator.load(":/notizie_en_UK.qm");
bool installed = app.installTranslator(&translator);
qDebug() << "Adding translation" << loaded << installed;
这很好用。
现在我只想在系统语言不是默认语言的情况下使用翻译,所以我执行了以下操作:
QLocale::Language phoneLang = QLocale::system().language();
qDebug() << "LANGUAGE" << phoneLang << (phoneLang != QLocale::Italian);
if(phoneLang != QLocale::Italian){
QTranslator translator;
bool loaded = translator.load(":/notizie_en_UK.qm");
bool installed = app.installTranslator(&translator);
qDebug() << "Adding translation" << loaded << installed;
}
else{
qDebug() << "Using italian";
}
但是这不起作用。例如,如果系统为英语,则翻译器不起作用,并且使用应用程序的默认语言(在本例中为意大利语)。
qDebug()
的输出是:
LANGUAGE QLocale::English true
Adding translation true true
问题在于,一旦程序执行退出定义它的 if
语句主体,translator
对象就会被销毁。您可以做的是:
[..]
if (phoneLang != QLocale::Italian) {
QTranslator *translator = new QTranslator;
bool loaded = translator->load(":/notizie_en_UK.qm");
bool installed = app.installTranslator(translator);
qDebug() << "Adding translation" << loaded << installed;
}
[..]
但是,您必须小心,不要在必要时自行销毁 translator
对象。
更新:
您可以定义将清理其子对象的翻译器的父对象。例如:
// The application is translator's parent.
QTranslator *translator = new QTranslator(app);
我使用 Qt Linguist 添加了一个翻译文件。然后我在加载我的应用程序时继续使用 QTranslator
:
QTranslator translator;
bool loaded = translator.load(":/notizie_en_UK.qm");
bool installed = app.installTranslator(&translator);
qDebug() << "Adding translation" << loaded << installed;
这很好用。 现在我只想在系统语言不是默认语言的情况下使用翻译,所以我执行了以下操作:
QLocale::Language phoneLang = QLocale::system().language();
qDebug() << "LANGUAGE" << phoneLang << (phoneLang != QLocale::Italian);
if(phoneLang != QLocale::Italian){
QTranslator translator;
bool loaded = translator.load(":/notizie_en_UK.qm");
bool installed = app.installTranslator(&translator);
qDebug() << "Adding translation" << loaded << installed;
}
else{
qDebug() << "Using italian";
}
但是这不起作用。例如,如果系统为英语,则翻译器不起作用,并且使用应用程序的默认语言(在本例中为意大利语)。
qDebug()
的输出是:
LANGUAGE QLocale::English true
Adding translation true true
问题在于,一旦程序执行退出定义它的 if
语句主体,translator
对象就会被销毁。您可以做的是:
[..]
if (phoneLang != QLocale::Italian) {
QTranslator *translator = new QTranslator;
bool loaded = translator->load(":/notizie_en_UK.qm");
bool installed = app.installTranslator(translator);
qDebug() << "Adding translation" << loaded << installed;
}
[..]
但是,您必须小心,不要在必要时自行销毁 translator
对象。
更新:
您可以定义将清理其子对象的翻译器的父对象。例如:
// The application is translator's parent.
QTranslator *translator = new QTranslator(app);