Chr*_*lan 2 plugins qt localization qml
我的应用程序有一个用Qt QML编写的GUI,我们使用qsTr()和Qt .ts文件成功地将其国际化.现在我们通过Qt的qmldir API 添加第三方插件支持.在.qml插件的文件中,qsTr()仅当转换已经在主机应用程序的.ts文件中时才能正常工作.第三方QML作者如何将本地化字符串添加到其qmldir插件中?
我创建了一个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.qm和translation_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字母代码的语言,文件名和路径.
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
507 次 |
| 最近记录: |