Как использовать gettext для перевода файлов QML

10

Я хотел бы написать приложение QtQuick на основе Python ( PySide ) и QML .

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

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

Я знаю, что это делается в 2D-коде Unity , на C ++, поэтому мне интересно, как это можно сделать с помощью Python.

Примечание: я говорю об использовании исключительно gettext во время выполнения, а не о преобразовании между форматами gettext и Qt Linguist.

Дэвид Планелла
источник

Ответы:

6

Вообще говоря, в QT нет возможности использовать перевод gettext, потому что библиотека использует внутренний механизм перевода (файлы 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.

Angelo
источник
1
Спасибо за ответ!. Мне известны инструменты конвертации, но они не заставляют gettext загружать переводы во время выполнения. Я знаю, что это технически возможно путем переопределения вызова Qt translate, так как ребята из Unity 2D делают это в C ++, я просто пытаюсь понять, как это сделать в Python.
Дэвид Планелла
0

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

snyh
источник
1
Объясните как пожалуйста.
Каз Вулф
откройте qdeclarative.cpp (в исходном коде lupdte), найдите «qsTr» и замените все, что вы хотите, предположим, используйте «dsTr». Затем используйте dsTr ("you string") в qml. Используйте lconvert для генерации файла банка после использования модифицированной lupdate для генерации файла ts. Последнее, что вам нужно реализовать и экспортировать dsTr в глобальный контекст
snyh
Идите головой и вставьте это в ответ. Как правило, всегда говорите, как, а затем укажите источник.
Каз Вулф