我想在我的代码中翻译天气状况,但我遇到了一些麻烦。
示例:
英语 - 多云
法语 - 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"
在我的翻译标签中,我该怎么办?
答案 0 :(得分: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 *
查找转换,并且无需太多额外的工作或维护即可将其正确放入转换文件中。
希望有所帮助。