Solved qtranslator with dynamic labels
-
@mrjj i did this,maybe must I add some word in disctionary?
-
@vale88
If it does not see the texts, im not sure later the translation will work.
Also, as far as i know, you can't add manual text in qt linguist. at least i didn't see any menu for that. -
@mrjj said in qtranslator with dynamic labels:
Also, as far as i know, you can't add manual text in qt linguist. at least i didn't see any menu for that.
you could edit the XML file manually, but that's not a good idea.
@vale88 please review the documentation suggested previously. As a summary you should:
- Enclose all the strings you want translated with tr() method in your code
- Set property translatable checked for all the texts you want translated in the UI (when using Qt Designer)
- Have a languagueChange() method in every class you want translated on the fly (if you want the user to switch languages with the application running). The method will be called automatically in response to a new translator being installed. Pseudo-code:
void YourClass::languageChange() { // all strings in UI form for this class will be retranslated here ui->retranslateUi(this); // Use following approach for setting a translated string other than the one you set in Designer ui->label->setText(tr("set label value to a different one from what you used in UI Designer")); }
- Add the desired language(s) to your project (.pro) file:
TRANSLATIONS = yourApp_it.ts / yourApp_es.ts / yourApp_frts
- run lupdate in your project's root folder. In the example above, you'll end up with 3 files to translate (Italian, Spanish, French)
- Run linguist and open the *.ts file and provide the proper translations for the desired language(s)
- Run lrelease to convert the translated .ts file(s) into .qm files (binary format)
- In your application, install the proper translator (.qm file) for the selected language
- Enjoy!
Just in case from your previous snippet:
void MainWindow::on_Traduzione_Inglese_clicked() { qApp->installTranslator(&Lingua_Italiana); ui->Traduzione_Italiano->setDisabled(false); // if(ui->info->text=="CONF. IN CARICAMENTO") if(ui->Info->text()=="CONF. IN CARICAMENTO") ui->Info->setText("cONF..lOADING"); }); }
it looks like the method is called when a button for "English Transalation" is clicked but you seem to load the Italian translator. In addition, it's a good approach to check that the translator did actually was installed properly, i.e. (pseudo-code again):
bool loaded = m_translator->load(pagePrefix +'_'+ locale); if (!loaded) qWarning() << QString("can't load %1 translation").arg(locale);
-
@Pablo-J.-Rogina I want to translate from italian to english, so how must i write in .pro?
and an other question, if I write manually,like this..void MainWindow::on_Traduzione_Inglese_clicked() { qApp->installTranslator(&Lingua_Italiana); ui->Traduzione_Italiano->setDisabled(false); // if(ui->info->text=="CONF. IN CARICAMENTO") if(ui->Info->text()=="CONF. IN CARICAMENTO") ui->Info->setText("cONF..lOADING"); }
in Info doesn't wtite conf loading..because installTranslaton block this I think
-
@vale88 it looks like you're not following the suggestions, like reading the documentation...
-
@Pablo-J.-Rogina yes I read but if I must translate from italian to english,I must write.
TRANSLATIONS = yourApp_en.ts ? -
@vale88
Hi
The ts files can be named anything.
it is just a normal convention to name them
appname_languagecode.ts
as then the filename can be constructed based on locale
But yes, your English language could be
TRANSLATIONS = yourApp_en.ts
and you simply used that name to load it. -
@mrjj ok, so with this I call a file ts that I must build? it's not automatic..sorry but i read documentation but i don't find a example clear
-
@vale88 said in qtranslator with dynamic labels:
@mrjj ok, so with this I call a file ts that I must build? it's not automatic..sorry but i read documentation but i don't find a example clear
than you didn‘t read carefully enough the docs even have an example
https://doc.qt.io/qt-5/qtlinguist-hellotr-example.htmla compileable one.
-
@J.Hilk yes, I read..
Tries to load a file called hellotr_la.qm (the .qm file extension is implicit) that contains Latin translations for the source texts used in the program. No error will occur if the file is not found.but I would like see an exaple of file ts to see how I must write it
-
Hi
No, the translation is not automatic.
You use lupdate to extract the texts to the TS
Then qt linguist to open and help translate
then qt linguist can compile the ts to qm
and you load the qm version to translate the app.But try to do the sample @J-Hilk links.
Its very basic and shows the procedure very well. -
@mrjj ok, I found a tutorial, tomorrow I try, thanks anyway
-
@vale88
Hi
Just a note.- but I would like see an exaple of file ts to see how I must write it
You don't write the ts file your self. that part is from extracting the texts with the tool
-
@mrjj I found an example in youTube, without see I didn't understand, I solved, I used prompt di comandi, thanks anyway
-
@vale88
Ok. super :) -
@mrjj only a thing..if I change something in my project, must I recreated my file ts? or I can update it
-
@vale88
You can update it.
Just like how you created it first time.
It will then add new texts to the file. -
@vale88 said in qtranslator with dynamic labels:
I found an example in youTube
It'd be great you can share the link so other users in your same condition could benefit.
In addition, since your issue seems solved, please don't forget to update your post. Thanks.
-
@Pablo-J.-Rogina https://www.youtube.com/watch?v=In5QH_ZrDJE
but I noticed that if I push in button english then labels are written in english because I put tr, but the labels just written in Italian aren't changed in english if I click button after...is it normal? -
@vale88
Hi
Yes that is normal.
Only when you call setText , new text can be used if you loaded a installTranslator
in the mean time.