Localization of a library
-
[quote author="Gerolf" date="1338366133"]You have to create it on the heap or create it in main and give it to the function.[/quote]
Create on heap? I give the translator to loadTranslation, but it doesn't work:
[quote]/usr/include/QtCore/qtranslator.h:94: error: 'QTranslator::QTranslator(const QTranslator&)' is private[/quote]
-
What is the path from MyApp to MyLip german.qm?
@
libTranslator.load(":/locale/german.qm")
libTranslator.load(":/mylib/locale/german.qm")
@...both doesn't work!
-
@
int main(int argc, char *argv[])
{
QApplication application(argc, argv);QTranslator libTranslator; ... MyLib::loadTranslation(libTranslator); QApplication::installTranslator(&libTranslator); ... return application.exec();
}
void loadTranslation(QTranslator& translator)
{
translator.load("/home/chris/myLib/locale/german.qm");
}
@LoadTranslator must be exported from the dll.
The path to use for the load depends on your resource file. we can't tell you.
-
Ok, I made it so, Gerolf! Unfortunately, same behavior: MyApp german, but MyLib english strings/forms!
libTranslator.load(...) returns true ... I despair soon!
-
With local file on hdd it works:
@translator.load("/home/chris/mylib/locale/german.qm")@
but if I use the resource, it doesn't work:
@translator.load(":/locale/german.qm")@
Both returns true! (?)
-
Your library needs to incorporate the resource file of the library. In order to not clash with names in your application, it's a good idea to put those resources into a virtual directory in the resources, e.g
@
:/mylibrary/locale/german.qm
@Also, it may be necessary to explicitly initialize the library's ressources with "Q_INIT_RESOURCE":/doc/qt-4.8/qdir.html#Q_INIT_RESOURCE. The "Qt Resource System docs":/doc/qt-4.8/resources.html have some infos on that topic too (look at the end of the page).
-
It works now, thanks!
@all:
Big thanks for your help! You're great!Last thing: I load the Qt translations (qt_de.qm) in MyApp, must this be done also in MyLib for Qt strings (error messages etc.) in the library?
-
You're welcome - that's what this forums are made for :-)
Please make sure to add [solved] to the title of the topic (the edit link is at the very first post).Regarding your last question:
No, it's only needed in the application itself. -
Ok, but Qt error strings are english only, allthough qt_de.qm is loaded! This returns an english message (it's in the library):
@QIODevice::errorString()@
...or are these strings english only?
-
AFAIK, these translations are only for UI stuff like dialogs etc.
Not for error strings, which you typically do not directly display to the end user. -
Ok, but I found translations in qt_de.ts for error messages! I load qt_de.qm in MyApp, but my library doesn't use it! If I load qt_de.qm in MyLib, strings are still in english! Any special options to load it for libraries?