Vue3 vue-i18n 切换语言无法响应式变化,如何解决?
Vue3 vue-I18u 切换语言无法响应式变化
版本👇"vue": "^3.3.4","vue-i18n": "9",
import { createI18n, useI18n } from 'vue-i18n'
import { useOutsideSystemStore } from '@/stores/modules/system.js'
import zhCN from './json/zh.json'
import enUS from './json/en.json'
const useSystem = useOutsideSystemStore()
const i18n = createI18n({
legacy: false,
locale: useSystem.language,
globalInjection: true,
messages: {
zh: zhCN,
en: enUS
}
})
const locale = toRef(i18n.global.locale)
export { useI18n, locale }
export default i18n
当切换时修改 全局locale 只响应式变化html中的{{$t('')}} script中的$t() 不会变化
希望只要使用到$t的地方都能变化
回复
1个回答
test
2024-06-27
OP你是怎么切换i18n当前语言的,有按照文档中的方式来切换吗? 👉 #Locale Changing - Composition API | Vue I18n
<script setup>
const { t, locale } = useI18n({ useScope: 'global' })
locale.value = 'en' // change!
</script>
按照OP你的评论,猜测OP你可能是在声明的时候,直接把 t
函数 返回的文本值直接赋值给JS变量了。
以下是一个Demo片段,OP你理解一下其中的区别:
<template>
<div>
<p>text:{{ $t("message.hello") }}</p>
<p>testRef: {{ textRef }}</p>
<p>textComp: {{ textComp }}</p>
<button @click="changeLocale">Change</button>
</div>
</template>
<script setup>
import { ref, computed } from "vue";
import { useI18n } from 'vue-i18n'
const { t, locale } = useI18n({ useScope: "global" });
const textRef = ref(t('message.hello'))
const textComp = computed(() => t('message.hello'));
const changeLocale = () => {
locale.value = (locale.value === "en") ? "ja" : "en";
console.log('changeLocale textRef.value =>', textRef.value)
text.value = t('message.hello')
console.log('changeLocale textRef.value(赋值后)', textRef.value)
};
</script>
回复
适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容