如何本地化 Qt qmldir 插件?
How do I localize a Qt qmldir plugin?
我的应用程序有一个用 Qt QML 编写的 GUI,我们已经使用 qsTr()
和 Qt .ts
文件成功地将其国际化。现在我们通过 Qt 的 qmldir API 添加第三方插件支持。在插件的 .qml
文件中,只有当翻译已经在主机应用程序的 .ts
文件中时,qsTr()
才能正常工作。第三方 QML 作者如何将本地化字符串添加到他们的 qmldir 插件?
我创建了一个 Translator
class 来组织和加载翻译。我有一个包含语言名称和文件名的 QVariantMap
,然后当我创建我的 Translator
时,我必须提供源目录,因为这是加载翻译的要求。我的 class 还负责以 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);
我在 class 中对此进行了简化。这是我的 Translator
class 的 header and source 个文件,如果你想看的话。
下面是你如何使用它:
Translator translator(app.data(), "PATH_TO_TRANSLATION");
translator.addTranslation("SP", "plugin_XX.qm");
engine.rootContext()->setContextProperty("translator", &translator);
您可以安装多个翻译器,因此它适用于您的应用程序和插件。当我写我的 class 时,我并没有期待不同的来源,但你可以修改它,这样每次你添加翻译时,它都会为语言、文件名和路径使用一个 2 个字母的代码。
希望对您有所帮助!
我的应用程序有一个用 Qt QML 编写的 GUI,我们已经使用 qsTr()
和 Qt .ts
文件成功地将其国际化。现在我们通过 Qt 的 qmldir API 添加第三方插件支持。在插件的 .qml
文件中,只有当翻译已经在主机应用程序的 .ts
文件中时,qsTr()
才能正常工作。第三方 QML 作者如何将本地化字符串添加到他们的 qmldir 插件?
我创建了一个 Translator
class 来组织和加载翻译。我有一个包含语言名称和文件名的 QVariantMap
,然后当我创建我的 Translator
时,我必须提供源目录,因为这是加载翻译的要求。我的 class 还负责以 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);
我在 class 中对此进行了简化。这是我的 Translator
class 的 header and source 个文件,如果你想看的话。
下面是你如何使用它:
Translator translator(app.data(), "PATH_TO_TRANSLATION");
translator.addTranslation("SP", "plugin_XX.qm");
engine.rootContext()->setContextProperty("translator", &translator);
您可以安装多个翻译器,因此它适用于您的应用程序和插件。当我写我的 class 时,我并没有期待不同的来源,但你可以修改它,这样每次你添加翻译时,它都会为语言、文件名和路径使用一个 2 个字母的代码。
希望对您有所帮助!