Як використовувати gettext, щоб зробити файли QML перекладними


10

Я хотів би написати додаток QtQuick на основі Python ( PySide ) та QML .

Я знаю, що додатки Qt мають власну технологію перекладу, але я хотів би дотримуватися gettext для цього. Я хотів би знати, чи можливо:

  • Позначте рядки для перекладу у файли QML таким чином, щоб інструменти gettext могли витягнути їх у .potфайл
  • Попросіть gettext перекладати QML-файли під час виконання.

Я знаю, що це робиться в коді Unity 2D , в 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.
Девід Планелла

0

Ви можете зламати джерело lupdate, використовуючи щось, що вам подобається, щоб замінити qsTr. (легко), а потім використовуйте зламаний lupdate + lconvert + ви зберігаєте libintl для досягнення мети використання gettext.


1
Поясніть, як будь ласка.
Каз Вулф

відкрийте qdeclarative.cpp (у вихідному коді lupdte) знайдіть "qsTr", замініть його чим завгодно, припустимо, використовуйте "dsTr". Потім використовуйте dsTr ("ви рядок") у qml. використовувати lconvert генерувати файл горщика після використання модифікованого lupdate для створення файлу ts. Останній вам потрібно реалізувати та експортувати dsTr в глобальний контекст
сних

Ідіть головою і поставте це у відповідь. Як загальне правило, завжди кажіть, як і тоді дайте джерело.
Каз Вулф
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.