静态变量中的 qt tr()

发布于 2024-09-14 08:53:37 字数 633 浏览 6 评论 0原文

我在 qt 中的翻译方面遇到问题。我的项目中的所有翻译都工作正常,但有一个翻译位于类的静态变量中。代码的相应部分如下所示

头文件与此类似:

typedef struct {
    int         type;
    QString     problematicString;
} info;

MyClass::QObject_Descendant
{
Q_OBJECT;

//some functions like constructor, destructor... etc.
....

static info myClassInfo;//class that makes problems

}

在实现文件中,我按如下方式初始化变量:

info MyClass::myClassInfo={
    1,
    tr("something to be translated")
};

无论我做什么(尝试使用 QT_TR_NOOP,然后 tr() 和其他),我都无法翻译 myClassInfo.problematicString。最奇怪的是,文字“要翻译的东西” 出现在 *.ts 文件中。

如果有人有任何提示,请与我分享。提前致谢。

克里斯.

I have problem concerning translations in qt. All translations in my porject work fine, but one, which is in a static variable of a class. Corresponding part of code looks as follows

The header file is similar to this:

typedef struct {
    int         type;
    QString     problematicString;
} info;

MyClass::QObject_Descendant
{
Q_OBJECT;

//some functions like constructor, destructor... etc.
....

static info myClassInfo;//class that makes problems

}

and in implementation file I initialize the variable as follows:

info MyClass::myClassInfo={
    1,
    tr("something to be translated")
};

And whatever I do (trying with QT_TR_NOOP, then tr() and others) I cannot get myClassInfo.problematicString translated. The weirdest thing is that the text "something to be translated"
appears in *.ts file.

If someone has any hints, please share them with me. Thanks in advance.

Chris.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

无畏 2024-09-21 08:53:37

静态变量在运行 int main 函数之前实例化(并因此运行构造函数代码)。翻译代码是在 QApplication 构造函数中设置的(我相信),在输入 int main 函数之前它不会运行。因此,您试图在支持字符串的代码初始化之前获取该字符串的翻译。

为了避免这种情况,您可以接受给定的字符串未翻译并在每次使用时显式翻译它,或者使用 在 First Use 惯用法上构造而不是静态成员变量。

Static variables are instantiated (and thus, constructor code run) before your int main function is run. The translation code is set up in the QApplication constructor (I believe), which isn't run until your int main function has been entered. Thus, you are trying to get the translation of a string before the code to support it has been initialized.

To avoid this, you could either accept that the given string isn't translated and explicitly translate it every time it is used, or use the Construct on First Use idiom instead of a static member variable.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文