900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > vue项目中英文切换(多语言国际化)-- i18n插件的用法

vue项目中英文切换(多语言国际化)-- i18n插件的用法

时间:2022-08-11 03:14:19

相关推荐

vue项目中英文切换(多语言国际化)-- i18n插件的用法

1.安装

npm install vue-i18n --save

2.在main.js文件中:

import i18n from './i18n/i18n'//我是把i18n单独放一个文件夹,这里是引用new Vue({router,store,i18n,render: h => h(App)}).$mount('#app')

3.在项目中单独建立一个i18n文件夹:

4.i18n文件夹里i18n.js内容:

import Vue from 'vue'import i18n from 'vue-i18n'Vue.use(i18n)import zh from './config/zh.js' //中文import en from './config/en.js'//英文/*---------使用语言包-----------*/const vueI18n = new i18n({locale: 'zh', //语言标识messages: {//使用语言包zh,en},silentFallbackWarn: true //仅在根本没有可用的转换时生成警告,而不是在回退时})export default vueI18n; //导出

5.config目录下zh.js和en.js:

这里面写每个页面需要中英文切换的文字,按照页面分

const zh = {login:{username: '用户名称',password: '密码'},home:{},about:{},my:{}}export default zh;//导出

const en = {login:{username: 'username',password: 'password'},home:{},about:{},my:{}}export default en;//导出

6.在页面组件里使用:

$t(“login.username”)相当于就是一个变量

<div>用户名</div> //原来的写法<div>{{$t("login.username") }}</div>//现在可以中英文切换

data里的数据变量写法: this.$t(“login.username”)

export default {data() {return {a: "",}},watch: {a() {this.a= this.$t("login.username");}} }

7.监听项目现在需要中文还是英文:

在app.vue里设置当前语言,这里我放在初始化阶段

单独写一个方法来返回zh或者en

import {getLanguage } from "@/utils/tool";export default {name: "App",data() {return {};},created() {// 设置语言this.$i18n.locale = getLanguage(); //getLanguage方法返回的是zh或者en},}

8.自己写的getLanguage方法:

这里可以根据自己的需求写

// 切换语言export const getLanguage = () => {let language;let defualtLanguage = 'zh';let reg = /^zh-/i;if (navigator && navigator.language) {language = reg.test(navigator.language) ? defualtLanguage : 'en';} else {language = defualtLanguage;}return language;};

9.遇到需求:根据中英文改样式,有时候英文字母太多,需要修改宽度

那么需要在页面里监听当前的语言,这里我选择把监听的zh或者en放到vuex的getters里

在store文件夹里(vuex)

import Vue from 'vue'import Vuex from 'vuex'import {getLanguage } from "@/utils/tool";//调用监听方法Vue.use(Vuex)const state = {language: getLanguage(),}const getters = {language: state => state.language,//语言切换}const mutations = {}const actions = {}export default new Vuex.Store({state,getters,mutations,actions})

在页面组件里看 this.$store.getters.language 是zh还是en来控制,可以打印看看

computed: {labelWidth() {return this.$store.getters.language === 'zh' ? 'width: 1.2rem' : 'width: 1.7rem'},

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。