Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct
[solved]How to embed qm translation files into executable
panch last edited by panch
I have a Qt widget that I have made a translation file to. It works when loading using qm file path, but I would like to embed the qm file in the executable, and thus into the resources. So I made a qrc file that includes the qm file and also added
TRANSLATIONS = myApp_da_DK.ts
in the pro file. I then hoped that it would be a straight-forward thing to call the resource item like when you use icons or qml widgets. These are the tests:
res = appTranslator.load("myApp_da_DK.qm"); // OK res = appTranslator.load("myApp_da_DK.qm", "qrc:/res/translations"); // FAILS res = appTranslator.load("myApp_da_DK.qm", ":/res/translations"); // FAILS if (res) app.installTranslator(&appTranslator);
(filename of qm file hardcoded to make sure I din't get the name wrong)
Do I have to do anything extraordinary to make it work?
panch last edited by
Ok, so a quick update. There is no extra things needed to be done in order to make this work. I'm not sure if I accidentially mixed something up, but it actually works now. I think the reason for the loading not to work was the fact that I put the qm file in another resource file, which was prefixed inside the qrc file with "translations". I wasn't aware that I needed put this into the path of the load function.
The way I discovered this was that the resources can be inspected through a QDir(":/") - this helped a lot in order to get the right search path!
So in the end, I put the translation file next to the other resources in my resources.qrc file and indexed it like this:
bool res = appTranslator.load("myApp_" + QLocale::system().name(), ":/res/translations");
The qm file is thus located in the /res/translations subdir of the project root.
Hopefully other people can benefit from this problem I had.
Hi and welcome to devnet,
Glad you found out and thanks for sharing !
Since you have it working now, please update the thread title prepending [solved] so other forum users may know that a solution has been found :)