簡體   English   中英

Qt-使用內置翻譯

[英]Qt - Use builtin translations

我正在使用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();
}

對於Qt5.6.2和MinGW用戶, qt_fr.qm文件位於path_to_qt / Qt5.6.2 / 5.6 / mingw49_32 / translations 我將所述文件復制到正在運行的軟件目錄中,但翻譯器始終無法加載該文件。 但是,當我使用自己的qm文件(使用Qt lupdate和lrelease工具從.ts文件構建)時,qm文件已正確加載和安裝。

有什么我想念的或做錯的嗎?

我認為問題可能是您尚未復制完整的消息目錄。 以下在Debian系統上使用標准位置的QM文件為我工作:

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

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QTranslator translator;
    const QString dir = "/usr/share/qt5/translations";

    if (translator.load("qt_fr", dir)) {
        qDebug() << "first load succeeded:"
                 << "'Open' =>" << translator.translate("QShortcut", "Open");
    }

    if (translator.load(QLocale::French, "qt", "_", dir)) {
        qDebug() << "second load succeeded:"
                 << "'Open' =>" << translator.translate("QShortcut", "Open");
    }
}

輸出是

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

(我從文件名中刪除了.qm ,因為Qt會首先嘗試這樣做,並且我還展示了如何從特定區域設置對象組成文件名)。

如果我們使用lconvert -of ts /usr/share/qt5/translations/qt_fr.qm檢查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()調用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM