Cách sử dụng gettext để làm cho các tệp QML có thể dịch được


10

Tôi muốn viết một ứng dụng QtQuick dựa trên Python ( PySide ) và QML .

Tôi biết các ứng dụng Qt đã có công nghệ dịch thuật riêng, nhưng tôi muốn sử dụng gettext cho ứng dụng này. Tôi muốn biết nếu nó có thể:

  • Đánh dấu các chuỗi để dịch trong các tệp QML theo cách các công cụ gettext có thể trích xuất chúng thành một .pottệp
  • Có gettext dịch các tệp QML khi chạy.

Tôi biết điều này được thực hiện trong mã Unity 2D , trong C ++, vì vậy tôi tự hỏi làm thế nào nó có thể được thực hiện với Python.

Lưu ý: Tôi đang nói về việc sử dụng gettext độc quyền trong thời gian chạy, không phải về chuyển đổi giữa các định dạng gettext và Qt Linguist.

Câu trả lời:


6

Nói chung, không có cách nào để sử dụng dịch gettext trong QT vì thư viện sử dụng cơ chế dịch nội bộ (tệp Qtranslate và .ts) như đã nêu ở đây QTBUG-2404 .

Tuy nhiên, có một sự thay thế khả thi.

Vận chuyển với QT có một bộ công cụ gọi là lconvert có thể được sử dụng để chuyển đổi các tập tin .ts thành .po và ngược lại.

Vì vậy, bạn có thể trích xuất tất cả các bản dịch của bạn với:

lupdate

Sau đó sử dụng lconvert để lấy tệp po:

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

Sau khi dịch, bạn có thể chuyển đổi lại tập tin po thành ts:

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

Sau đó, bạn có thể sử dụng nó trong phần mềm của bạn.

lupdate có thể được sử dụng cho cả QtQuick.


1
Cảm ơn câu trả lời!. Tôi biết các công cụ chuyển đổi, nhưng chúng sẽ không khiến gettext tải các bản dịch khi chạy. Tôi biết điều đó là có thể về mặt kỹ thuật bằng cách ghi đè cuộc gọi dịch Qt, vì các anh chàng Unity 2D thực hiện nó trong C ++, tôi chỉ đang cố gắng tìm ra cách thực hiện nó trong Python.
David Planella

0

Bạn có thể hack nguồn của lupdate bằng cách sử dụng thứ gì đó bạn muốn để thay thế qsTr. (rất dễ dàng) và sau đó sử dụng bạn đã hack lupdate + lconvert + bạn yêu cầu libintl để đạt được mục tiêu sử dụng gettext.


1
Giải thích làm thế nào xin vui lòng.
Kaz Wolfe

mở qdeclarative.cpp (trong mã nguồn lupdte) tìm "qsTr" thay thế nó bằng bất cứ thứ gì bạn muốn, giả sử sử dụng "dsTr". Sau đó sử dụng DSTr ("chuỗi bạn") trong qml. sử dụng lconvert tạo một tệp pot sau khi sử dụng lupdate đã sửa đổi để tạo tệp ts. Việc cuối cùng bạn cần thực hiện và xuất DSTr sang bối cảnh toàn cầu
snyh

Đi đầu và đặt nó trong câu trả lời. Cũng như một quy tắc chung, luôn luôn cho biết làm thế nào và sau đó cung cấp nguồn.
Kaz Wolfe
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.