1

有没有办法获得标记为翻译的 QString 的原始语言独立文本?这是我的代码的简化:

QString MyClass::getError()
{
   QString errorText = tr("hardError1");
   return errorText;
}

问题在于:

if (getError().contains("hard"))
{
//do something
}

如果用户更改语言将无法正常工作!

4

3 回答 3

2

因此,在进一步阅读文档后,我发现了一个似乎可行的解决方案,并想发布我的发现以供将来参考:

1)可以使用以下方法标记字符串以进行翻译:QT_TRANSLATE_NOOP(context, text)

2) 明确获得QCoreApplication::translate()c++ 和qsTranslate()QML 的翻译用途。然后将在定义的上下文中搜索翻译文件以寻找合适的翻译。如果没有找到匹配项,或者没有使用这两个函数,您将返回原始文本。

这是我在问题中发布的示例:

QString MyClass::getError()
{
   QString errorText = QT_TRANSLATE_NOOP("errorContex", "hardError1");
   return errorText;
}

qDebug()<< getError(); //this will give you the original string
qDebug()<< QCoreApplication::translate("errorContex", getError()); //this will give you the translation of the string according to the set language

console.log(qsTranslate("errorContex", myclass.getError())) //this will give you the translation of the string in QML
于 2016-01-28T10:36:21.283 回答
2

MyClass应该给你错误代码和错误字符串。对于程序逻辑,使用错误代码。对于 UI,使用错误字符串。

于 2016-01-27T19:20:40.327 回答
0

有没有办法获得标记为翻译的 QString 的原始语言独立文本?

不,那里没有。一旦字符串被翻译,它就是一个普通的字符串。

如果您必须使用字符串,那么您的类应该返回未翻译的字符串,并且应该在输出之前进行转换。

错误通常不是字符串,因此该方法可能希望返回某种错误对象或错误代码。

于 2016-01-27T21:23:26.570 回答