lupdate 没有从 QObject 对象中获取 tr() 字符串

lupdate is not getting tr() strings from QObject objects

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

我的问题是,每次我 运行 lupdate,我的代码中标记为可翻译(即包含在 tr() 中)的字符串文字都会被解析并可以使用 QLinguist 进行编辑和翻译。但是,作为 QObjects 一部分的字符串(例如 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("Open Document") 将被解析,但是 QFileDialog 具有 QButton 和 QLabel 对象,其中包含用于按钮文本和标签 text.These 的字符串。我希望对这些进行解析,以便我可以使用 QLinguist 添加翻译。

所有已编译的翻译文件 (*.qm) 都应该在 /translations 目录中,您可以按 QFileDialog localization.

中所示加载它们

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

对于我的版本(Qt 5.2.1),有库的西班牙语翻译(qt_es.qm)但是有很多字符串还没有翻译,没有翻译葡萄牙语文件(qt_pt.qm).

Qt 到其他语言的翻译是一个正在进行的项目,所以我建议您搜索网络 and/or 其他论坛,看看是否有人有更新的文件,您可以使用。

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

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