如何在Qt/PyQt/PySide中查找当前QLocale?

5
我怎样找到当前活动的QLocale?我们可以通过QLocale.system()找到默认系统语言环境,但我想要类似于QLocale.current()的东西,以检查我正在尝试进行的语言环境更改是否真正起作用。 文档中有很多设置语言环境或查找给定QLocale属性的方法。但是是否有一种简单的方法来返回当前的QLocale,以便我可以对其应用这些方法(例如name())? 相关问题

“用户可以在命令行中设置QLocale” 是什么意思?具体使用了哪种机制? - ekhumoro
@ekhumoro 我删除了那个令人困惑的部分。我假设我们可以找到任何时候都可以使用的东西,就像您可以随时调用 QtCore.QLocale.system().name() 一样,无论您处于什么上下文中。我的目标主要是调试:我想检查我尝试进行的区域设置更改是否有效。但我假设上下文并不太重要,应该有一种方法可以找出当前的 QLocale,就像有一种简单的方法可以找到默认的系统区域设置一样。也许这是一个错误的假设。 - eric
1
@ekhumoro 我认为答案是没有内置的方法可以做到我所要求的。但是,要更改当前应用程序的语言环境,您可以使用 QLocale.setDefault(newLocale)(其中 newLocaleQLocale 类型)。但是既然您已经有了 newLocale,您可以应用所有想要的方法(例如,newLocale.name())。这听起来正确吗? - eric
2个回答

5
答案很简单,只需要使用以下内容:
current_locale = QtCore.QLocale()

如果没有显式地使用QLocale.setDefault()重新设置默认语言环境,则将解析为系统语言环境。

因此,正常的流程是:在创建QApplication后立即设置默认语言环境(如果需要)。在此之后,每当创建一个没有参数的QLocale对象时,它将解析为最初自己设置的语言环境,或者回退到系统语言环境。

这似乎暗示最好总是构造一个新的QLocale对象来获取有关语言环境的信息,而不是缓存信息以供稍后重用。


2
您可以通过获取该类的实例来查找当前区域设置:
curr_locale = QLocale()

然后获取当前的区域设置信息,例如:

print(curr_locale.nativeCountryName(), curr_locale.name(), curr_locale.nativeLanguageName())

如果您想要更改当前的语言环境,例如:

QLocale.setDefault(QLocale(QLocale.Portuguese, QLocale.Brazil))

查看QLocale文档了解更多方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接