Qt i18n:qml中的Q ++ qstr()中的QT_TR_NOOP

时间:2015-12-29 08:40:52

标签: c++ qt internationalization

我已经在Q18的i18n中认识到自己有足够的知识,但我遇到了一个非常有趣的案例,我甚至不确定它是否可以完成。

这是情况:

我有一个类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):标记字符串文字sourceText以进行动态转换   当前上下文(类),即存储的sourceText不会   改变。

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

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

它应该进行翻译。

我想问题来自QT_TR_NOOP的定义,它在当前上下文类中指定

是否有可能以其他方式做到这一点? (我说的是QT_TRANSLATE_NOOP(),或任何其他命令)这可能是真的不可能,我可以找到一个解决方案,但仍然想知道是否可行。

备注:只是假设cpp中的变量已暂时暴露给QML,没有问题。

2 个答案:

答案 0 :(得分:1)

正如我在评论中所说,我建议您直接在QML代码中使用QT_TR_NOOP,这样就可以让上层翻译字符串。

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

答案 1 :(得分:0)

你对翻译环境是正确的。在QML方面使用qsTranslate('Station', mainboard.forecast_titles[0].title) + langProperty.emptyString