背景:kanzi项目中需要动态加载多语言,轻量升级,替换旧的语言包
1. 动态加载多语言
kanzi提供了本地化方案,通过Localization Table实现多语言切换。
每一组多语言支持单独kzb导出,方便独立加载。
1.1 导出kzb
官方案例Localization中,点一下标题的kzb图标,变蓝色,导出kzb时候,会把这一列多语言单独导出kzb
1.2 动态加载kzb语言包
官方案例Localization中也给出了代码,核心代码
c
getResourceManager()->addKzbFile("Locale_packs/xx.kzb");
2. 轻量升级,替换旧的语言包
场景:旧的语言包翻译有错误,需要修正,因为程序已经加载了旧的语言包,需要加载新语言包,通过更新方式替换旧的翻译。
2.1 导出kzb
这里模拟导出汉语包1,汉语包2
界面如下
- 按钮【简体1】,替换汉语包1
- 按钮【简体2】,替换汉语包2
2.2 动态加载语言包,更新语言包
c
{
getResourceManager()->addKzbFile("Locale_packs/zh-HansX.kzb");
ResourceDictionarySharedPtr localeDictionary = getResourceManager()->acquireResource<ResourceDictionary>("kzb://multilanguage/Locales/zh-Hans");
ResourceDictionarySharedPtr localeDictionary2 = getResourceManager()->acquireResource<ResourceDictionary>("kzb://multilanguage/Locales/zh-HansX");
localeDictionary->merge(*localeDictionary2);
}
解释
- addKzbFile加载新的kzb
- kzb内容如下,所以资源字典的路径是
"kzb://multilanguage/Locales/zh-HansX"
- 通过资源字典的merge方法,更新新语言包