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

时间:2015-03-09 21:16:56

标签: qt internationalization

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

我的问题是,每次运行 lupdate 时,我的代码中被标记为可翻译(即包含在tr()中)的字符串文字都会被解析,并且可以使用QLinguist进行编辑和翻译。但是,作为QObjects的一部分的字符串(例如,QFileDialog的按钮文本未被解析。我是否缺少一些过程以便 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对象,其中包含按钮文本和标签文本的字符串。这些对象不会被解析。我希望这些解析,以便我可以使用QLinguist添加翻译。

1 个答案:

答案 0 :(得分:1)

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

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

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

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

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

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