Search code examples
c++qtlocalizationtranslation

The tr function does not translate a word, while the translate function does


There is such code:

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

    QTranslator translator;
    const QString dir = "/usr/share/qt6/translations";

    if (translator.load("qt_ru", dir)) {
        QApplication::installTranslator(&translator);
        qDebug() << QApplication::translate("QShortcut", "Open");
        qDebug() << QApplication::tr("Open");
    }

    ...
}

Its output:

"Открыть"
"Open"

Why isn't the word "Open" translated in the second case?


Solution

  • If

    QApplication::translate("QShortcut", "Open");
    

    works, but

    QApplication::tr("Open");
    

    does not, it means "Open" is in the "QShortcut" context. To get that context with tr(), write:

    QShortcut::tr("Open");
    

    Alternatively, edit translations to put the word in the QObject context, so both will find it.


    Read more: https://doc.qt.io/qt-6/i18n-source-translation.html#mark-strings-for-translation