在使用electron-vite构建应用过程中,使用语言国际化插件vue-i18n插件,在 {{$t('login')}}时,$t报红,显示找不到,但是功能正常,有没有解决的办法,不解决的话electron无法打包应用,使用的是vue3+ts
这是代码
import { createI18n } from 'vue-i18n'
// import el_zh_cn from 'element-plus/lib/locale/lang/zh-cn'
// import el_en from 'element-plus/lib/locale/lang/en'
import zh from './lang/zh-cn'
import en from './lang/en'
const messages = {
// 'zh-cn':{
// el:el_zh_cn,
// ...zh
// },
// 'en':{
// el:el_en,
// ...en
// }
en,
zh
}
const language = (navigator.language || 'en').toLocaleLowerCase() // 这是获取浏览器的语言
const i18n = createI18n({
globalInjection: true,
locale: localStorage.getItem('lang') || language.split('-')[0] || 'en', // 首先从缓存里拿,没有的话就用浏览器语言,
fallbackLocale: 'zh-cn',
messages
})
export default i18n
这一main.ts引入代码
import { createApp } from 'vue'
import App from './App.vue'
// 引用(use)路由 main.ts
import router from './router/index'
import { createPinia } from 'pinia'
//全局引入element-plus的css样式,解决element-plu组件样式不生效问题
import 'element-plus/dist/index.css'
import * as ElementPlusIconsVue from '@element-plus/icons-vue'
import i18n from './assets/css/language/index.js'
const app = createApp(App)
app.use(router)
app.use(createPinia())
app.use(i18n)
app.config.globalProperties.$i18n = i18n.global
app.mount('#app')
for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
app.component(key, component)
}
【相关推荐】
我的版本
“vue”: “^3.0.0”,
“vue-i18n”: “^9.0.0”
import { createApp } from “vue”;
import App from “./App.vue”;
import i18n from “./lang”;
const app = createApp(App);
app.use(i18n);
app.mount("#app");
2. ./lang文件夹
src下新建lang文件夹,里面新建三个文件zh/en自由配置,下面我只是给举个例子配置按钮的中英文
en.js
export default {
button: {
edit: “Edit”,
update: “Update”,
add: “Add”,
del: “Delete”,
search: “Search”,
submit: “Submit”,
save: “Save”,
back: “Back”,
cancel: “Cancel”,
upload: “Upload”
}
}
zh.js
export default {
button: {
edit: “编辑”,
update: “更新”,
add: “添加”,
del: “删除”,
search: “查询”,
submit: “提交”,
save: “保存”,
back: “返回”,
cancel: “取消”,
upload: “上传”
}
}
index.js
import { createI18n } from “vue-i18n”; //引入vue-i18n组件
import zh from “./zh”;
import en from “./en”;
//注册i18n实例并引入语言文件
const i18n = createI18n({
locale: localStorage.getItem(“lang”) || “zh”, // 语言标识(缓存里面没有就用中文)
fallbackLocale: “zh”, //没有英文的时候默认中文语言
messages: {
en,
zh
}
});
export default i18n;
vue页面切换语言
写一个按钮 点击触发changeLanguage这个事件 就可以实时切换语言显示了
切换语言的关键代码
ctx.$i18n.locale = locale; //切换当前语言环境
JS中取值
vue2.0我们都知道很简单this.$t(“button.add”) 就能轻而易举取到,但是vue3.0没有this,因此我用的getCurrentInstance()
看官方说明https://www.vue3js.cn/docs/zh/api/composition-api.html#getcurrentinstance
直接在控制台打印出来这个getCurrentInstance(),发现里面有ctx和proxy两个属性功能几乎一样,暂且就先当vue2里面的this用了
ctx.$t(“button.add”) 或者 proxy.$t(“button.add”)
vue官方提供的这个getCurrentInstance()也没细读,在这里当this使用可能被有些大佬取笑了,还在学习,希望能帮到有需要的同学.
看到这里了点个赞吧!!!