自动化自定义QTranslator上下文

自动化自定义QTranslator上下文,qt,localization,qt4,translation,qml,Qt,Localization,Qt4,Translation,Qml,Qt lupdate和QTranslator将源字符串分组到独占上下文中。这意味着在一个上下文中定义的翻译将无法在另一个上下文中访问 C++中的默认上下文是重写 QObj::Trand()/Cuth>的类的名称。声明性QML中的默认上下文是不带扩展名的当前文件名。要覆盖翻译上下文,人们将使用 QAPP>翻译(“上下文”、“源”)< /C>或 QStRANSLAT(“上下文”、“源”)< /C> > C++或QML > 我希望能够在一个大型项目中使用一个通用的翻译上下文,我发现用每个翻译函数指

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

C++中的默认上下文是重写<代码> QObj::Trand()/Cuth>的类的名称。声明性QML中的默认上下文是不带扩展名的当前文件名。要覆盖翻译上下文,人们将使用<代码> QAPP>翻译(“上下文”、“源”)< /C>或<代码> QStRANSLAT(“上下文”、“源”)< /C> > C++或QML >


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

您可以使用Q\u DECLARE\u TR\u FUNCTIONS()宏应用于仅作为上下文的类定义:

class CONTEXT_CLASS {
    Q_DECLARE_TR_FUNCTIONS(CONTEXT_CLASS)
};
其中CONTEXT_类可以尽可能短,比如X(希望它不会与代码中的任何其他内容冲突)。这将使您的tr()语句

X::tr("source");

不要试图#定义一些东西来缩短X::tr,因为这不会被翻译工具接受。

还有比这更简单的东西。使用qtTrId/qsTrId(Qt/QML)代替tr/qsTr,并将-idbase参数添加到lrelease调用中。基于ID的翻译完全没有上下文。

很酷,谢谢!这对于C++组件来说是完美的。有没有办法将其扩展到QML?这似乎很有效,谢谢!“ID”可以是一个带有空格和一些标点符号的复杂字符串,但它不会出现在语言学家的文章中。相反,需要在
qtrid()
/
qsTrId()
调用之前添加特殊的
/%“源文本”
注释。。。或者编写脚本,自动将ID字符串复制到源标记中。:)希望以后我不需要背景分离。