我的应用程序有一个用Qt QML编写的GUI,我们使用qsTr()
和Qt .ts
文件成功地将其国际化。现在我们通过Qt的qmldir API添加第三方插件支持。在插件的.qml
文件中,qsTr()
仅在翻译已在主机应用程序的.ts
文件中时才能正常工作。第三方QML作者如何将本地化字符串添加到其qmldir插件中?
答案 0 :(得分:5)
我创建了一个Translator
类来组织和加载翻译。我有一个QVariantMap
来保存语言名称和文件名,然后当我创建我的Translator
时,我必须提供源目录,因为这是加载翻译的要求。我的课程还负责以QSettings
最后使用的语言进行存储。
现在,为了回答您的问题,您可以随时翻译与常规应用程序完全相同的方式,在项目文件中,您必须添加以下内容:
1 - 列出所有可能的翻译
TRANSLATIONS = \
translation_sp.ts \
translation_fr.ts
2 - 运行lupdate以生成实际的翻译文件
lupdate project.pro
3 - 运行lrelease
与Linguist翻译并创建实际翻译。在此示例中,此步骤将生成translation_sp.qm
和translation_fr.qm
4 - 使用您的插件部署翻译
一旦你有.qm
个文件用你的插件部署它们,理想情况下你可以标准化命名,也许总是使用plugin_XX.qm
5 - 在应用程序中加载插件翻译
要做到这一点,你必须知道翻译文件的路径和文件名,所以如果你的插件安装在Qt默认目录中并且你标准化翻译文件名这应该是简单的
qTranslator.load("plugin_XX.qm", "PATH_TO_TRANSLATION_FILE")
app->installTranslator(qtTranslator);
我在课堂上简化了这一点。以下是Translator
课程的header和source个文件,如果您想查看一下。
以下是你如何使用它:
Translator translator(app.data(), "PATH_TO_TRANSLATION");
translator.addTranslation("SP", "plugin_XX.qm");
engine.rootContext()->setContextProperty("translator", &translator);
您可以安装多个翻译器,因此它适用于您的应用程序和插件。当我编写课程时,我不期待不同的来源,但你可以修改它,这样每次添加翻译时,语言,文件名和路径都会有2个字母的代码。
希望这有帮助!