Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Run a Qt app in a different language?

I'm working on a Qt application that used to be a KDE application. In the old days, I just had to use some syntax like:

KDELANG=de ./my_app

That ran my_app in German, and only my_app. It might not have been KDELANG, but it was some environment variable like that.

I've spent a ridiculous amount of time trying to coax this answer out of Google, and I give up. There must be some way to run a Qt (4.5 if that matters) application in some other language without switching over my entire locale to get there.

like image 508
Michael Avatar asked May 09 '09 04:05

Michael


People also ask

How do I change the language on my QT?

To change the language, select Tools > Options > Environment and select a language in the Language field. Select Restart Now to restart Qt Creator and have the change take effect.

How do you create a multi language application?

Multilanguage support is easy done for android. Create a new values directory for the language with the suffix of the language code. For german: values-de or french: values-fr than copy your string. xml into that and translate each entry.

Can Qt apps run on Gnome?

This Qt 5 platform theme applies the appearance settings of GNOME for Qt applications. It can be installed with the qgnomeplatform-qt5 package or the qgnomeplatform-gitAUR package for the development version.


2 Answers

I tried it with the KDE game Kolf and

(export LANG=de_DE.UTF-8; kolf)
(export LANG=en_US.UTF-8; kolf)

did the trick for me to switch it into German or English.

I verified it with the QT application qtparted

(export LANG=de_DE.UTF-8; qtparted)

also comes up in German on my English desktop. Obviously I had to install the German language files to get the translated app working.

like image 72
lothar Avatar answered Oct 05 '22 03:10

lothar


Just like any other Linux application, Qt applications follow a rather convoluted way how the application message locale is selected: environment variable LANGUAGE is given preference over LC_ALL, LC_ALL over LC_MESSAGES, LC_MESSAGES over LANG (details).

So any one of the following commands works to change the application's locale for messages, as returned by QLocale::system().name():

LANGUAGE=de ./my_app
LANGUAGE=   LC_ALL=de ./my_app
LANGUAGE=   LC_ALL=   LC_MESSAGES=de ./my_app
LANGUAGE=   LC_ALL=   LC_MESSAGES=   LANG=de   ./my_app

Notes:

  • I tested this with Qt 5.12 under Lubuntu 19.10 (means, using the LXQt desktop).

  • It is entirely up to the Qt application how to adapt to the application locale as returned by QLocale::system(). It may not evaluate QLocale::system() at all, or fail to find its translation files etc..

  • You can also give the above commands in the form env LANGUAGE=de ./application. The env command has some more options to control which environment its child process will see.

  • The locale values specified in the environment variables (here de) do not have to correspond to any locale that is installed system-wide and listed in locale -a.

  • When specifying only a language (like de), Qt will automatically expand it with a default country and return that in QLocale::system().name(), for example de_DE.

  • When specifying a wrong value (such as xy), Qt will return the default C locale from QLocale::system().name().

like image 36
tanius Avatar answered Oct 05 '22 02:10

tanius