如何本地化Qt qmldir插件?

Chr*_*lan 2 plugins qt localization qml

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

ikt*_*two 5

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

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

1 - 列出所有可能的翻译

TRANSLATIONS = \
           translation_sp.ts \
           translation_fr.ts
Run Code Online (Sandbox Code Playgroud)

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

lupdate project.pro
Run Code Online (Sandbox Code Playgroud)

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);
Run Code Online (Sandbox Code Playgroud)

我在课堂上简化了这一点.以下是我班级的标题文件Translator,如果你想看一下.

这是你如何使用它:

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

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

希望这可以帮助!