qApp->installTranslator add a new translation into the stack. Does not remove the old ones. So, if the user click 10 times: Italian - English - Italian - English … etc… you got ten translator into the memory. That’s because the translation is searched into the order on which the translator are installed into the stack.
That’s why I remove everything so there is only one translators at time into the memory. Il giorno 08/mar/2016, alle ore 18:46, Jason H <jh...@gmx.com> ha scritto: > I'm wondering why you load all those languages and then remove all but one of > them? Being a mobile app, I have to be somewhat conscience of memory foot > print. Do you see anything wrong with: > > void Backend::selectLanguage( QString language ) { > translator = new QTranslator(this); > translator->load( language, commonPath()+"/translations" ); > qApp->installTranslator(translator); > } > > ? > > >> Hello Jason, >> I got the same issue some times ago … and I found that it’s possible to use >> the translation feature of Qt … that seems static, but it’s not. >> And localize.biz it’s a wonderful site that allow you to modify Qt >> translation files directly on web and download the updated one. >> >> The trick to achieve (summarized) is the following: >> Somewhere in your code maintain and update from remote an array of >> Translators: >> translators["en"] = new QTranslator(this); >> translators["en"]->load( "tr_en", commonPath()+"/translations" ); >> translators["de"] = new QTranslator(this); >> translators["de"]->load( "tr_de", commonPath()+"/translations" ); >> translators["fr"] = new QTranslator(this); >> translators["fr"]->load( "tr_fr", commonPath()+"/translations" ); >> translators["ru"] = new QTranslator(this); >> translators["ru"]->load( "tr_ru", commonPath()+"/translations" ); >> You can change these entry with new files downloaded at runtime. >> >> Then you implement a method that you call at runtime for changing the >> translator, something like that: >> >> void Backend::selectLanguage( QString language ) { >> foreach( QString lang, translators.keys() ) { >> if ( lang == language ) { >> qApp->installTranslator( translators[lang] ); >> } else { >> qApp->removeTranslator( translators[lang] ); >> } >> } >> this->language = language; >> emit languageChanged(); >> } >> And then there is the final trick: >> You create a “fake” property that is always an empty string but it’s binded >> to languageChanged signal: >> >> Q_PROPERTY( QString es READ getES NOTIFY languageChanged ) >> >> And (the most annoying part), append this empty string to all string you >> want to change at runtime like that: >> >> qsTr("NEWS<br/>HUB")+backend.es >> >> And close the loop. >> >> What will happen is the following: the translator change at runtime and you >> trigger a languageChanged that trigger an update of all string that got >> backend.es appended that trigger the call of qsTr that take the new >> translation from the new translator. >> _______________________________________________ Interest mailing list Interest@qt-project.org http://lists.qt-project.org/mailman/listinfo/interest