How can my program have 2 languages?
Hi! In my program i have an option at the preferences and you can change the language to English->Greek or Greek->English. I have a bool that when the language is Greek it is true and when it is English it is false. So what i am doing is at every message box or dialog i first check if the bool is greek or english and if it is true ( greek ) i translate the dialog to greek or if it is a messagebox the text is at greek.. So i am sure that this isn’t the correct way to do that.. Can you tell me what is the correct way to provide my program with more than the the english language?
I am using Ubuntu.
Just make sure that when you write user-visible stuff (like the title of a dialog) you put the option tr(“Insert text here”) enabled. This will ease the translation process.
I know you have accents in Greek, so it may be better to use
- trUtf8("Insert text here")
That’s what am i using..
QTranslator [developer.qt.nokia.com]Qt have good integrated system for it. See
Could i have some tips at this? I don’t know nothing about QTranslator.. Any example with a simple layer saying “Hello”, i don’t know something more than just a Class Reference :/
EDIT: I am now reading Qt Linguist Manual. I hope it will help me..
You should read documentations carefully and you will have no problem.
In case that you couldn’t managed to do the stuff, do these:
1- In your qt project file (.pro) add this line:
- TRANSLATIONS += program_gr.ts
Of course names and number of translations are optional.
2- start lupdate tool (which is an executable installed with Qt SDK) given your project file name. for example:
- lupdate ./program.pro
this scans your source code tree and determines translatable strings, then generates a XML-based translation file. in above example generates program_gr.ts.
3- Now you can perform actual translation! open your translation file with Qt Linguist and translate strings. then save the file and exit. It’s easy !
4- Now that you have translated strings, you should make binary translation file. just call lrealease and give your ts file name:
- lrealease program_gr.ts
5- when application starts, load your qm file using QTranslator class. in a widget-based application it may look like this:
- #include <QtGui/QApplication>
- #include <QTranslator>
- #include "mainwindow.h"
- int main(int argc, char *argv)
- QApplication a(argc, argv);
- QTranslator* translator;
- translator->load(a.applicationDirPath()+"/program_gr.qm"); // or other place that you put your .qm file
- MainWindow w;
- return a.exec();
note that you can load translations dynamically and use them whenever you need. but you should be careful about calling translation method for all of dialogs.
Basically i saw a tutorial here ( http://www.youtube.com/watch?v=V9Gep6-r8ns ). It is the same with yours except that i can’t understant what the guy is saying at Indonesia language..
Also at step 5 i have this
- QTranslator translator;
Ok so i create the gm file. BUT. As i said my program is for Ubuntu so i will make a deb file ( like setup.exe files at Windows.. ).. How can i provide the greek translation file and how after the program is installed users can translate the app to greek? ( Install my greek translation file so they can see the app translated at greek )
The translations at /usr/share/program/translations must be at .ts format or .qm format?
You need only qm files in runtime. ts files are used to translate. at runtime you want to load translated data.
Also notice that there is no magic with /usr/share/program/translations. that was just a suggestion. you could put your translations in every other location…