Run a Qt app in a different language?

假如想象 提交于 2021-02-19 02:17:25

问题


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.


回答1:


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.




回答2:


OK, it's a long story, but it turns out the translations are, in fact, busted, and that's the whole underlying problem here. The obvious thing I tried first works fine. Since this isn't KDE, I just used plain:

LANG=de ./my_app

Now that I've fixed the bug in the debugging code (oh, the irony) I can plainly see that the translation files (which do exist) aren't getting loaded. Ah. Alrighty then. Carry on. Nothing to see here.




回答3:


If you are using plasma desktop, install language package from under System Setting -> locale and run app as follow : KDE_LANG=fr ./appName fr represents french, you can choose language of your interest.




回答4:


As every other application run under Linux, Qt applications follow the rather convoluted way how the application message locale is configured: environment variable LANGUAGE is given preference over LC_ALL, LC_ALL over LC_MESSAGES, LC_MESSAGES over LANG (details).

So either of following commands works to change the application's locale for messages, as returned by QLocale::system().name(). I tested this with Qt 5.12 under Lubuntu 19.10 (means, using the LXQt desktop):

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:

  • 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().



来源:https://stackoverflow.com/questions/842641/run-a-qt-app-in-a-different-language

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!