【jeecgboot】jeecgboot国际化功能:


一、效果:

在这里插入图片描述
在这里插入图片描述

二、配置:

【官方文档】http://doc.jeecg.com/2043980(文档复制到项目会报错…)
由于jeecg已经安装了i18n就不用安装了,npm install vue-i18n

【1】main.js

在这里插入图片描述

// i18n国际化
import VueI18n from 'vue-i18n'
Vue.use(VueI18n)
import enLocale from '@/components/lang/en-US'
import zhLocale from '@/components/lang/zh-CN'

// 注册i18n实例并引入语言文件,文件格式等下解析
const i18n = new VueI18n({
    
    
  locale: localStorage.getItem("language") || 'zh-CN',//官网:Vue.ls.get("language", "zh-CN")),这里会报错
  fallbackLocale: 'zh-CN',//没有英文的时候默认中文语言
  silentFallbackWarn: true,//抑制警告
  messages: {
    
    
    'en-US': {
    
     ...enLocale },//官网:'zh-CN': require('@/components/lang/zh-CN.js'),这里引入失败
    'zh-CN': {
    
     ...zhLocale }
  }
})

function main() {
    
    
  new Vue({
    
    
    router,
    store,
    i18n,//别忘记了这里
    mounted() {
    
    
      store.commit('SET_SIDEBAR_TYPE', Vue.ls.get(SIDEBAR_TYPE, true))
      store.commit('TOGGLE_THEME', Vue.ls.get(DEFAULT_THEME, config.navTheme))
      store.commit('TOGGLE_LAYOUT_MODE', Vue.ls.get(DEFAULT_LAYOUT_MODE, config.layout))
      store.commit('TOGGLE_FIXED_HEADER', Vue.ls.get(DEFAULT_FIXED_HEADER, config.fixedHeader))
      store.commit('TOGGLE_FIXED_SIDERBAR', Vue.ls.get(DEFAULT_FIXED_SIDEMENU, config.fixSiderbar))
      store.commit('TOGGLE_CONTENT_WIDTH', Vue.ls.get(DEFAULT_CONTENT_WIDTH_TYPE, config.contentWidth))
      store.commit('TOGGLE_FIXED_HEADER_HIDDEN', Vue.ls.get(DEFAULT_FIXED_HEADER_HIDDEN, config.autoHideHeader))
      store.commit('TOGGLE_WEAK', Vue.ls.get(DEFAULT_COLOR_WEAK, config.colorWeak))
      store.commit('TOGGLE_COLOR', Vue.ls.get(DEFAULT_COLOR, config.primaryColor))
      store.commit('SET_TOKEN', Vue.ls.get(ACCESS_TOKEN))
      store.commit('SET_MULTI_PAGE', Vue.ls.get(DEFAULT_MULTI_PAGE, config.multipage))
    },
    render: h => h(App)
  }).$mount('#app')
}
【2】App.vue

在这里插入图片描述

<template>
  <a-config-provider :locale="locale">
    <div id="app">
      <router-view />
    </div>
  </a-config-provider>
</template>
<script>
import zhCN from 'ant-design-vue/lib/locale-provider/zh_CN'
import enUS from 'ant-design-vue/lib/locale-provider/en_US'
import enquireScreen from '@/utils/device'
import {
    
     mapState } from 'vuex';

export default {
    
    
  data() {
    
    
    return {
    
    
      locale: zhCN,
    }
  },
  computed: {
    
    
    ...mapState(['language']),
  },
  watch: {
    
    
    language: {
    
    
      handler(value) {
    
    
        if (value != null) {
    
    
          //获取本地缓存中的语言配置,并切换
          if (!value || value == 'zh-CN') {
    
    
            this.locale = zhCN
          } else if (value == 'en-US') {
    
    
            this.locale = enUS
          }
          this.$i18n.locale = value;//关键语句    
        }
      },
      immediate: true,
    }
  },
  created() {
    
    
    let that = this
    enquireScreen(deviceType => {
    
    
      // tablet
      if (deviceType === 0) {
    
    
        that.$store.commit('TOGGLE_DEVICE', 'mobile')
        that.$store.dispatch('setSidebar', false)
      }
      // mobile
      else if (deviceType === 1) {
    
    
        that.$store.commit('TOGGLE_DEVICE', 'mobile')
        that.$store.dispatch('setSidebar', false)
      }
      else {
    
    
        that.$store.commit('TOGGLE_DEVICE', 'desktop')
        that.$store.dispatch('setSidebar', true)
      }
    })
  }
}
</script>
【3】zh-CN.js和en-US.js文件

在这里插入图片描述
在这里插入图片描述

【4】Login.vue设置切换功能

在这里插入图片描述

<!-- 中英文切换 -->
<a-radio-group v-model="language" @change="handleSetLanguage">
   <a-radio :value="'zh-CN'">{
    
    {
    
     $t("login.Chinese") }}</a-radio>
   <a-radio :value="'en-US'">{
    
    {
    
     $t("login.English") }}</a-radio>
</a-radio-group>

在这里插入图片描述

【5】设置store

在这里插入图片描述

const language = 'language' //国际化

export default new Vuex.Store({
    
    
  state: {
    
    
    language: getStore(language),//国际化
  },
  mutations: {
    
    
    setLanguage(state, data) {
    
    
      state.language = data
      setStore(language, state.language)
    },
  },
  actions: {
    
    

  },
  getters
})

三、使用:

<a-button>{
    
    {
    
     $t('common.submit') }}</a-button>


<a-input v-model="model.username" size="large" :placeholder="$t('login.pleaseEnterYourAccountName')" />


<a-form-item :label="$t('layout.deptName')">
    <a-select v-model="formData.deptId" :placeholder="$t('common.pleaseSelect') + $t('layout.deptName')"></a-select>
</a-form-item>


 username: [
    {
    
     required: true, message: this.$t('login.pleaseEnterYourAccountName') },
    {
    
     validator: this.handleUsernameOrEmail }
],

猜你喜欢

转载自blog.csdn.net/weixin_53791978/article/details/129872726