运行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
在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()
}
}
}
}
答案 0 :(得分:8)
您可以通过在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
}
答案 1 :(得分:2)
从Qt 5.8.0 开始,.pro文件中不再需要任何技巧。
QML文件可以在.qrc资源容器中列出一次,它们将通过以下方式正确选取:
.pro文件:
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中提供(如果有的话)。
答案 2 :(得分: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