QtLinguist:定义单个上下文

QtLinguist: Define a single context

如何在 QtLinguist .ts 文件中定义单个上下文,而不是每个文件一个上下文?

我需要这个,因为我有相同的字符串出现在不同的文件中,我想要相同的翻译(并且没有重复)

在 C++ 中,您可以使用静态函数 QCoreApplication::translate(const char* context, const char* text) 而不是传统的 QObject::tr(const char* text) 逐个字符串地显式指定翻译上下文(有关详细信息,请参阅此文档: http://doc.qt.io/qt-5/qcoreapplication.html#translate)

例如 menuItem->setText(QCoreApplication::translate("UniversalContext", "Exit"));

同样,你可以使用qsTranslate(context, text)函数在QML中指定上下文,a la Text { text: qsTranslate("UniversalContext", "hello") }

这些都将被 lupdate 选择为属于同一上下文(重复的字符串只会在您的 .ts 文件中出现一次)

如果你有很多字符串并且在每次调用 translate/qsTranslate 时指定上下文会很痛苦,你应该相当简单地创建一个 1-arg 宏 (c++) 或一个 js 函数 ( qml) 作为包装器。