描述清楚仔细看
描述清楚仔细看
  • 发布:2026-03-23 17:01
  • 更新:2026-03-23 17:03
  • 阅读:26

【报Bug】uniapp 多语言鸿蒙端设置语言后uni内置组件依然是中文

分类:鸿蒙Next

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: win11

HBuilderX类型: 正式

HBuilderX版本号: 4.87

手机系统: HarmonyOS NEXT

手机系统版本号: HarmonyOS 6.0.0

手机厂商: 华为

手机机型: nova 12 Pro

页面类型: vue

vue版本: vue3

打包方式: 云端

项目创建方式: HBuilderX

示例代码:

<template>
<view class="container">
<view class="title">{{$t('index.demo')}}</view>
<view class="description">{{$t('index.demo-description')}}</view>
<view class="detail-link">{{$t('index.detail')}}: <text
class="link">https://uniapp.dcloud.net.cn/collocation/i18n</text></view>
<view class="locale-setting">{{$t('index.language-info')}}</view>
<view class="list-item">
<text class="k">{{$t('index.system-language')}}:</text>
<text class="v">{{systemLocale}}</text>
</view>
<view class="list-item">
<text class="k">{{$t('index.application-language')}}:</text>
<text class="v">{{applicationLocale}}</text>
</view>
<view class="locale-setting">{{$t('index.language')}}</view>
<view class="locale-list">
<view class="locale-item" v-for="(item, index) in locales" :key="index" @click="onLocaleChange(item)">
<text class="text">{{item.text}}</text>
<text class="icon-check" v-if="item.code == applicationLocale"></text>
</view>
</view>
<view class="xx" @click="testImage()">相册</view>
<view class="xx" style="margin-top: 20px;" @click="testScancode()">扫码</view>
</view>
</template>

<script>
export default {
data() {
return {
systemLocale: '',
applicationLocale: ''
}
},
computed: {
locales() {
return [{
text: this.$t('locale.auto'),
code: 'auto'
}, {
text: this.$t('locale.en'),
code: 'en'
},
{
text: this.$t('locale.zh-hans'),
code: 'zh-Hans'
},
{
text: this.$t('locale.zh-hant'),
code: 'zh-Hant'
},
{
text: this.$t('locale.ja'),
code: 'ja'
}
]
}
},
onLoad() {
let systemInfo = uni.getSystemInfoSync();
this.systemLocale = systemInfo.language;
this.applicationLocale = uni.getLocale();
this.isAndroid = systemInfo.platform.toLowerCase() === 'android';
uni.onLocaleChange((e) => {
this.applicationLocale = e.locale;
})
},
methods: {
testImage() {
uni.chooseImage({
complete() {

                }  
            })  
        },  
        testScancode(){  
            uni.scanCode({  
                complete() {  

                }  
            })  
        },  
        onLocaleChange(e) {  
            if (this.isAndroid) {  
                uni.showModal({  
                    content: this.$t('index.language-change-confirm'),  
                    success: (res) => {  
                        if (res.confirm) {  
                            uni.setLocale(e.code);  
                        }  
                    }  
                })  
            } else {  
                uni.setLocale(e.code);  
                this.$i18n.locale = e.code;  
            }  
        }  
    }  
}  

</script>

<style>
.title {
font-size: 16px;
font-weight: bold;
margin-bottom: 15px;
}

.description {  
    font-size: 14px;  
    opacity: 0.6;  
    margin-bottom: 15px;  
}  

.detail-link {  
    font-size: 14px;  
    word-break: break-all;  
}  

.link {  
    color: #007AFF;  
    margin-left: 10px;  
}  

.locale-setting {  
    font-size: 16px;  
    font-weight: bold;  
    margin-top: 25px;  
    margin-bottom: 5px;  
    padding-bottom: 5px;  
    border-bottom: 1px solid #f0f0f0;  
}  

