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,


### 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
更多关于uni-app 系统语言为越南文时获取不到系统语言 默认获取为中文的实战教程也可以访问 https://www.itying.com/category-93-b0.html
这是一个已知的三星设备特定问题。uni.getSystemInfoSync() 在某些三星设备的特定系统语言(如越南文)下,可能无法正确返回系统语言,而是返回默认的 zh-CN。
根本原因:
这个问题通常源于三星设备系统底层的语言区域(Locale)API 实现与标准 Android 行为存在差异。uni-app 框架通过调用系统原生 API 获取语言信息,当三星设备的系统返回了非标准或错误的区域代码时,框架层可能无法正确解析,从而回退到默认的 zh-CN。
解决方案:
-
使用原生插件进行兜底:对于此类设备特定问题,最可靠的方案是编写一个原生插件来直接获取系统语言。你可以创建一个 Android 原生模块,使用
Locale.getDefault().getLanguage()和Locale.getDefault().getCountry()来获取精确的语言和国家代码,然后在uni-app中通过uni.requireNativePlugin调用。这是最彻底的解决方案。 -
尝试使用
plus.global.locale:在 App 端,可以尝试使用 HTML5+ 的 API 作为备选方案。在App.vue的onLaunch或onShow生命周期中,添加以下代码进行尝试: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 } } // 最终决定使用的语言逻辑... }

