Qt - 使用内置翻译

时间:2017-04-26 15:35:04

标签: c++ qt translation qtranslator

我使用Qt并希望翻译文本"本地"由Qt小部件显示。通过"本地显示的文本"例如,我指的是文本编辑(复制,粘贴,...)的上下文菜单中显示的内容。

以下是我已经完成的事情:

#include <QApplication>
#include <QDebug>
#include <QTranslator>

#include <QFile>

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

    QTranslator translator;
    if(translator.load("qt_fr.qm", QApplication::applicationDirPath())) {
        qDebug() << a.installTranslator(&translator);
    }

    qDebug() << QFile::exists(QApplication::applicationDirPath() + "/qt_fr.qm"); // just to debug file existence

    // MainWindow w;      // not related to my question
    // w.showMaximized(); // neither is this

    return a.exec();
}

qt_fr.qm 文件位于Qt5.6.2和MinGW用户的 path_to_qt / Qt5.6.2 / 5.6 / mingw49_32 / translations 。我将所述文件复制到正在运行的软件目录,但转换程序始终无法加载它。但是当我使用自己的qm文件(使用Qt lupdate和lrelease工具从.ts文件构建)时,qm文件已正确加载并安装。

我有什么遗失或做错了吗?

1 个答案:

答案 0 :(得分:2)

我认为问题可能是您没有复制完整的消息目录。以下内容适用于Debian系统,使用标准位置的QM文件:

first load succeeded: 'Open' => "Ouvrir"
second load succeeded: 'Open' => "Ouvrir"

输出

.qm

(我从文件名中删除了qt_fr.qm,因为Qt会先尝试这个,我还展示了如何从特定的语言环境对象中编写文件名。)

如果我们使用lconvert -of ts /usr/share/qt5/translations/qt_fr.qm检查<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE TS> <TS version="2.1" language="fr_FR"> <dependencies> <dependency catalog="qtbase_fr"/> <dependency catalog="qtscript_fr"/> <dependency catalog="qtquick1_fr"/> <dependency catalog="qtmultimedia_fr"/> <dependency catalog="qtxmlpatterns_fr"/> </dependencies> </TS> 文件,我们可以看到它只是一个非常小的文件,它通过引用合并了其他文件:

qt_fr.qm

我认为您的症状最可能的原因是无法加载一个或多个依赖项文件。您应该确保所有这些文件区域在您复制qtbase_fr.qm的同一位置可用 - 或者,如果您只需要“基本”翻译,只需复制translator.load(),然后更改您的{{1适当地调用。