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?
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