.list-item {  
    font-size: 14px;  
    padding: 10px 0;  
}  

.list-item .v {  
    margin-left: 5px;  
}  

.locale-item {  
    display: flex;  
    flex-direction: row;  
    padding: 10px 0;  
}  

.locale-item .text {  
    flex: 1;  
}  

.icon-check {  
    margin-right: 5px;  
    border: 2px solid #007aff;  
    border-left: 0;  
    border-top: 0;  
    height: 12px;  
    width: 6px;  
    transform-origin: center;  
    /* #ifndef APP-NVUE */  
    transition: all 0.3s;  
    /* #endif */  
    transform: rotate(45deg);  
}  

</style>

操作步骤:

先设置语言为非系统语言和非中文,再点击按钮调用api

预期结果:

各大api的页面的语言应该也跟随uni.setLocale所设置的语言

实际结果:

各大api的页面的语言有的是系统语言,有的则是中文

bug描述:

uniapp 多语言鸿蒙端设置语言后uni内置组件依然是中文,如调用uni.scanCode或uni.chooseImage

请用hello-i18n的示例工程
把Index.vue改为下面的代码

2026-03-23 17:01 负责人:无 分享
已邀请:
Ask小助手

Ask小助手 - Ask社区AI助手

需要补充详细的报错信息、HBuilderX版本以及具体的uts插件配置和代码。
欢迎到专业群( uni-app鸿蒙化技术交流群 ) 咨询,群中有相关专业的管理员和群友。

这是一个内容完整、描述清晰的Bug反馈,作为DCloud官方人员,我的评审意见如下:

反馈内容完整性评审

优点:

  • 标题明确:准确概括了问题核心(鸿蒙端多语言设置后内置组件未生效)
  • 描述详细:明确指出了uni.scanCodeuni.chooseImage两个具体API的表现
  • 代码完整:提供的Index.vue代码可直接运行,包含了完整的复现逻辑(语言切换+API调用)
  • 复现步骤清晰:"先设置语言为非系统语言和非中文,再点击按钮调用api" 这一步骤描述明确
  • 环境信息完整:包含了HBuilderX版本(4.87)、平台(HarmonyOS NEXT 6.0.0)、设备(nova 12 Pro)、Vue版本(Vue3)等关键信息
  • 对比明确:预期结果与实际结果对比清晰,便于理解问题表现

建议补充:

  • 可补充说明设置的是哪种语言(如英文/日文等)以及系统默认语言是什么,便于更精准复现

Bug有效性分析

根据知识库检索结果:

  1. 鸿蒙端国际化限制:在对话知识库中发现类似疑问"鸿蒙端支持tabbar多语言吗",表明鸿蒙平台的国际化支持确实存在边界情况。

  2. 平台差异提示:知识库明确指出"鸿蒙平台和App(安卓和ios)通常是分开并立的,通常App相关的内容不能直接用到鸿蒙上",鸿蒙端的多语言适配可能需要单独处理。

  3. 版本建议:当前反馈使用的HBuilderX 4.87版本较旧(最新正式版为5.04,Alpha版为5.03),建议先升级到最新版本验证是否已修复。

初步结论

该Bug反馈有效,内容规范且可复现。知识库中暂未收录关于uni.scanCodeuni.chooseImage在鸿蒙端国际化适配的具体说明,但基于鸿蒙平台的独立性特征,这很可能是鸿蒙原生层面对系统级组件(扫码界面、相册选择器)的语言配置未正确响应uni.setLocale设置导致的。

建议后续操作:

  1. 先升级至HBuilderX 5.04正式版验证问题是否仍然存在
  2. 如问题依旧,建议通过官方渠道提交详细日志,以便确认是鸿蒙原生系统的限制还是uni-app运行时的适配问题

(注:知识库中暂无该问题的直接解决方案或替代方案,需官方进一步验证)

内容为 AI 生成,仅供参考

要回复问题请先登录注册