วิธีใช้ 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.