https://kazupon.github.io/vue-i18n/zh/introduction.html 官网
<div v-html="treeHtmlStr">
</div>
官方文档 html的插值写法是这样: <li> {{$t(arr[i].title)}}</li> //有效
const treeArr = [ ... ] // tree的数据
const treeHtmlStr =ref('') // 插入 v-html
onmount(()=>{
treeHtmlStr .value = treeShow(treeArr)
})
// Html 中会写了,但是在js中 $t 不识别,怎么解
function treeShow(arr:any){
let str='<ul>'
for (let i=0,e=arr.length;i<e;i++){
str += `<li>$t(${arr[i].title})</li>` //这块怎么写 ,这样写不行 $t成字符串了
str += `<li>${$t(arr[i].title})}</li>` / /这块怎么写 ,这样写也不行 $t 不识别,报错
}
str = str + '</ul>'
return str
}
i18n什么版本的?以下是i18n v9版本示例
<div id="app">
<p>{{ $t("message.hello") }}</p>
</div>
<script src="https://unpkg.com/vue@3"></script>
<script src="https://unpkg.com/vue-i18n@9"></script>
<script>
const messages = {
en: {
message: {
hello: 'hello world'
}
},
ja: {
message: {
hello: 'こんにちは、世界'
}
}
}
const i18n = VueI18n.createI18n({
locale: 'ja',
fallbackLocale: 'en',
messages,
})
let $t;
const App = {
mounted() {
$t = [...i18n.__instances][0][1].t;
alert($t("message.hello") + '\n\n' + $t("message.hello", 'en'))
}
}
const app = Vue.createApp(App)
app.use(i18n);
app.mount('#app');
</script>
str += `<li>{{$t("${arr[i].title}")}}</li>`
或者在js中通过this或vue对象变量调用$t()方法
str += `<li>${this.$t(arr[i].title)}</li>`
1.如果存在this 对象。 str += <li>${this.$t(arr[i].title})}</li>
2.如果没有this 对象。 import { t } from 'i18n' str += <li>${t(arr[i].title})}</li>
$t 是全局的变量 只能作于 html 中。 js 文件中没有$t对象 一般我们会绑定到全局的this 中 或者单独引过来
str += `<li v-html="$t(${arr[i].title})"></li>`
<template>
<div class="nav-bar">
<li> {{$t("arr[0].title")}}</li>
<div v-html="treeHtmlStr"></div>
</div>
</template>
<script>
import { ref, onMounted } from "vue";
import { useI18n } from "vue-i18n";
export default {
name: "NavBar",
setup(props) {
// 局部 使用i18n
const { t, locale } = useI18n();
const treeArr = [1, 2, 3]; // tree的数据
const treeHtmlStr = ref(null); // 插入 v-html
onMounted(() => {
treeHtmlStr.value = treeShow(treeArr, t);
});
// // Html 中会写了,但是在js中 $t 不识别,怎么解
let treeShow = (arr) => {
let str = "<ul>";
for (let i = 0, e = arr.length; i < e; i++) {
// str += `<li>$t(${arr[i].title})</li>` //这块怎么写 ,这样写不行 $t成字符串了
// str += `<li>${$t(arr[i].title})}</li>` //这块怎么写 ,这样写也不行 $t 不识别,报错
str += `<li>${t("arr[" + i + "].title")}</li>`;
}
str = str + "</ul>";
return str;
};
return {
treeHtmlStr,
};
},
};
</script>
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!