目录

如何实现在程序运行时动态添加并使用多语言资源

问题现象

有的程序中使用的部分多语言国际化文本是动态从云端获取的,此时该如何保存到程序中并使用,同时可以保证程序中的文本跟随系统语言的变化而变化。

背景知识

解决方案

  1. 由于resource文件夹中的多语言资源属于静态资源,在打包后无法在其中增加或减少相关多语言资源,所以这里自行实现一个I18n模块以管理动态增加的多语言资源。
  2. 解决思路:实现一个I18n单例类功能模块,用来管理程序中动态增加的语言包,并把当前语言使用的语言包放到AppStorage中供其他页面使用。通过applicationContext订阅环境变量变化,监听系统语言的变化,发生变化时通过I18n模块将使用的语言包替换为新的语言包,即可达到显示文本跟随系统语言变化的效果。

运行示例:

当系统语言为中文时,显示的是中文的字段:

当系统语言为英文时,显示的是英文对应的字段:

动图效果如下: