Important: Please read the Qt Code of Conduct -

How to use tr () for ui widgets

  • Hi all,

    I want a multilingual application, in which language of the app changes as we select respective option from the drop down menu.
    Noticeable thing here is that is I have used ui file in my code instead of creating it in the code, hence confused how to use tr()??
    Thought of including in ui_Filename.h file...but I have to do it again and again when i remake the code, which I don't want.

  • In the Designer, you can find and set the property text->"translatable".

  • With this, i don't have to put tr() everywhere like i would do if i have created in source code?

  • Th uic places a method called retranslateUI in the UI class. Just call that method.

  • still will when have to define retranslateui function, I have to use ui widgets and put tr() in it....How it helps??

    Please help,

  • Using tr() is same as checking "translatable". You don't need to use tr() inside Designer - text property.

    Just check ui->retranslateUi(mainWindow*) is there or not. ;) I dont think you need to re implement!

  • Note that user-visible strings in properties in Designer/Creator are by default already marked translatable. They will appear in your strings-to-be-translated by default. If you look at the code generated by uic, you will also see that these strings are translatable by default.

  • uic produes ui_*.h files. And If you see, retranslateUi, there, you'll find the strings that are passed to [[doc:QApplication::translate]].

  • Thanks everyone, I can now able to get all my widgets of ui in the translation file.
    But still even after loading the translation files. language doesn't changed.....
    I am simply doing this in main.cpp after creating Ts and qm files

    @QTranslator translator;
    translator.load("setup_de ");

    I know there is something wrong ;)...hope you can help.....I am finding Qlinguist very complicated...:(

  • You can "Edit" your post instead of re-posting.

    @translator.load("setup_de ");@

    is having an extra space at the end?

    And do you have @TRANSLATIONS = setup_de.ts@ in your .pro file ?

  • I got this post twice by mistake...I know about the "edit" :)
    Want to delete this post.....

  • I have included in .ts file in my .pro file, and removed the extra space too...still didn't get language changed!!!

  • Happens! :)
    By the way, make sure, your executable can find your qm file.

    EDIT :

    Try giving absolute / relative path of your qm file. Say
    @translator.load("../setup_de");@ And whats the result ?

  • okay I am here little bit confused...Here I want my ui to change its language from english to say german.
    Now, I have created a .ts file and saved each text written in my ui (Forms) with a german translation. Then I created a .qm file.
    And in code (main.cpp) simply wrote :
    @QTranslator translator;

    All this and done.....what was the use of retranslateUi()

    Even though I am not able to make this happen, the other requirements of my code is I need to change same Ui in 5 lnguages each one happening on a click on a lineedit....Anyway this is the later part...I am facing problem in just changing into a single language...:(

    What's missing?

  • lets do the basic steps first. At the moment, just dont worry about the retranslateUi.

    Assume, your Ui texts are English.

    1. in pro file : TRANSLATIONS = setup_de.ts

    2. Install translator
      QTranslator translator;

    3.lupdate *.pro

    4.Open *.ts in Linguist. And give translation for each source texts.

    5.lrelease *.pro

    Now, you run your executable :)

    EDIT : Note that path to setup_de is the path to setup_de.qm

  • Exactly followed these steps....:(

    Tried giving absolute path to .qm file also still nothing....

    My code is having many ui forms...I have translated only single screen's ui into german....expecting that after run, that screen only will show in german....
    This cant be any reason for my problem??

  • You are installing [[doc:QTranslator]] to app. Not just a class.

    whats the result of
    @qDebug()<< translator.load("/path/to/setup_de");@ ?

  • Will check..... :)

  • Result is "True"

  • :(

    Followed the steps for a new project in which there is just one form and one main.cpp and nothing else ....(just to try changing ui in other language)
    It was working fine....But not happening in the code where there are so many Ui forms....what could be the reason?

  • Its doesn't matter if you have a single ui, or multiple ui. Eventually, all these UI files are turning one class each. So lets see it as classes.
    In other words, it doesn't matter how many classes are there or not.

    When you change your language, all you got to do is 1.load the qm, retranslateUi.

    May be your qm/ts are not correct ?

  • [quote author="pragati" date="1348295432"]I got this post twice by mistake...I know about the "edit" :)
    Want to delete this post.....[/quote]

    I deleted it for you. If you want, you can use the "report" link next to each post to request moderator attention for your post. If you say that you want it deleted because it is double, a mod will take care of it.

  • Thanks Andre.....

  • Is it necessary to load translation files in main.cpp??

  • Its not mandatory to load in main.cpp. You can Do it anywhere you like.

    If you are not defining a translator in main.cpp, make sure it is accessible from other objects.

  • Yes....Thanks Rahul, I tried it is working now...just didn't completed translation for all ui's so it was not happening...
    Thanks everybody

  • Good. Note that, it will check the translations in the reverse order you installed them.

    And you can mark the post as Solved ;)

Log in to reply