自动化自定义QTranslator上下文

时间:2012-01-19 21:45:23

标签: qt localization qt4 translation qml

Qt lupdate和QTranslator将源字符串分组到独占上下文中。这意味着在一个上下文中定义的转换将无法在不同的上下文中访问。

C ++中的默认上下文是已覆盖QObject::tr()的类的名称。声明性QML内的默认上下文是没有扩展名的当前文件名。要覆盖翻译上下文,可以在C ++或QML中使用qApp->translate( "context", "source" )qsTranslate( "context", "source" )

我希望能够在大型项目中使用单个公共翻译上下文,并且我发现使用每个翻译函数指定翻译上下文非常繁琐。是否有任何现有或未来的Qt翻译框架扩展可以简化此任务?我正在寻找像tr( "source" )qsTr( "source" )这样简单的东西,但是使用系统范围或项目范围的默认上下文。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

您可以将 Q_DECLARE_TR_FUNCTIONS()宏应用于仅作为上下文的类定义:

class CONTEXT_CLASS {
    Q_DECLARE_TR_FUNCTIONS(CONTEXT_CLASS)
};

其中CONTEXT_CLASS可以像你想的那样短,让我们说X(希望这不会与代码中的任何其他内容冲突)。这将使你的tr()语句

X::tr("source");

不要试图#define某些东西来缩短X :: tr,因为它不会被翻译工具拾取。

答案 1 :(得分:0)

比这更简单。使用qtTrId / qsTrId(Qt / QML)代替tr / qsTr并将-idbased参数添加到您的lrelease调用中。基于身份证的翻译根本没有背景。