问题
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 evaluateQLocale::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
. Theenv
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 inlocale -a
.When specifying only a language (like
de
), Qt will automatically expand it with a default country and return that inQLocale::system().name()
, for examplede_DE
.When specifying a wrong value (such as
xy
), Qt will return the defaultC
locale fromQLocale::system().name()
.
来源:https://stackoverflow.com/questions/842641/run-a-qt-app-in-a-different-language