Qt i18n:QT_TR_NOOP 在 c++ 中 qstr() 在 qml

Qt i18n: QT_TR_NOOP in c++ qstr() in qml

我认为自己在 Qt 的 i18n 方面有足够的知识,但我遇到了一个非常有趣的案例,我什至不确定它是否可以完成。

这是情况:

我有一个 class Station.cpp,它翻译一个字符串(在我使用 tr() 之前,但我切换到 QT_TR_NOOP)。此字符串随后暴露给 qml,并显示为普通文本。

forecast_titles.append(QT_TR_NOOP("Tonight"));

当将该变量暴露给 qml 后,问题就来了,在生成文本时(当 Station.cpp 代码为 运行 时)它被成功翻译了,但是当我更改语言时,变量不会在 qml 中重新计算,并继续以原始语言显示。

为什么我使用 QT_TR_NOOP:

QT_TR_NOOP ( sourceText ): Marks the string literal sourceText for dynamic translation in the current context (class), i.e the stored sourceText will not be altered.

所以,我认为,当它到达 qml 时,将其显示为

qsTr(mainboard.forecast_titles[0].title) + langProperty.emptyString

它应该进行翻译。

我猜问题出在 QT_TR_NOOP 的定义上,它在当前上下文 class[=38 中指定了 =]

是否可以通过其他方式实现? (我说的是QT_TRANSLATE_NOOP(),或任何其他命令)可能真的不可能,我可以找到解决方案,但仍然想知道是否可行。

备注:假设cpp中的变量成功暴露给QML,没有问题

正如我在评论中所说,我建议直接在您的QML代码中使用QT_TR_NOOP,从而让上层翻译字符串。

注意Qt Quick applications use the same underlying localization system as Qt C++ applications。因此,也许值得在文档中提到的正确位置使用它。

你对翻译上下文的看法是正确的。在 QML 端使用 qsTranslate('Station', mainboard.forecast_titles[0].title) + langProperty.emptyString