วิธีใช้ gettext เพื่อทำให้ไฟล์ QML สามารถแปลได้


10

ผมอยากจะเขียนQtQuickแอปขึ้นอยู่กับงูหลาม ( PySide ) และQML

ฉันรู้ว่าแอพ Qt มีเทคโนโลยีการแปลเป็นของตัวเอง แต่ฉันต้องการติดกับgettextสำหรับแอพนี้ ฉันอยากรู้ว่าเป็นไปได้หรือไม่:

  • ทำเครื่องหมายสตริงสำหรับการแปลในไฟล์ QML ด้วยวิธีที่เครื่องมือ gettext สามารถแยก.potไฟล์เหล่านั้นเป็นไฟล์
  • ให้ gettext แปลไฟล์ QML ขณะใช้งานจริง

ฉันรู้ว่ามันทำในUnity 2D codeใน C ++ ดังนั้นฉันจึงสงสัยว่ามันจะทำอย่างไรกับ Python

หมายเหตุ: ฉันกำลังพูดถึงการใช้ gettext เฉพาะตอนรันไทม์ไม่ใช่เกี่ยวกับการแปลงระหว่างรูปแบบ gettext และ Qt Linguist

คำตอบ:


6

โดยทั่วไปมีวิธีใดที่จะใช้การแปล gettext ใน QT เพราะห้องสมุดใช้กลไกการแปลภายใน (qtranslate และไฟล์ TS) ตามที่ระบุไว้ที่นี่QTBUG-2404

อย่างไรก็ตามมีทางเลือกที่ทำงานได้

การจัดส่งด้วย QT มีชุดเครื่องมือที่เรียกว่าlconvertซึ่งสามารถใช้ในการแปลงไฟล์. ts เป็น. po และในทางกลับกัน

เพื่อให้คุณสามารถแยกการแปลทั้งหมดของคุณด้วย:

lupdate

จากนั้นใช้lconvertเพื่อรับไฟล์ po:

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

หลังจากการแปลคุณสามารถแปลงไฟล์ po กลับเป็น ts:

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

จากนั้นคุณสามารถใช้มันในซอฟต์แวร์ของคุณ

lupdateสามารถใช้ทั้ง QT และ QtQuick ได้


1
ขอบคุณสำหรับคำตอบ!. ฉันรับรู้ถึงเครื่องมือการแปลง แต่พวกเขาจะไม่ทำให้ gettext โหลดการแปลตอนรันไทม์ ฉันรู้ว่ามันเป็นไปได้ในทางเทคนิคโดยการเอาชนะการแปล Qt เพราะพวก Unity 2D ทำได้ใน C ++ ฉันแค่พยายามหาวิธีทำใน Python
David Planella

0

คุณสามารถแฮ็คแหล่งข้อมูลของ lupdate ใช้สิ่งที่คุณต้องการแทนที่ qsTr (เป็นเรื่องง่าย) จากนั้นใช้คุณแฮ็ค lupdate + lconvert + คุณ custome libintl เพื่อให้บรรลุวัตถุประสงค์การใช้ gettext


1
อธิบายว่าโปรดอย่างไร
Kaz Wolfe

เปิด qdeclarative.cpp (ในซอร์สโค้ด lupdte) ค้นหา "qsTr" แทนด้วยสิ่งที่คุณต้องการใช้ "dsTr" จากนั้นใช้ dsTr ("you string") ใน qml ใช้ lconvert สร้างไฟล์ pot หลังจากใช้ lupdate ดัดแปลงเพื่อสร้างไฟล์ ts คนสุดท้ายที่คุณต้องการนำไปใช้และส่งออก dsTr ไปยังบริบททั่วโลก
snyh

ไปที่หัวและวางไว้ในคำตอบ เช่นเดียวกับกฎทั่วไปให้บอกวิธีและแหล่งที่มาเสมอ
Kaz Wolfe
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.