如果我在静态成员中使用,Qt tr() 不起作用

Qt tr() not working if i am using in static member

本文关键字:tr Qt 不起作用 静态成员 如果      更新时间:2023-10-16

请让我知道为什么它不起作用,我是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>  

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

请参阅Qt Linguist手册,并在页面下方约三分之二处搜索标记为Using QT_TR_NOOP() and QT_TRANSLATE_NOOP()的部分。

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