Запустить приложение Qt на другом языке?

Я работаю над приложением Qt, которое раньше было приложением KDE. В старые времена мне просто приходилось использовать некоторый синтаксис, например:

KDELANG=de ./my_app

Это запускало my_app на немецком языке, и только my_app. Возможно, это был не KDELANG, а какая-то переменная окружения.

Я потратил смехотворное количество времени, пытаясь выманить этот ответ из Google, и я сдаюсь. Должен быть какой-то способ запустить приложение Qt (4.5, если это имеет значение) на каком-то другом языке, не переключая всю мою локаль, чтобы добраться туда.


person Michael    schedule 09.05.2009    source источник
comment
откуда ты знаешь, что он не работает? Ваше приложение уже точно работает на немецком языке? Установка среды KDELANG=de работает только в том случае, если: 1. приложение имеет немецкий контент и 2. приложение использует envvar KDELANG для установки локали.   -  person John Weldon    schedule 09.05.2009


Ответы (4)


Я попробовал это с игрой KDE Kolf и

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

сделал трюк для меня, чтобы переключить его на немецкий или английский язык.

Я проверил это с помощью приложения QT qtparted

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

также появляется на немецком языке на моем английском рабочем столе. Очевидно, мне пришлось установить файлы немецкого языка, чтобы переведенное приложение заработало.

person lothar    schedule 09.05.2009
comment
Вы можете просто сделать: LANG=de_DE.UTF-8 qtparted Это ограничит эффекты одним приложением. - person Matthew Flaschen; 09.05.2009
comment
@Matthew Те (), которые создают подоболочку, имеют тот же эффект, поскольку экспорт будет виден только внутри подоболочки. - person lothar; 09.05.2009

Хорошо, это длинная история, но оказывается, что переводы на самом деле сломаны, и в этом вся основная проблема. Очевидная вещь, которую я попробовал сначала, отлично работает. Поскольку это не KDE, я просто использовал простой код:

LANG=de ./my_app

Теперь, когда я исправил ошибку в коде отладки (о, какая ирония), я ясно вижу, что файлы перевода (которые существуют) не загружаются. Ах. Ну хорошо тогда. Продолжать. Здесь ничего нет.

person Michael    schedule 10.05.2009

Как и любое другое приложение, работающее под Linux, приложения Qt следуют довольно запутанному способу настройки локали сообщений приложения: переменной среды LANGUAGE отдается предпочтение перед LC_ALL, LC_ALL перед LC_MESSAGES, LC_MESSAGES перед LANG (подробности).

Таким образом, любая из следующих команд работает для изменения локали приложения для сообщений, возвращаемых QLocale::system().name(). Я тестировал это с Qt 5.12 под Lubuntu 19.10 (имеется в виду, используя рабочий стол LXQt):

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

Примечания:

  • Приложение Qt полностью зависит от того, как адаптироваться к языковому стандарту приложения, возвращаемому QLocale::system(). Он может вообще не оценить QLocale::system() или не найти файлы перевода и т. д.

  • Вы также можете дать приведенные выше команды в форме env LANGUAGE=de ./application. У команды env есть еще несколько опций для управления тем, какую среду будет видеть ее дочерний процесс.

  • Значения локали, указанные в переменных среды (здесь de), не должны соответствовать какой-либо локали, установленной для всей системы и указанной в locale -a.

  • При указании только языка (например, de) Qt автоматически дополнит его страной по умолчанию и вернет ее в QLocale::system().name(), например de_DE.

  • При указании неправильного значения (например, xy) Qt вернет локаль по умолчанию C из QLocale::system().name().

person tanius    schedule 26.07.2020

Если вы используете рабочий стол Plasma, установите языковой пакет из раздела «Настройки системы» -> «Язык» и запустите приложение следующим образом: KDE_LANG=fr ./appName fr представляет французский язык, вы можете выбрать интересующий вас язык.

person Vijay13    schedule 12.09.2013