以不同的语言运行 Qt 应用程序?

Posted

技术标签:

【中文标题】以不同的语言运行 Qt 应用程序?【英文标题】:Run a Qt app in a different language? 【发布时间】:2009-05-09 04:20:28 【问题描述】:

我正在开发一个曾经是 KDE 应用程序的 Qt 应用程序。在过去,我只需要使用一些语法,例如:

KDELANG=de ./my_app

那是用德语运行 my_app,而且只有 my_app。它可能不是 KDELANG,但它是一些类似的环境变量。

我花了很多时间试图从 Google 中哄出这个答案,但我放弃了。必须有某种方法可以在不切换我的整个语言环境的情况下以某种其他语言运行 Qt(如果重要的话是 4.5)应用程序。

【问题讨论】:

你怎么知道它不起作用?您的应用程序肯定已经在德语中运行了吗?设置环境 KDELANG=de 仅在以下情况下有效:1. 应用程序包含德语内容,以及 2. 应用程序使用 KDELANG envvar 设置语言环境 【参考方案1】:

我在 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)

在我的英文桌面上也以德文出现。显然,我必须安装德语文件才能使翻译后的应用程序正常工作。

【讨论】:

你可以这样做:LANG=de_DE.UTF-8 qtparted 这会将效果限制在单个应用程序中。 @Matthew 创建子外壳的 () 具有相同的效果,因为导出仅在子外壳内可见。【参考方案2】:

就像任何其他 Linux 应用程序一样,Qt 应用程序遵循一种相当复杂的方式来选择应用程序消息区域设置:环境变量 LANGUAGE 优先于 LC_ALLLC_ALL 而不是 LC_MESSAGESLC_MESSAGES LANG (details)。

因此,以下任一命令都可以更改应用程序的消息区域设置,由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

注意事项:

我在 Lubuntu 19.10 下使用 Qt 5.12 对此进行了测试(也就是说,使用 LXQt 桌面)。

完全取决于 Qt 应用程序如何适应 QLocale::system() 返回的应用程序语言环境。它可能根本不会评估QLocale::system(),或者找不到它的翻译文件等。

您也可以以env LANGUAGE=de ./application 的形式给出上述命令。 env 命令有更多选项来控制其子进程将看到的环境。

环境变量(此处为de)中指定的区域设置值确实必须对应于在系统范围内安装并在locale -a 中列出的任何区域设置。

当仅指定一种语言(如de)时,Qt 会自动使用默认国家/地区扩展它并在QLocale::system().name() 中返回它,例如de_DE

当指定错误的值(如xy)时,Qt 将从QLocale::system().name() 返回默认的C 语言环境。

【讨论】:

【参考方案3】:

好的,说来话长,但事实证明,翻译实际上已被破坏,这就是这里的全部潜在问题。我首先尝试的显而易见的事情很好。由于这不是 KDE,所以我只是使用普通的:

LANG=de ./my_app

现在我已经修复了调试代码中的错误(哦,具有讽刺意味),我可以清楚地看到翻译文件(确实存在)没有被加载。啊。那好吧。继续。这里没什么可看的。

【讨论】:

【参考方案4】:

如果您使用的是等离子桌面,请从系统设置 -> 语言环境下安装语言包 并按以下方式运行应用程序:KDE_LANG=fr ./appName fr代表法语,你可以选择你感兴趣的语言。

【讨论】:

以上是关于以不同的语言运行 Qt 应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

构建插件以扩展 Qt 应用程序

QT上可以支持些啥语言开发程序?

如何在提供平台以运行不同语言代码的Web应用程序的tomcat中设置Java安全策略[重复]

在不同的计算机上运行 Qt 应用程序

CORBA 应用程序必须以与 ORB 相同的语言实现吗?

Popen 崩溃 Qt 调试器