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>中会改变
2 个回复
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
在哪里看到的这个用法
可直接使用 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