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
。
我认为自己在 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
。