如果我在静态成员中使用,Qt tr()无效

时间:2013-10-26 17:06:48

标签: c++ qt localization internationalization translation

请让我知道为什么它不起作用我是Qt的新手。这是代码

class Transl
{
   public:
   static const QString str;
};
const QString Transl::str = QObject::tr("Hello world");

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QTranslator translator;
    translator.load("trans_la");
    app.installTranslator(&translator);

    QPushButton hello(Transl::str);
    hello.resize(100, 30);
    hello.show();
    return app.exec();
}

我的trans_la.ts文件包含我由lupdate生成的文件。

<TS version="2.0">
<context>
    <name>QObject</name>
    <message>
        <location filename="main.cpp" line="10"/>
        <source>Hello world</source>
        <translation>Orbis, te saluto!</translation>
    </message>
</context>
</TS>  

然后我发布生成trans_la.qm的lrelease。但是,当我运行我的可执行文件而不是显示翻译的字符串时,它显示“Hello world”。请告诉我为什么它不起作用。

1 个答案:

答案 0 :(得分:0)

请参阅Qt Linguist manual,然后搜索标有Using QT_TR_NOOP() and QT_TRANSLATE_NOOP()的部分,大约是页面下方的三分之二。

从translator.load()检查返回的布尔值是个好主意。我无法让它工作,并注意到文件未正确加载。然后我发现了another post,并手动将我的trans_fr.qm文件移动到.exe上方的目录中。我认为这是一个错误,因为hello translation walkthrough从未提到这是必要的。