3***@qq.com
3***@qq.com
  • 发布:2024-07-05 11:36
  • 更新:2024-07-16 17:11
  • 阅读:666

uni-app vue3 公共js使用国际化语言i18n 切换语言不生效

分类:uni-app

h5 在封装好的request.js网络请求文件中使用i18n

引入:


import {  
    createI18n  
} from 'vue-i18n';  
import messages from '@/locale/index';  

let i18nConfig = {  
    locale: uni.getLocale(),  
    messages,  
};  

const i18n = createI18n(i18nConfig);

使用:

uni.showModal({  
    title: i18n.global.$t('pop.tip'),  
    content: i18n.global.t('pop.login'),  
    confirmText: i18n.global.t('pop.confirmText'),  
    cancelText: i18n.global.t('pop.cancelText'),  
    success: (res) => {  
    }

问题:
切换语言 这里不会改变 依然维持上个语言 但是<template>中会改变

2024-07-05 11:36 负责人:无 分享
已邀请:
9***@qq.com

9***@qq.com - 汉库克

我也遇到了这个问题,在vue3内使用

我在js文件内使用的这个

然后有写了一个方法

export const t = (key, arg) => {
return i18n.global.t(key, arg)
}

使用了t。在setup内使用的时候

当我切换语言后,返回上一页,在template内使用$t('xxx')有变化

但是在在setup内使用的t无变化,应该是返回上一页页面没变化,js也没变化么。现在只能是切换语言的时候,刷新一下页面才生效,就是不知道为什么$t有生效,t这个方法不生效,有推荐的写法么。我不想每个地方都在监听一下是否切换语言,如果切换语言,那么就重新对值赋值一下,比如这样
const list = ref([t('选项1'),t('选项2')]
uni.onLocaleChange((e) => {
list.value = [t('选项1'),t('选项2')
})

DCloud_uni-ad_HDX

DCloud_uni-ad_HDX

在哪里看到的这个用法

uni.showModal({    
    title: i18n.global.$t('pop.tip'),    
    content: i18n.global.t('pop.login'),    
    confirmText: i18n.global.t('pop.confirmText'),    
    cancelText: i18n.global.t('pop.cancelText'),    
    success: (res) => {    
}

可直接使用 i18n.$t('pop.tip')

  • 9***@qq.com

    你好,这个i18n来源于哪里呢,我是const i18n = createI18n(i18nConfig); 这里导出的i18n

    但是没有你发的这个 i18n.$t('pop.tip')


    我想封装成一个t

    在js内使用

    export const t = (key, arg) => {

    return i18n.$t(key, arg);

    }


    这样不行,得用

    i18n.global.t(key, arg);


    但是这样会有本帖子说的问题,不会及时更改,我是在vue3内用的,不过这个跟v3关系应该不大,我现在只能用computed来监听变化了

    2024-07-27 23:40

  • DCloud_uni-ad_HDX

    回复 9***@qq.com: 这里有完整的工程 https://uniapp.dcloud.net.cn/tutorial/i18n.html

    2024-07-29 13:01

要回复问题请先登录注册