5

実行すると、qml ファイルのlupdateどれも認識されません。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()
            }
        }
    }
}
4

3 に答える 3

11

lupdateQML ファイルで実行することにより、翻訳ファイルを生成できます。

lupdate main.qml -ts main.ts

lupdateプロジェクト .pro ファイルで実行して .ts ファイルを取得するには、回避策を使用できます。Qtのドキュメントから:

lupdate ツールは、アプリケーションからユーザー インターフェイス文字列を抽出します。lupdate は、アプリケーションの .pro ファイルを読み取り、翻訳対象のテキストが含まれているソース ファイルを識別します。これは、ソース ファイルが .pro ファイルの SOURCES または HEADERS エントリにリストされている必要があることを意味します。ファイルがリストされていない場合、ファイル内のテキストは見つかりません。

ただし、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
}
于 2014-06-01T02:58:51.283 に答える
0

を使用lupdate_onlyすることは、実行可能な解決策のようです。ただし、QtCreator は qml ファイルもソース ファイルとして取得するため、プロジェクトをナビゲートするとすべての qml ファイルが重複して表示されることに注意してください。

これを回避するために、シェル スクリプトを使用して翻訳を更新する別のアプローチを使用しました。

#!/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 に答える