【问题标题】:Translate Qt QML application on the fly即时翻译 Qt QML 应用程序
【发布时间】:2018-05-01 06:27:08
【问题描述】:

我正在尝试翻译一个充满

的 qt QML 应用程序
tr("string");

到处都是,如果我在应用程序启动之前设置翻译器,它可以完美运行,但我在运行时遇到了麻烦。唯一的解决方案似乎是empty string hack,但我不想搜索每个“tr”并添加空字符串

【问题讨论】:

  • 你使用的是tr(来自C++)还是qsTr(来自qml)?
  • @m7913d 我都在使用它
  • "但我不想搜索每个 "tr" 并添加空字符串"。倒霉。那就等那个甜蜜的 5.10 版本吧。

标签: c++ qt qml


【解决方案1】:

直到 Qt 5.9,最简单的解决方案是为每个可翻译的字符串添加一个空字符串:How to do dynamic translation in QML

从 Qt 5.10 开始,可以通过调用来重新翻译所有字符串:QQmlEngine::retranslate

更多信息可以在QtQuick Internationalization文档中找到:

您可以更改 Qt 翻译功能使用的语言 添加和删​​除翻译器 QCoreApplication::installTranslator()QCoreApplication::removeTranslator()。之后你可以打电话 QQmlEngine::retranslate() 触发刷新所有绑定 使用翻译。结果,您的用户界面将切换, 动态,到新选择的语言。

或者,您也可以将QEvent::LanguageChange 事件转发到 您的应用程序的 QQmlEngine 实例或将您自己的信号连接到QQmlEngine::retranslate()

请注意,在撰写本文时,only beta releases of Qt 5.10 可用。

【讨论】:

  • 是否可以使用 Loader 作为根元素来重新创建 sourceComponent 完全包括所有用户可见的字符串?
  • @Orient 我不知道。你应该试一试,但你会丢失存储在 qml 中的所有状态信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多