Qt lupdate未从QObject对象获取tr()字符串

Qt lupdate未从QObject对象获取tr()字符串,qt,internationalization,Qt,Internationalization,我一直在尝试使用QtCreator制作一个简单的文本编辑器。此文本编辑器具有支持3种语言的可翻译UI:英语、西班牙语和葡萄牙语 我的问题是,每次运行lupdate时,代码中标记为可翻译的字符串文本(即包含在tr()中)都会被解析,并且可以使用QLinguist进行编辑和翻译。但是,作为QObject的一部分的字符串(例如QFileDialog的ButtonText)不会被解析。我是否缺少一些过程来让lupdate解析这些字符串 void PeterTextEditor::on_actionOpe

我一直在尝试使用QtCreator制作一个简单的文本编辑器。此文本编辑器具有支持3种语言的可翻译UI:英语、西班牙语和葡萄牙语

我的问题是,每次运行lupdate时,代码中标记为可翻译的字符串文本(即包含在tr()中)都会被解析,并且可以使用QLinguist进行编辑和翻译。但是,作为QObject的一部分的字符串(例如QFileDialog的ButtonText)不会被解析。我是否缺少一些过程来让lupdate解析这些字符串

void PeterTextEditor::on_actionOpen_triggered()
{
    QString fileName = QFileDialog::getOpenFileName(this, tr("Open Document"), QDir::currentPath(),
                                                    tr("Text documents (*.txt)"), 0, QFileDialog::DontUseNativeDialog);

    if (fileName.isNull())
        return;

    if ( m_fileName.isNull() && !isWindowModified() )
    {
        loadFile(fileName);
        return;
    }
    else
    {
        PeterTextEditor * openFile = new PeterTextEditor( fileName );
        openFile->show();
        openFile->setAttribute(Qt::WA_DeleteOnClose);

    }
}

在上面的示例中,
tr(“打开的文档”)
将被解析,但QFileDialog有QButton和QLabel对象,其中包含按钮文本和标签文本的字符串。这些对象未被解析。我希望这些对象被解析,以便我可以使用QLinguist添加翻译。

所有编译的翻译文件(*.qm)应该位于
/translations
目录中,您可以按中所示加载它们

不幸的是,Qt库并没有提供所有语言的所有翻译,而且并非所有提供的翻译都是完整的

对于我所拥有的版本(Qt 5.2.1),有一个库的西班牙语翻译(
Qt_es.qm
),但有许多字符串尚未翻译,并且没有葡萄牙语的翻译文件(
Qt_pt.qm

将Qt翻译成其他语言是一个正在进行的项目,因此我建议您搜索web和/或其他论坛,看看是否有人获得了您可以使用的更新文件

如果找不到任何字符串,并且西班牙语翻译缺少所需的两个字符串,则可以将源代码提取文件(
*.ts
)归档到
/Src/qttranslations/translations
目录中。不幸的是,您可能只能找到一个西班牙语的源代码提取文件


如果您愿意开始葡萄牙语翻译,您可以通过在
/Src/qtbase/qtbase.pro
文件上运行
lupdate
来提取所有需要的字符串。

例如,您可以在对话框中找到OK按钮,并使用tr()显式地将其文本设置为“OK”macro.Justice…我看到了添加了这些按钮翻译的.ts文件。但是我不知道他们是如何让lupdate提取这些字符串的,因为QFileDialog是一个预先制作的QObject。好吧,也许这两个链接可能会有帮助:,好吧,这验证了我的逻辑。QFileDialog的实现确实有可翻译的字符串。我的专业版但是,问题是要从实现中提取这些字符串,以便我可以使用QLinguist为它们创建自定义翻译,因为包含的QT qm文件缺少一些翻译。可能是我的意思不明确。如果翻译文件是纯xml文件,可能您可以尝试手动添加这些缺少的项目?