0

我想在我的代码中翻译天气状况,但遇到了一些麻烦。

例子:

英语 - 多云

法语 - Nuageux

weatherString = hash["weather"];
weatherBytes = weatherString.toLocal8Bit();
weatherCharArray = weatherBytes.data();

qDebug() << "Current Weather: " << QObject::tr(weatherCharArray);

天气来自网络服务,所以它总是不同的。我知道上面的代码不会在我的 .ts 文件中自动创建条目,因为它们只在运行时才知道,所以我尝试手动输入它们。

<message>
<source>Cloudy</source>
<translation>Nuageux</translation>
</message>

但是每次我编译它都会放入:

type="obsolete"

在我的翻译标签中,我该怎么办??

4

1 回答 1

1

这是我实施解决此问题的方法之一。

// setup (in my constructor before any use of mytr function
this->availableTranslations();

在我的 cpp 文件中...

QMap <QString, QString> SettingsWidget::trMap;

void SettingsWidget::availableTranslations()
{
     if(trMap.size() != 0)
          return;
     trMap["true"] = tr("True","settings option");
     trMap["false"] = tr("False","settings option");
     trMap["Auto"] = tr("Auto","settings option");
     trMap["None"] = tr("None","settings option");
     trMap["smallest"] = tr("Smallest","settings option");
     trMap["very small"] = tr("Very Small","settings option");
     trMap["small"] = tr("Small","settings option");
     trMap["medium"] = tr("Medium","settings option");
     trMap["large"] = tr("Large","settings option");
     trMap["very large"] = tr("Very Large","settings option");
     trMap["Advanced"] = tr("Advanced","settings option");
     trMap["Basic"] = tr("Basic","settings option");
}

QString SettingsWidget::mytr(QString s)
{
     if(trMap.contains(s))
          return trMap[s];//qApp->translate("SettingsWidget",qPrintable(s));
     else
          return s;
}

然后,当我动态使用上述内容时,它看起来像这样:

// in use
mytr(list.at(currIndex));

您会注意到,使用此设置,它可以根据变量而不是仅查找翻译char *,并且无需太多额外工作或维护即可将其正确放入翻译文件中。

希望有帮助。

于 2013-08-19T20:23:33.383 回答