Unsolved Qt Linguist translation error
-
@ivanicy said in Qt Linguist translation error:
I have to reimplement the changeEvent in every windows in my app?
if you want online translation, yes. I would simply restart the app / tell the user to do so.
-
@ivanicy if all your translatable texts are inside your ui form classes, than it's a simple matter of calling
ui->retranslateUi(this);
on each form, after the translator is installed.
However, if you yourself set a - for translation marked -string inside your application (tr("")), you will have to set that string again after the translator is loaded and installed
-
@ivanicy It's not that complicated. Basically you need to write custom slot for every class that has a form. Slot is rather simple:
void MainWindow::changeEvent(QEvent *e) { QMainWindow::changeEvent(e); switch (e->type()) { case QEvent::LanguageChange: ui->retranslateUi(this); break; default: break; } }
This is the example for a main program window (hence
MainWindow
andQMainWindow
), but for classes that origin in, let's say, QDialog you'd obviously need to change code a bit. -
@artwaw Yes, I know how to do it, but I have a lot of windows in my app hehe. Thank you very much guys. @J-Hilk @Christian-Ehrlicher.
I have another question about it. I have lines like this in my code:
QString sText; if (sText.compare(tr("something"), Qt::CaseInsensitive) == 0) { ... }
In these cases, the compare function doesn't work. But I need to compare with the translated word. How can I fix it?
-
@ivanicy said in Qt Linguist translation error:
In these cases, the compare function doesn't work.
What does this mean?
-
@Christian-Ehrlicher The compare function doesn't work when I have a tr() inside it. It doesn't enter in this if().
-
Then you should look what tr("seomthing") returns matches what you're expecting.
-
@artwaw I have a stack overflow error in this function:
Do you know what is happening here?
Thank you very much!
-
@ivanicy I would change your last line from
MainWindow::changeEvent(...)
to
QMainWindow::changeEvent(...)therefore, making it nor a recursive function but rather a call to the base class.
-
@J-Hilk I use this function in more windows. I have to use QMainWindow in this windows too?
-
@ivanicy Please look again at my example - let the QMainWindow try to handle the event first.
In your code you call QMainWindow at the last line of the method. -
@ivanicy said in Qt Linguist translation error:
I use this function in more windows. I have to use QMainWindow in this windows too?
First thing in the changeEvent is to call respective ancestor's changeEvent.
EDIT: I use QMainWindow in the example since I stated that it is for QMainWindow descendant. If your window inherits from QDialog you should call QDialog, etc...
-
This post is deleted! -
@artwaw Thank you very much!
-
Sorry for bothering so much. I have detected that this method don't translate texts that I have put by coding, for example context menus or treeviews.
I use
ui->retranslateUi(this);
Is there something missing to translate the code part as well?
Thank you and sorry guys :(
-
@ivanicy said in Qt Linguist translation error:
ui->retranslateUi(this);
As you can see, only the stuff in the ui struct can be translated with this call - how should this translate e.g. text from a model or somewhere else? The rest has to be done manually.
-
@ivanicy said in Qt Linguist translation error:
Sorry for bothering so much. I have detected that this method don't translate texts that I have put by coding, for example context menus or treeviews.
I use
ui->retranslateUi(this);
Is there something missing to translate the code part as well?
Thank you and sorry guys :(
@J-Hilk said in Qt Linguist translation error:
However, if you yourself set a - for translation marked -string inside your application (tr("")), you will have to set that string again after the translator is loaded and installed
-
@ivanicy A way to avoid this is to update menu strings each time the context menu is displayed (there is a handy signal to connect to - QMenu::aboutToShow() - this way you can use tr().
As for treeviews, it really depends on how you obtain the data, from and when. Headers, I believe (never tried) could be automated. As for other kind of data, it really depends but can be difficult.