2013-08-19 47 views
0

我想翻译我的代码中的天气情况,但我有点麻烦。Qt本地化与变量

例子:

英语 - 清除

法国 - Nuageux

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

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

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

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

但每次我编译它放入:

type="obsolete" 

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

+0

我认为过时的标签只意味着在源文件中找不到'Cloudy',所以Qt认为它已被删除(因此它已被废弃)。但我不明白标签如何防止翻译。如果它困扰你,只需创建'QMap ',键是英文单词,值是'tr(key)'的结果。 – elmigranto

+0

该标签确实似乎不幸地阻止了翻译。 – PaulG

+0

'lrelease' docs [says](http://qt-project.org/doc/qt-5.1/qtlinguist/linguist-manager.html#using-lrelease)它只编译标记为'finished'的翻译。因此,您应该在启动'lrealease'之前修改标记(例如,使用自定义实用工具和特定的翻译器注释),或者以源代码的形式将服务器中的所有字符串以某种方式放入。 – elmigranto

回答

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 *,它可以在不需要太多额外工作或维护的情况下正确放入翻译文件。

希望有所帮助。