Как использовать 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.


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

0

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


1
Объясните как пожалуйста.
Каз Вулф

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

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