QObject :: tr()不转换动态生成的字符串

时间:2014-07-28 20:00:58

标签: qt blackberry blackberry-10 blackberry-cascades

QObject::tr("%1").arg(_value);

此处 _value 属于QString类型,是动态生成的。以上方式是否正确翻译动态生成的字符串,就像在我的代码中一样,它似乎无法正常工作。

3 个答案:

答案 0 :(得分:3)

有两个步骤:

1。让Qt提取字符串进行翻译。

这意味着使用

之一
  • tr()在QObject子类中
  • QCoreApplication::translate()
  • QT_TR_NOOP / QT_TRANSLATE_NOOP

lupdate将提取传递给这些函数/宏的字符串,并将其提供给linguist进行翻译。

2。执行翻译(即“查找”)

这由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本身。