如何本地化Qt qmldir插件?

时间:2015-07-16 21:52:21

标签: qt plugins localization qml

我的应用程序有一个用Qt QML编写的GUI,我们使用qsTr()和Qt .ts文件成功地将其国际化。现在我们通过Qt的qmldir API添加第三方插件支持。在插件的.qml文件中,qsTr()仅在翻译已在主机应用程序的.ts文件中时才能正常工作。第三方QML作者如何将本地化字符串添加到其qmldir插件中?

1 个答案:

答案 0 :(得分:5)

我创建了一个Translator类来组织和加载翻译。我有一个QVariantMap来保存语言名称和文件名,然后当我创建我的Translator时,我必须提供源目录,因为这是加载翻译的要求。我的课程还负责以QSettings最后使用的语言进行存储。

现在,为了回答您的问题,您可以随时翻译与常规应用程序完全相同的方式,在项目文件中,您必须添加以下内容:

1 - 列出所有可能的翻译

TRANSLATIONS = \
           translation_sp.ts \
           translation_fr.ts

2 - 运行lupdate以生成实际的翻译文件

lupdate project.pro

3 - 运行lrelease

与Linguist翻译并创建实际翻译。在此示例中,此步骤将生成translation_sp.qmtranslation_fr.qm

4 - 使用您的插件部署翻译

一旦你有.qm个文件用你的插件部署它们,理想情况下你可以标准化命名,也许总是使用plugin_XX.qm

5 - 在应用程序中加载插件翻译

要做到这一点,你必须知道翻译文件的路径和文件名,所以如果你的插件安装在Qt默认目录中并且你标准化翻译文件名这应该是简单的

qTranslator.load("plugin_XX.qm", "PATH_TO_TRANSLATION_FILE")
app->installTranslator(qtTranslator);

我在课堂上简化了这一点。以下是Translator课程的headersource个文件,如果您想查看一下。

以下是你如何使用它:

Translator translator(app.data(), "PATH_TO_TRANSLATION");
translator.addTranslation("SP", "plugin_XX.qm");
engine.rootContext()->setContextProperty("translator", &translator);

您可以安装多个翻译器,因此它适用于您的应用程序和插件。当我编写课程时,我不期待不同的来源,但你可以修改它,这样每次添加翻译时,语言,文件名和路径都会有2个字母的代码。

希望这有帮助!