这是我实施解决这个问题的方法之一。
// 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 *
,它可以在不需要太多额外工作或维护的情况下正确放入翻译文件。
希望有所帮助。
我认为过时的标签只意味着在源文件中找不到'Cloudy',所以Qt认为它已被删除(因此它已被废弃)。但我不明白标签如何防止翻译。如果它困扰你,只需创建'QMap',键是英文单词,值是'tr(key)'的结果。 –
elmigranto
该标签确实似乎不幸地阻止了翻译。 – PaulG
'lrelease' docs [says](http://qt-project.org/doc/qt-5.1/qtlinguist/linguist-manager.html#using-lrelease)它只编译标记为'finished'的翻译。因此,您应该在启动'lrealease'之前修改标记(例如,使用自定义实用工具和特定的翻译器注释),或者以源代码的形式将服务器中的所有字符串以某种方式放入。 – elmigranto