vue3 setup使用i18n插件(多语言)

3 篇文章 0 订阅

一、安装

 npm install vue-i18n@next

OR

yarn add vue-i18n@next

PS:我的版本是 9.1.6

二、使用

1.在src目录新建 language文件夹 (如下图)

image.png

PS:此处我用的 TS 如果没有安装 TS 的可以使用 JS

2.在 language 文件夹下新建 index.ts en-US.ts zh-CN.ts 三个文件
//en-US.ts
export default  {
  // 名称
  'name': 'peng-xiao-hei' 
}
//zh-CN.ts
export default  {
  // 名称
  'name': '彭小黑' 
}

PS:此处使用了 VITE 的 import.meta.globEager。非 VITE 的 可以使用 require.context

//index.ts
import { createI18n } from 'vue-i18n'		//引入vue-i18n组件
//引入同级目录下文件
const modules = import.meta.globEager('./*')

//假设你还有其他目录下的语言文件 它的路径是 src/views/home/locales/en-US.ts
//那么你就可以 使用 :lower:(小写) :upper:(大写) 来引入文件
const viewModules = import.meta.globEager('../views/**/locales/[[:lower:]][[:lower:]]-[[:upper:]][[:upper:]].ts')

function getLangAll(): any{
  let message:any = {}
  getLangFiles(modules,message)
  getLangFiles(viewModules,message)
  return message
}
/**
 * 获取所有语言文件
 * @param {Object} mList
 */
function getLangFiles(mList:any,msg:any){
  for(let path in mList){if(mList[path].default){
      //  获取文件名
      let pathName = let pathName = path.substr(path.lastIndexOf('/') + 1,5)
      
      if(msg[pathName]){
        msg[pathName] = {
          ...mList[pathName],
          ...mList[path].default
        }
      }else{
        msg[pathName] = mList[path].default
      }
      
    }
  }
}

  //注册i8n实例并引入语言文件
 const i18n = createI18n({
    legacy: false,
    locale: 'zh-CN',
    messages: getLangAll()
  })
  
  export default i18n; //将i18n暴露出去,在main.js中引入挂载
3.main 注册
//main.ts
import VueI18n from './language'

let app = createApp(App);
app.use(VueI18n)
4. 页面使用
//home.vue
<template>
    <div>{{t('name')}}</div>
</template>

<script>
import { useI18n } from "vue-i18n";

export default defineComponent({
    setup() {
        const { t } = useI18n();
        return{
            t
        }
   }
})
</script>

源码地址:https://github.com/Peng-Xiao-Shuai-0902/vite-vue-admin

效果预览:https://peng-xiao-shuai-0902.github.io/vite-vue-admin/

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值