5

运行时,qml 文件中的任何一个都不会被识别lupdateqsTr生成的 .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

在 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()
            }
        }
    }
}
4

3 回答 3

11

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

lupdate main.qml -ts main.ts

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

lupdate 工具从您的应用程序中提取用户界面字符串。lupdate 读取应用程序的 .pro 文件以识别哪些源文件包含要翻译的文本。这意味着您的源文件必须列在 .pro 文件的 SOURCES 或 HEADERS 条目中。如果您的文件未列出,则不会找到其中的文本。

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

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

lupdate_only{
SOURCES = content/main.qml
}

当您lupdate在项目 .pro 上运行时,生成的 .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
}
于 2014-06-01T02:58:51.283 回答
3

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

QML 文件可以在 .qrc 资源容器中列出一次,它们将被正确拾取:

  1. 编译器
  2. 运行时的应用程序
  3. lupdate 翻译

。轮廓:

RESOURCES += application.qrc

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

.qrc 支持于 2016 年 10 月 25 日添加到 lupdate: http ://code.qt.io/cgit/qt/qttools.git/commit/?id=f2ebd51d96ad49eb826a4e37e67d506fffcbd40c 它没有进入 Qt 5.7.1 版本,但它将在 5.7.2 中可用(如果有的话)。

于 2017-03-03T11:21:48.007 回答
0

使用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
于 2017-06-27T09:56:21.340 回答