Translations of QMessageBox not work in Qt5.3

2019-01-28 09:53发布

I'm a fan of Qt and update it frequently, Qt5.1->5.2->5.3.

However, the tranalations of Standard buttons like "Ok" "Cancel" "Save" do not work anymore in Qt5.3. They are not translated, but just plain English.

The Code for translations does NOT change through each version of Qt. like:

TRANSLATIONS = qt_fr.ts
QTranslator trans
trans.load("qt_fr");
a.installTranslator(&trans);

any idea?

[Update] AFAIN, it might be a bug. Go back to Qt5.1 is a slution if U dont have to use some improvements in new Qts.

标签: qt qt5.3
3条回答
你好瞎i
2楼-- · 2019-01-28 10:41

I had the same problem and got it to work with an updated translation file. I am not sure if this is the intended behaviour, but my qt_de.qm has a filesize of only 1kB. There is however a file called qtbase_de.qm now (154kB) which seems to do the trick.

查看更多
地球回转人心会变
3楼-- · 2019-01-28 10:49

This is source of qt_ru:

   <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE TS>
    <TS version="2.0" language="ru">
    <dependencies>
        <dependency catalog="qtbase_ru"/>
        <dependency catalog="qtscript_ru"/>
        <dependency catalog="qtquick1_ru"/>
        <dependency catalog="qtmultimedia_ru"/>
        <dependency catalog="qtxmlpatterns_ru"/>
    </dependencies>
    </TS>

Therefore, it is necessary to deploy application with all these translation files. If at least one file is missing, the translation qt_ru will not load.

查看更多
虎瘦雄心在
4楼-- · 2019-01-28 10:54

Starting from Qt5.3 the qt_*.qm is divided into multiple files (qt*_*.qm) and now you have to copy qtbase_*.qm to translation directory and use together.

QString translationsPath(QLibraryInfo::location(QLibraryInfo::TranslationsPath));
QLocale locale = QLocale::system();

QTranslator qtTranslator;
if (qtTranslator.load(locale, "qt", "_", translationsPath))
    a.installTranslator(&qtTranslator);

QTranslator qtBaseTranslator;
if (qtBaseTranslator.load(locale, "qtbase", "_", translationsPath))
    a.installTranslator(&qtBaseTranslator);
查看更多
登录 后发表回答