Cara menggunakan gettext untuk membuat file QML diterjemahkan

10

Saya ingin menulis aplikasi QtQuick berdasarkan Python ( PySide ) dan QML .

Saya tahu aplikasi Qt memiliki teknologi terjemahan sendiri, tetapi saya ingin tetap menggunakan teks untuk yang ini. Saya ingin tahu apakah mungkin untuk:

  • Tandai string untuk terjemahan dalam file QML dengan cara alat gettext dapat mengekstraknya menjadi .potfile
  • Minta gettext menerjemahkan file QML saat runtime.

Saya tahu ini dilakukan dalam kode Unity 2D , di C ++, jadi saya bertanya-tanya bagaimana hal itu dapat dilakukan dengan Python.

Catatan: Saya sedang berbicara tentang menggunakan gettext secara eksklusif pada saat runtime, bukan tentang mengkonversi antara format gettext dan Qt Linguist.

David Planella
sumber

Jawaban:

6

Secara umum tidak ada cara untuk menggunakan terjemahan gettext di QT karena perpustakaan menggunakan mekanisme terjemahan internal (file Qtranslate dan .ts) sebagaimana dinyatakan di sini QTBUG-2404 .

Namun, ada alternatif yang layak.

Pengiriman dengan QT ada toolkit bernama lconvert yang dapat digunakan untuk mengonversi file .ts ke .po dan sebaliknya.

Jadi, Anda dapat mengekstrak semua terjemahan Anda dengan:

lupdate

Kemudian gunakan lconvert untuk mendapatkan file po:

lconvert -of po -o file.po file.ts

Setelah terjemahan, Anda dapat mengkonversi kembali file po ke ts:

lconvert -of ts -o file.ts file.po

Kemudian Anda dapat menggunakannya di perangkat lunak Anda.

lupdate dapat digunakan baik untuk QT dan QtQuick.

Angelo
sumber
1
Terima kasih atas jawabannya!. Saya mengetahui alat konversi, tetapi mereka tidak akan membuat gettext memuat terjemahan saat runtime. Saya tahu secara teknis dimungkinkan dengan mengganti panggilan terjemahan Qt, seperti yang dilakukan orang-orang Unity 2D di C ++, saya hanya mencoba mencari cara melakukannya dengan Python.
David Planella
0

Anda dapat meretas sumber lupdate menggunakan sesuatu yang Anda sukai untuk menggantikan qsTr. (mudah) dan kemudian gunakan Anda hack lupdate + lconvert + Anda custome libintl untuk mencapai tujuan penggunaan gettext.

snyh
sumber
1
Tolong jelaskan bagaimana.
Kaz Wolfe
buka qdeclarative.cpp (dalam kode sumber lupdte) cari "qsTr" gantikan dengan apa pun yang Anda inginkan, anggap gunakan "dsTr". Kemudian gunakan dsTr ("string Anda") di qml. gunakan lconvert menghasilkan file pot setelah menggunakan lupdate yang dimodifikasi untuk menghasilkan file ts. Yang terakhir Anda perlu menerapkan dan mengekspor dsTr ke konteks global
snyh
Pergi dan masukkan itu dalam jawaban. Sama seperti aturan umum, selalu beri tahu caranya lalu berikan sumber.
Kaz Wolfe