uni-app中uni.getSystemInfoSync().language 获取到的语言与系统不一致
uni-app中uni.getSystemInfoSync().language 获取到的语言与系统不一致
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| Windows | Win10企业版 | HBuilderX |
| Android | Android 11 | |
| 华为 mate30 |
示例代码:
console.log(uni.getSystemInfoSync().language)
console.log(plus.os.language)
操作步骤:
在APP运行状态 手机系统语言从中文切换至韩文 APP内获取系统语言为韩文
此时杀掉APP进程再打开APP 系统语言为韩文但APP内获取到的是中文
预期结果:
在APP运行状态 手机系统语言从中文切换至韩文 APP内获取系统语言为韩文
此时杀掉APP进程再打开APP 系统语言为韩文,APP内获取到也为韩文
实际结果:
在APP运行状态 手机系统语言从中文切换至韩文 APP内获取系统语言为韩文
此时杀掉APP进程再打开APP 系统语言为韩文但APP内获取到的是中文
bug描述:
uni.getSystemInfoSync().language 获取到的语言与系统不一致
下面有复现步骤
以前是好的 最近云打包出现的问题
更多关于uni-app中uni.getSystemInfoSync().language 获取到的语言与系统不一致的实战教程也可以访问 https://www.itying.com/category-93-b0.html
此版本使用其他设备是否正常?
仅这个设备出现问题吗?其他设备是否正常?
更多关于uni-app中uni.getSystemInfoSync().language 获取到的语言与系统不一致的实战教程也可以访问 https://www.itying.com/category-93-b0.html
我用了两台华为测试,都有这个现象,客户反馈说三星也会这样
回复 DCloud_UNI_LXH: 、云打包出现的,自定义基座也有这个问题, 只有安卓有 IOS好的
回复 DCloud_UNI_LXH: 帮忙看看吧哥 挺急的
回复 我会很认真: 测试没发现你的问题,你在哪儿调用的?plus.os.language就也会有问题是吧?
回复 DCloud_UNI_LXH: 是啊 在APP.vue onShow调用的
回复 DCloud_UNI_LXH: 用自定义基座 或者打正式包测试
解决了嘛,我也遇到了这个问题
求官方关注,之前Hbuildx没有这个问题,就是新版本HbuildX有这个问题,有的时候切换语言,可以获取正确的,但是再切换语言时,获取的就是上次设定的语言,没有同步,请官方修复下,谢谢~
1、先把手机调为别的语言(不要是中文);
2、再安装app,此时获取到的总是中文zh;
这个问题应该云打包时的配置问题,请官方看下。
HX3.2.11已修复
感谢!
回复 3***@qq.com: 你用uni.getSystemInfoSync().language返回值是什么
回复 DCloud_Android_ST:系统语言为日语情况下,这个接口获取到的是简体中文!包括weex.requireModule(‘plus’).getLanguage()获取也是简体中文!
回复 3***@qq.com: 你用什么设备测试的 你换其他手机试下 我这边测试没发现这个问题
回复 DCloud_Android_ST: 你来这个贴子看吧:https://ask.dcloud.net.cn/question/147399?item_id=205831&rf=false
回复 3***@qq.com: 不是一码事,uni.getSystemInfoSync里的language是废弃的,只有osLanguage才是准确的
根据你描述的问题,这确实是一个已知的缓存机制问题。uni.getSystemInfoSync().language 在某些情况下会返回缓存值而非实时系统语言,尤其是在应用冷启动时。
问题分析:
uni.getSystemInfoSync()在应用启动时会缓存系统信息,包括语言设置。- 当你在应用运行时切换系统语言,
uni.getSystemInfoSync().language能够通过监听系统广播获取到更新。 - 但杀掉应用后重新冷启动,
uni.getSystemInfoSync()可能返回的是应用上次运行时缓存的旧语言值,而不是当前系统实际语言。
解决方案:
方法一:使用 plus.os.language(推荐)
// 直接使用5+ API获取实时系统语言
const systemLanguage = plus.os.language || uni.getSystemInfoSync().language;
console.log('系统语言:', systemLanguage);
方法二:延迟获取
// 在应用启动时延迟获取语言
setTimeout(() => {
const language = uni.getSystemInfoSync().language;
console.log('延迟获取的语言:', language);
}, 100);
方法三:监听语言变化
// 监听系统语言变化
uni.onLocaleChange((res) => {
console.log('语言变化:', res.locale);
});
// 初始获取
const language = uni.getSystemInfoSync().language;


