Qt语言学家lupdate忽略qml文件



运行lupdate时,不识别qml文件中的qsTr。生成的.ts文件不包含任何翻译上下文。

$ lupdate -verbose App.pro
Updating 'translations/en.ts'...
    Found 0 source text(s) (0 new and 0 already existing)

项目应该正确设置:

OTHER_FILES += 
    content/main.qml
TRANSLATIONS += 
    translations/en.ts

In the main。QML等:

menuBar: MenuBar {
    Menu {
        title: qsTr("File")
        MenuItem {
            text: qsTr("Open")
            onTriggered: Qt.quit();
        }
    }
    Menu {
        title: qsTr("...")
        MenuItem {
            text: qsTr("About")
            onTriggered: {
                aboutApplicationDialog.open()
            }
        }
    }
}

您可以通过在QML文件上运行lupdate来生成翻译文件:

lupdate main.qml -ts main.ts

要通过在项目.pro文件上运行lupdate来获取.ts文件,您可以使用一种变通方法。来自Qt文档:

lupdate工具从您的应用程序。Lupdate读取应用程序的.pro文件来识别哪些源文件包含要翻译的文本。这意味着你的的SOURCES或HEADERS条目中必须列出源文件.pro文件。如果你的文件没有被列出,其中的文本也不会被列出发现。

然而,SOURCES变量用于c++源文件。如果你列出QML或JavaScript源文件在那里,编译器尝试构建就好像它们是c++文件一样。作为一种变通方法,您可以使用lupdate_only{…}条件语句,以便lupdate工具看到.qml文件,但c++编译器会忽略它们。

如果您在应用程序中指定。qml文件,如:

lupdate_only{
SOURCES = content/main.qml
}

当您在项目.pro上运行lupdate时,生成的.ts文件将包含QML翻译上下文。

请注意,您必须坚持使用所示的大括号样式,使用替代样式,例如

# DON'T USE, FAILS!
lupdate_only
{
SOURCES = content/main.qml
}

失败(至少在OS X 10.12/Qt 5.7上),伴随着大量的编译器警告和错误,这些警告和错误远远没有给出任何实际问题的提示,例如

clang: warning: <qml source file>: 'linker' input unused
clang: warning: argument unused during compilation: '-g'
clang: warning: argument unused during compilation: '-isysroot /Applications/Xcode_7.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk'
  ... 
clang: error: no such file or directory: 'Page1.o'
clang: error: no such file or directory: 'Page1Form.ui.o'

或者,您可以使用延续字符:

lupdate_only 
{
SOURCES = content/main.qml
}

从Qt 5.8.0开始在.pro文件中不再需要任何技巧

QML文件可以在.qrc资源容器中列出一次,并且它们将通过以下命令正确地拾取:

    编译器
  1. 应用程序在运行时
  2. 翻译更新

。支持文件:

RESOURCES += application.qrc

。qrc是一个XML文件,通常通过qtcreator进行管理,而无需查看其内容。更多关于qrc文件的信息可以在这里找到:http://doc.qt.io/qt-5/qtquick-deployment.html managing-resource-files-with-the-qt-resource-system

。在2016-10-25的更新中增加了QRC支持:http://code.qt.io/cgit/qt/qttools.git/commit/?id=f2ebd51d96ad49eb826a4e37e67d506fffcbd40c它没有在Qt 5.7.1版本中发布,但它将在5.7.2(如果有的话)中可用。

使用lupdate_only似乎是可行的解决方案。但是请注意,QtCreator也会将qml文件作为源文件,所以现在当您导航项目时,列出的所有qml文件都是重复的。

为了避免这种情况,我使用了一种不同的方法,通过shell脚本更新翻译:

#!/bin/bash
../../5.5/gcc_64/bin/lupdate *.pro
for tr in *.ts
do
  ../../5.5/gvv_64/bin/lupdate *.qml -ts $ts
done

相关内容

  • 没有找到相关文章

最新更新