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

20 回复

此版本使用其他设备是否正常? 仅这个设备出现问题吗?其他设备是否正常?

更多关于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 在某些情况下会返回缓存值而非实时系统语言,尤其是在应用冷启动时。

问题分析:

  1. uni.getSystemInfoSync() 在应用启动时会缓存系统信息,包括语言设置。
  2. 当你在应用运行时切换系统语言,uni.getSystemInfoSync().language 能够通过监听系统广播获取到更新。
  3. 但杀掉应用后重新冷启动,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;
回到顶部