【问题标题】:QObject::tr() not translating dynamically generated stringsQObject::tr() 不翻译动态生成的字符串
【发布时间】:2014-08-19 20:39:27
【问题描述】:
QObject::tr("%1").arg(_value);

这里的_value是QString类型,是动态生成的。上述方法是否正确翻译动态生成的字符串,因为在我的代码中它似乎不起作用。

【问题讨论】:

  • 当然不是,这将请求并生成字符串"%1"的翻译。
  • 那么正确的方法到底是什么?有什么例子吗?
  • 我什至不确定您要做什么:_value 是您要翻译的值吗?
  • 是的,我想翻译_value
  • @Kartik 您如何确保_value 可以采用的一组值最终出现在翻译文件中并由您的翻译人员翻译?请记住,tr 只是在列表中进行查找。要翻译的字符串必须在该列表中 first.

标签: qt blackberry blackberry-10 blackberry-cascades


【解决方案1】:

有两个步骤:

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

【讨论】:

【解决方案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;
  ...
}

这样相关的字符串就会包含在翻译列表中。

【讨论】:

    【解决方案3】:

    您试图在错误的位置翻译_value。如其他答案所述,QObject::tr() 无法自行猜测如何翻译任何内容。它仅适用于固定字符串。您应该将设置为 _value 的常量标记为用于翻译,而不是 _value 本身。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-04
      • 1970-01-01
      相关资源
      最近更新 更多