使用QTranslator加载qm文件

时间:2010-10-27 14:08:34

标签: qt file translation

我正在尝试使用翻译文件。我完成了所有程序: 创建了ts文件,翻译了它,但是当我运行应用程序时,语言仍然和以前一样。

我参与了诺基亚的例子,就像在说明书中一样。

可能是我的问题?

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QTranslator* translator=new QTranslator(0);

    if(QFile::exists("hellotr_la.qm"))
        qWarning("failed-no file");

    if(! translator->load("hellotr_la.qm"))
        qWarning("failed loading"); //the warning appears ****

    app.installTranslator(translator);
}

3 个答案:

答案 0 :(得分:19)

.qm文件位于何处?您的代码正在尝试从当前工作目录加载文件,该目录在运行时可以是任何内容。在QTranslator::load的调用中指定目录路径:

QTranslator* translator = new QTranslator();
if (translator->load("hellotr_la", "/path/to/folder/with/qm/files")) {
    app.installTranslator(translator);
}

翻译可以从Qt resources加载,因此最好将它们捆绑在可执行文件中。然后你会加载它们像这样:

QTranslator* translator = new QTranslator();
if (translator->load("hellotr_la", ":/resources/translations")) {
    app.installTranslator(translator);
}

答案 1 :(得分:3)

答案已在评论中给出,但我想明确指出。

第一个警告使用了错误的条件:

if(QFile::exists("hellotr_la.qm"))
    qWarning("failed-no file");

应该是:

if(!QFile::exists("hellotr_la.qm"))
    qWarning("failed-no file");

由于您只看到了第二个警告,但没有看到第一个警告,问题确实是找不到该文件。确保工作目录符合您的预期,或者(更好地)使用资源系统,如andref所述。

答案 2 :(得分:0)

根据这个例子,你可以试试这个:

 QTranslator translator;
 translator.load("hellotr_la");
 app.installTranslator(&translator);

希望它能解决你的问题!

注1:此处没有指针。
注2:文件名中没有扩展名。