Автоматизация пользовательских контекстов QTranslator - PullRequest
4 голосов
/ 20 января 2012

Исходные строки Qt lupdate и QTranslator группируются в исключительные контексты.Это означает, что перевод, определенный в одном контексте, не будет доступен в другом контексте.

Контекст по умолчанию в C ++ - это имя класса, который переопределил QObject::tr().Контекст по умолчанию внутри декларативного QML - это текущее имя файла без расширения.Чтобы переопределить контекст перевода, можно использовать qApp->translate( "context", "source" ) или qsTranslate( "context", "source" ) в C ++ или QML.

Я хочу иметь возможность использовать один общий контекст перевода для большого проекта, и я обнаружил, что указаниеконтекст перевода с каждой отдельной функцией перевода очень утомителен.Существуют ли существующие или будущие расширения платформы перевода Qt, которые упростили бы эту задачу?Я ищу что-то такое же простое, как tr( "source" ) и qsTr( "source" ), но использующее контекст по умолчанию для всей системы или проекта.Есть идеи?

Ответы [ 2 ]

2 голосов
/ 20 января 2012

Вы можете использовать макрос Q_DECLARE_TR_FUNCTIONS () , применяемый к определению класса, который действует исключительно как контекст:

class CONTEXT_CLASS {
    Q_DECLARE_TR_FUNCTIONS(CONTEXT_CLASS)
};

, где CONTEXT_CLASS может быть настолько коротким, насколько вам нужно,скажем, X (надеясь, что это не конфликтует ни с чем другим в вашем коде).Это сделало бы ваши операторы tr ()

X::tr("source");

Не пытайтесь #определить что-то, чтобы сократить X :: tr, так как это не будет воспринято инструментом перевода.

0 голосов
/ 20 января 2012

Есть что-то проще, чем это.Используйте qtTrId / qsTrId (Qt / QML) вместо tr / qsTr и добавьте параметр -idbased к своим вызовам lrelease.У перевода на основе идентификатора вообще нет контекста.

...