【vue 配置国际化语言】

14 篇文章 1 订阅

项目演示

代码

官网 :https://kazupon.github.io/vue-i18n/

//语言
import { createI18n } from 'vue-i18n'		//引入vue-i18n组件
import store from "@/store";
import ZH from './zh'  // 引入中文文件
import EN from './en'   // 引入英文文件
// import { 引入的组件 export 出来的 变量} from 'vue-i18n'
  //注册i8n实例并引入语言文件
 const i18n = createI18n({
    locale: store.getters.locales,		//默认显示的语言 
    legacy: false, // composition AP
    globalInjection: true, //全局生效$
      messages: {
        'zh-cn':ZH,	//引入语言文件
        'en':EN 
      }
  })


  /**
   * @description:  动态加载 语言包
   * @param {*} routers 菜单列表
   * @return {*} 
   */  
  export const mergeLocaleMessages=(routers)=>{
    const tree = treeToArr(routers);
    if(tree.length){
      let cn=tree[0]
      let en=tree[1]
        i18n.global.mergeLocaleMessage("zh-cn",{
          'menu':{
            ...cn
          }
        })
        i18n.global.mergeLocaleMessage("en",{
          "menu":{
            ...en
          }
        })
    }
} 

/**
 * @description:  递归处理菜单
 * @param {*} arr
 * @param {*} cn
 * @param {*} en
 * @return {*}
 */
const treeToArr=(arr,cn={},en={})=>{
  for(let i=0;i<arr.length;i++){
    cn[arr[i].path]=arr[i].cn
    en[arr[i].path]=arr[i].en
    if(arr[i].children && arr[i].children.length){
      treeToArr(arr[i].children,cn,en)    
  }
  }
  return [cn,en]
}
  export default i18n; //将i18n暴露出去,在main.js中引入挂载

zh.js 中文语言包:

// 中文语言包:
export default {
  menu: {
      name: "首页",
    },
    message:{
      Primary:"原色",
      Success:"成功",
      Info:"信息",
      Warning:"警告",
      Danger:"微信",
    },
    language:{
      tips:"项目只做了菜单的国际化处理,其他页面和功能需要你自己来处理",
      SelectLanguage:"选择语言"
    }
  };

en.js 英文语言包:

// 中文语言包:
export default{
  menu: {
    name: "home",
  },
  message:{
    Primary:"Primary",
    Success:"Success",
    Info:"Info",
    Warning:"Warning",
    Danger:"Danger",
  },
  language:{
    tips:"The project only handles the internationalization of menus, and other pages and functions need to be handled by yourself",
    SelectLanguage:"Select language"
  }
}

使用方法


<div class="padding-2x flex space-between ">
     <a-button type="primary">{{$t('message.Primary')}}</a-button>
     <a-button type="success">{{$t('message.Success')}}</a-button>
      <a-button type="info">{{$t('message.Info')}}</a-button>
     <a-button type="warning">{{$t('message.Warning')}}</a-button>
      <a-button type="danger">{{$t('message.Danger')}}</a-button>
</div>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值