我已经在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,没有问题。
答案 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
。