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

Reply via email to