flutter getx 多语言 含跟随系统以及fallback
· 阅读需 3 分钟
思路:Getx的updateLocale 以及本地缓存
Locale支持以下两种构造方式
Locale(languageCode,languageCountryCode) // eg: Locale('en','US')
Locale.fromSubtags(languageCode:languageCode,scriptCode: languageScriptCode,countryCode: languageCountryCode); // eg: Locale.fromSubtags('zh','Hans','CN') countryCode 可空
注意
案例代码不完全,但不影响你的观看是尝试
原理分析
跟随系统语言 缓存中存一个flag 在多语言初始化的时候从缓存中获取flag值
- if flag = true
- 使用 Getx 的 deviceLocale 属性值获取到设备的 Locale
- else
- 获取缓存中的 languageCode , languageScriptCode , languageCountryCode 并构造Locale
- 这里可能会有人直接存在一个key里 但是我没办法分辨 有的时候是 zh_Hans 的情况 有的是 zh_Hans_CN 也有 en_Us 或者 en
使用 Getx 的 updateLocale(Locale) 进行更换