QObject::tr("%1").arg(_value);
此处 _value 属于QString类型,是动态生成的。以上方式是否正确翻译动态生成的字符串,就像在我的代码中一样,它似乎无法正常工作。
答案 0 :(得分:3)
有两个步骤:
这意味着使用
之一tr()
在QObject子类中QCoreApplication::translate()
QT_TR_NOOP
/ QT_TRANSLATE_NOOP
lupdate
将提取传递给这些函数/宏的字符串,并将其提供给linguist
进行翻译。
这由tr()
和QCoreApplication::translate()
再次完成。例如:
// marking the strings for extraction
static const char *strings[] = {
QT_TRANSLATE_NOOP("MyContext", "hello"),
QT_TRANSLATE_NOOP("MyContext", "world");
};
// performing the translation at runtime
qApp->translate("MyContext", strings[0]);
有大量关于整个过程的文档,see here。
答案 1 :(得分:2)
你或许打算这样做:
QObject::trUtf8(QString("%1").arg(_value).toUtf8(), "dynamic1");
您必须确保您的翻译文件包含_value
可以使用dynamic1
消除歧义值的所有值, iff 您希望消除它们的歧义,即。
当然,_value
必须从固定的字符串列表中选择无论如何 - 因为tr
不是人工翻译,它只是查找翻译列表中的字符串。
所以,你应该这样做:
QString value;
select (variant) {
case VarA: value = QObject::tr("foo"); break;
case VarB: value = QObject::tr("bar"); break;
...
}
这样相关的字符串将包含在翻译列表中。
答案 2 :(得分:0)
您正试图在错误的地方翻译_value
。如其他答案中所述,QObject::tr()
无法自行猜测如何翻译任何内容。它仅适用于固定字符串。您应该将要设置_value
的常量标记为翻译,而不是_value
本身。