码迷,mamicode.com
首页 > 其他好文 > 详细

vue 国际化配置

时间:2021-04-23 11:59:54      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:relative   overflow   idt   poi   class   rom   display   spl   warning   

第一步:

  创建lang文件夹

技术图片

 

 

 index.js

技术图片
import Vue from ‘vue‘
import VueI18n from ‘vue-i18n‘
import Cookies from ‘js-cookie‘
import elementEnLocale from ‘element-ui/lib/locale/lang/en‘ // element-ui lang
import elementZhLocale from ‘element-ui/lib/locale/lang/zh-CN‘// element-ui lang
import enLocale from ‘./en‘
import zhLocale from ‘./zh‘

Vue.use(VueI18n)

const messages = {
  en: {
    ...enLocale,
    ...elementEnLocale
  },
  zh: {
    ...zhLocale,
    ...elementZhLocale
  },
}
export function getLanguage() {
  const chooseLanguage = Cookies.get(‘language‘)
  if (chooseLanguage) return chooseLanguage

  // if has not choose language
  const language = (navigator.language || navigator.browserLanguage).toLowerCase()
  const locales = Object.keys(messages)
  for (const locale of locales) {
    if (language.indexOf(locale) > -1) {
      return locale
    }
  }
  return ‘zn‘
}
const i18n = new VueI18n({
  // set locale
  // options: en | zh | es
  locale: getLanguage(),
  // set locale messages
  messages
})

export default i18n
View Code

zn.js

export default {
  header:{
    hederTitle:‘个人中心‘
  }
}

en.js

技术图片
export default {
  header:{
    hederTitle:‘centerPeople‘
  }
}
View Code

第二步:在main.js引入

import Cookies from ‘js-cookie‘
import ElementUI from ‘element-ui‘;
import ‘element-ui/lib/theme-chalk/index.css‘;
Vue.use(ElementUI);

// 引入国际化
// import VueI18n from ‘vue-i18n‘
import i18n from ‘./common/lang‘ // internationalization

Vue.use(ElementUI, {
  size: Cookies.get(‘size‘) || ‘medium‘, // set element-ui default size
  i18n: (key, value) => i18n.t(key, value)
})

Vue.config.productionTip = false

new Vue({
  i18n,  // 最后
  router,
  store,
  render: h => h(App)
}).$mount(‘#app‘)

第三步:定义转化方法(在utils文件下创建i18n.js)

技术图片
// translate router.meta.title, be used in breadcrumb sidebar tagsview
export function generateTitle(objName,title) {
  const hasKey = this.$te(objName+‘.‘ + title)
  if (hasKey) {
    // $t :this method from vue-i18n, inject in @/lang/index.js
    const translatedTitle = this.$t(objName+‘.‘ + title)

    return translatedTitle
  }
  return title
}
View Code

第四步:在页面引入

技术图片
<template>
  <div class="header_warp">
    <div class="header_l">{{ generateTitle(‘header‘,‘hederTitle‘) }}</div>
    <div class="header_r">
      <!-- <img class="userImg" src="../assets/mao.jpg" > -->
      <span>{{username}}</span>
      
      <span class="out" @click=‘loginOut‘><img src="../assets/icon/loginout.png">退出</span>
      <span class="top_btn" @click="changeLangEvent">{{$i18n.locale ==‘zh‘?‘中文‘:‘英文‘}}</span>
    </div>
  </div>
</template>

<script>
import { generateTitle } from ‘@/utils/i18n‘
import { loginOut } from "@/api/login";
import { setCookie,delCookie } from "@/utils/cookieUtils";
export default {
  name: ‘HeaderWarp‘,
  data(){
      return{
        hederTitle:"个人中心"
      }
  },
   computed: {
        username () {
        return ‘你好,‘+this.$store.state.username
        }
    },
  methods:{
    generateTitle,
    loginOut:function() {
        loginOut().then(()=>{
        
        // if(process.env.NODE_ENV === "development" ){
        //   delCookie(‘dj_mplan_cce_login‘); 
        // }
          delCookie(‘dj_mplan_cce_login‘); 
          this.$store.commit(‘usernameCommit‘,‘‘);
          this.$router.push(‘/login‘)
        })
    },
    changeLangEvent() {
      console.log(‘changeLangEvent‘);
      this.$confirm(‘确定切换语言吗?‘, ‘提示‘, {
        confirmButtonText: ‘确定‘,
        cancelButtonText: ‘取消‘,
        type: ‘warning‘
      }).then(() => {
        if ( this.$i18n.locale === ‘zh‘ ) {
          this.$i18n.locale = ‘en‘;//关键语句
          // console.log(‘en‘)
        }else {
          this.$i18n.locale = ‘zh‘;//关键语句
          // console.log(‘zh‘)
        }
      }).catch(() => {
        // console.log(‘catch‘);
        this.$message({
          type: ‘info‘,
        });
      });
    }
  }
}
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
.top_btn{display: inline-block;padding: 0px 20px;}
/* background: url(../assets/icon/loginout.png) left center no-repeat;padding-left: 20px; */
.out{display: inline-vlock;margin-left: 14px;}
.out img{ width: 16px;position: relative;top:3px;}
.header_warp{display: flex;align-items: center;height: 60px;line-height: 60px;color: #333333;background-color: #ffffff;padding: 0px 20px;box-shadow:10px 10px 3px -9px #adadad ;}
.header_l{flex: 4;text-align: left;font-size: 22px;font-weight: 600;}
.header_r{flex: 1;text-align: right;font-size: 14px;cursor: pointer;}
.userImg{width: 30px;height: 30px;border-radius: 15px;overflow: hidden;vertical-align: middle;margin-right: 10px;}
</style>
View Code

 

vue 国际化配置

标签:relative   overflow   idt   poi   class   rom   display   spl   warning   

原文地址:https://www.cnblogs.com/lst619247/p/14689503.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!