uni-app 系统语言为越南文时获取不到系统语言 默认获取为中文

uni-app 系统语言为越南文时获取不到系统语言 默认获取为中文

类别 信息
产品分类 uniapp/App
PC开发环境 Windows
PC操作系统版本 win10 企业版64位 LTSC
HBuilderX类型 正式
HBuilderX版本 3.2.12
手机系统 Android
手机系统版本 Android 9.0
手机厂商 三星
手机机型 SM-G9500
页面类型 vue
vue版本 vue2
打包方式 云端
项目创建方式 HBuilderX

操作步骤:

var systemLan = "vi-CN"  

try {  
 var res = uni.getSystemInfoSync();  
   console.log('系统语言', res)  
  systemLan = res.language  

} catch (e) {}
```

### 预期结果:
```json
{
    "errMsg": "getSystemInfoSync:ok",
    "brand": "samsung",
    "model": "SM-G9500",
    "pixelRatio": 3,
    "screenWidth": 360,
    "screenHeight": 692,
    "windowWidth": 360,
    "windowHeight": 692,
    "statusBarHeight": 24,
    "language": "vi-CN",
    "system": "Android 9",
    "version": "1.9.9.81096",
    "fontSizeSetting": "",
    "platform": "android",
    "SDKVersion": "",
    "windowTop": 0,
    "windowBottom": 0,
    "safeArea": {
        "left": 0,
        "right": 360,
        "top": 24,
        "bottom": 692,
        "width": 360,
        "height": 668
    },
    "safeAreaInsets": {
        "top": 24,
        "right": 0,
        "bottom": 0,
        "left": 0
    },
    "deviceId": "7D8D78A6804A7BF358DC2DC91256B478"
}
```

### 实际结果:
```json
{
    "errMsg": "getSystemInfoSync:ok",
    "brand": "samsung",
    "model": "SM-G9500",
    "pixelRatio": 3,
    "screenWidth": 360,
    "screenHeight": 692,
    "windowWidth": 360,
    "windowHeight": 692,
    "statusBarHeight": 24,
    "language": "zh-CN",
    "system": "Android 9",
    "version": "1.9.9.81096",
    "fontSizeSetting": "",
    "platform": "android",
    "SDKVersion": "",
    "windowTop": 0,
    "windowBottom": 0,
    "safeArea": {
        "left": 0,
        "right": 360,
        "top": 24,
        "bottom": 692,
        "width": 360,
        "height": 668
    },
    "safeAreaInsets": {
        "top": 24,
        "right": 0,
        "bottom": 0,
        "left": 0
    },
    "deviceId": "7D8D78A6804A7BF358DC2DC91256B478"
}
```

### bug描述:
uni.getSystemInfoSync(); 三星港版手机 型号SM-G9500 在App.vue 里 onShow 里获取 系统语言 中文,英文 可以获取 如果把手机系统语言改成 越南语言 , uni.getSystemInfoSync(); 获取的系统语言默认是 "language": "zh-CN", 其他安卓手机 测试了好几个手机 vivo,oppo 都获取语言正常 "language": "vi-CN", 唯独 三星港版手机 型号SM-G9500,

![](https://www.itying.com/uniimg.php?url=https://img-cdn-tc.dcloud.net.cn/uploads/questions/20211117/81248710f125b0763e4e8bfd5a72f87f.png)
![](https://www.itying.com/uniimg.php?url=https://img-cdn-tc.dcloud.net.cn/uploads/questions/20211117/21bf62430dad17246380cc5e228ba9de.png)

### App下载地址或H5网址:
[http://power.xflaidian.com/apk/Espot.apk](http://power.xflaidian.com/apk/Espot.apk)

更多关于uni-app 系统语言为越南文时获取不到系统语言 默认获取为中文的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app 系统语言为越南文时获取不到系统语言 默认获取为中文的实战教程也可以访问 https://www.itying.com/category-93-b0.html


这是一个已知的三星设备特定问题。uni.getSystemInfoSync() 在某些三星设备的特定系统语言(如越南文)下,可能无法正确返回系统语言,而是返回默认的 zh-CN

根本原因: 这个问题通常源于三星设备系统底层的语言区域(Locale)API 实现与标准 Android 行为存在差异。uni-app 框架通过调用系统原生 API 获取语言信息,当三星设备的系统返回了非标准或错误的区域代码时,框架层可能无法正确解析,从而回退到默认的 zh-CN

解决方案:

  1. 使用原生插件进行兜底:对于此类设备特定问题,最可靠的方案是编写一个原生插件来直接获取系统语言。你可以创建一个 Android 原生模块,使用 Locale.getDefault().getLanguage()Locale.getDefault().getCountry() 来获取精确的语言和国家代码,然后在 uni-app 中通过 uni.requireNativePlugin 调用。这是最彻底的解决方案。

  2. 尝试使用 plus.global.locale:在 App 端,可以尝试使用 HTML5+ 的 API 作为备选方案。在 App.vueonLaunchonShow 生命周期中,添加以下代码进行尝试:

    onShow() {
        let sysLang = '';
        // 优先使用 uni-app API
        try {
            const sysInfo = uni.getSystemInfoSync();
            sysLang = sysInfo.language;
            console.log('通过 uni.getSystemInfoSync 获取:', sysLang);
        } catch(e) {}
    
        // 如果 uni-app 获取到的是中文,但设备疑似非中文环境,尝试使用 plus API
        if (sysLang && sysLang.startsWith('zh')) {
            // 注意:plus.global 需要在 plus ready 后使用,通常在 App 生命周期中都是可用的
            if (typeof plus !== 'undefined' && plus.global) {
                const plusLang = plus.global.locale;
                console.log('通过 plus.global.locale 获取:', plusLang);
                // 这里可以根据 plusLang 进行进一步判断和覆盖
                // 例如,如果 plusLang 是 'vi',而 sysLang 是 'zh-CN',则可能采用 plusLang
            }
        }
        // 最终决定使用的语言逻辑...
    }
回到顶部