当前位置:   article > 正文

vue + element ui实现多语言切换_中英文切换样式图标 elementui

中英文切换样式图标 elementui

vue + element ui实现多语言切换

首先我们创建一个lang的文件 ,里面创建三个文件index.js(引入使用i18n模块), en.js(英文包), zh.js(中文包)… 其他语言的包

index.js 文件:

import Vue from 'vue' // 引入vue
import VueI18n from 'vue-i18n' // 引入i18n模块
import Cookies from 'js-cookie' // 封装了获取,设置,删除cookie的方法
import elementEnLocale from 'element-ui/lib/locale/lang/en' // element-ui英文包
import elementZhLocale from 'element-ui/lib/locale/lang/zh-CN'// element-ui中文包
import locale from 'element-ui/lib/locale' // 引入elementuiui语言包模块
import enLocale from './en' // 本地英文包
import zhLocale from './zh' // 本地中文包
 
Vue.use(VueI18n) // vue使用i18n模块
// 引入本地
const messages = {
  en: {
    ...enLocale, // es6的拓展运算符,相当于解析出每个对象
    ...elementEnLocale
  },
  zh: {
    ...zhLocale,
    ...elementZhLocale
  }
}
// 创建国际化实例
const i18n = new VueI18n({
  locale: Cookies.get('language') || 'zh', // set locale,默认中文
  messages // set locale messages。语言包
})
locale.i18n((key, value) => i18n.t(key, value))
export default i18n
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

en.js文件:


export default {
message:{
 title: 'hello',
 theme: 'Theme'
},
skin: {
    Blue: 'Blue',
    Green: 'Green'
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

zh.js文件

export default {
message:{
 title: '你好',
 theme: '主题'
},
skin: {
    Blue: '蓝色',
    Green: '绿色'
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

之后main.js中使用编写的i18n模块的index.js文件

import i18n from './lang'
new Vue({
  el: '#app',
  router,
  store,
  i18n,
  render: h => h(App)
})
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

切换语言模块

<template>
  <el-dropdown trigger="click" class='international' @command="handleSetLanguage">
      <!--<el-tooltip class="item" effect="dark" content="select language" placement="left-start">-->
      	<!--不能包裹el-tooltip,会报错-->
      	<div>
        <!-- 语言选择图标 -->
        <nx-svg-icon class-name='international-icon' icon-class="language" />
        </div>
      <!--</el-tooltip>-->
    <el-dropdown-menu slot="dropdown">
      <el-dropdown-item command="zh" :disabled="language==='zh'">中文</el-dropdown-item>
      <el-dropdown-item command="en" :disabled="language==='en'">English</el-dropdown-item>
    </el-dropdown-menu>
  </el-dropdown>
</template>
 
<script>
import nxSvgIcon from '@/components/nx-svg-icon/index'
export default {
  name: 'nx-lang-select',
  components: { nxSvgIcon },
  computed: {
    language() {
      return this.$store.getters.language
    }
  },
  methods: {
    handleSetLanguage(lang) {
      // 选择语言
      this.$i18n.locale = lang
      // 保存vuex
      this.$store.dispatch('setLanguage', lang)
      this.$message({
        message: 'switch language success',
        type: 'success'
      })
      // 触发重新加载事件
      this.$emit('handerevent')
    }
  }
}
</script>
 
<style scoped>
.international-icon {
  font-size: 22px;
  cursor: pointer;
  vertical-align: -5px!important;
  color:#fff;
}
.el-dropdown{
  color:#5a5e66;
}
</style>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54

使用

//作为文本内容,绑定在标签中
<div class="manage_tip">
    <span class="title">{{$t('message.title')}}</span>
 </div>
  • 1
  • 2
  • 3
  • 4
//作为属性绑定
  <el-form-item :label="$t('message.uname')" prop="pnone">
        <el-input v-model="loginUser.pnone" placeholder="请输入手机或邮箱"></el-input>
 </el-form-item>
  • 1
  • 2
  • 3
  • 4
//作为elementui 中的校验规则,要放在computed中
 computed: {
    rules() {
      return {
        password: [
          {
            required: true,
            message: this.$t("message.password"),
            trigger: "blur"
          },
          {
            pattern: /^(?=.*\d)(?=.*[a-zA-Z])(?=.*[\W_]).{6,16}$/,
            message: "输入6-16位包含数字、字母、特殊字符的密码",
            trigger: "blur"
          }
        ],
      };
    }
  },
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
// 用于elemenui表单自定义检验中
<template>
 <div></div>
</template>
 <script>
  export default{
    data() {
      // 用户名自定义验证规则
    const validateUsername = (rule, value, callback) => {
      // 国际化处理
      if (value === '') {
        callback(new Error(this.$t('login.user.userPlaceholder')))
      } else {
        console.log('user', value)
        callback()
      }
    return {   }
    }
}
</script>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/332217
推荐阅读