vue-i18n使用步骤详解(含完整操作步骤)

开篇

下面是从创建vue项目开始,完整使用i18n实现国际化功能的步骤,希望对您有所帮助。

完整步骤

创建项目

  • 创建项目,并在创建项目的时候选择vuex,router
  • 选择3.x版本
  • 后面随意选即可,下面是完整的代码结构

安装vue-i18n,并封装相关方法

  • 安装vue-i18n
html 复制代码
npm install vue-i18n@next
  • 在src下新建i18n文件夹,并在该文件夹下新建lang文件夹,下面存放数据源(zh.json,en.json)
javascript 复制代码
//zh.json
{
    "msg": {
        "hello": "你好,世界"
    }
}

// en.json
{
    "msg": {
        "hello": "Hello World"
    }
}
  • 在src下创建i18n/index.js
javascript 复制代码
import { createI18n } from "vue-i18n";
import zh from './lang/zh.json'
import en from './lang/en.json'
import store from '@/store'

const messages = {
    zh,
    en
}

// 返回当前lang
function getCurrentLang() {
    return store.getters.lang // 获取当前语言
}

const i18n = createI18n({
    //这里选择false是为了配合使用vue3的composition API风格的新式API,
    //如果是vue2,就要选择true了
    legacy: false, 
    globalInjection: true, // 全局注入
    locale: getCurrentLang(),
    messages
})

export default i18n
  • 在vuex下添加一个模块来管理当前语言(store/index.js)
javascript 复制代码
import { createStore } from 'vuex'

export default createStore({
  state: {
    locale: 'en', // 默认语言
  },
  getters: {
    lang: state => state.locale
  },
  mutations: {
    SET_LOCALE(state, locale) {
      state.locale = locale
    }
  },
  actions: {
    setLocale({commit}, locale) {
      commit('SET_LOCALE', locale)
    }
  },
  modules: {
  }
})
  • 在main.js中注册i18n实例
javascript 复制代码
import { createApp } from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
// 注册i18n
import i18n from './i18n'

createApp(App).use(store).use(router).use(i18n).mount('#app')

封装LangSelect组件,实现一键切换语言

  • 在src/components下新建LangSelect组件,并定义切换语言的方法
javascript 复制代码
<template>
    <div>
        <select v-model="selectedLocale" @change="changeLang">
            <option value="en">English</option>
            <option value="zh">中文</option>
        </select>
    </div>
</template>

<script>
import { computed } from "vue";
import {useStore} from 'vuex';
import {useI18n} from 'vue-i18n'

export default {
    setup() {
        const store = useStore();
        const { locale } = useI18n();

        const selectedLocale = computed({
            get: () => store.state.locale,
            set: (value) => {
                store.dispatch('setLocale', value)
                locale.value = value; // 更改i18n语言
            }
        })

        const changeLang = () => {
            locale.value = selectedLocale.value
        }

        return {
            selectedLocale,
            changeLang
        }
    }
}
</script>
  • 在App.vue中引入并使用LangSelect.vue组件,实现一键切换语言
javascript 复制代码
<template>
  <div id="app">
    <LangSelect/>
    <p>{{ $t('msg.hello') }}</p>
  </div>
</template>

<script>
import LangSelect from './components/LangSelect.vue'

export default {
  components: {
    LangSelect
  }
}
</script>

<style></style>
  • 当前效果如下:

以上便是vue-i18n的详细使用步骤,希望对您有所帮助。实际项目中,可能使用方式比上面复杂很多,比如说封装方法需要在store或者pinia中建立单独的模块,LangSelect组件样式要更复杂,但万变不离其宗,总体的步骤依然是上面这些。

相关推荐
EnoYao7 小时前
我写了一个团队体检报告 Skill,把摸鱼的同事扒出来了😅
前端·javascript
Never_Satisfied8 小时前
在JavaScript / Node.js中,package.json文件中的依赖项自动选择最新版安装
javascript·node.js·json
蓝莓味的口香糖8 小时前
【vue3】组件的批量全局注册
前端·javascript·vue.js
独泪了无痕8 小时前
自动导入 AutoImport:告别手动引入依赖,优化Vue3开发体验
前端·vue.js·typescript
Fighting_p10 小时前
【element UI】el-select 组件下拉数据某一行文字过多时,文字换行展示,避免el-select下拉框被撑宽,导致页面过丑
前端·javascript
未来之窗软件服务10 小时前
幽冥大陆(一百12)js打造json硬件管道——东方仙盟筑基期
开发语言·javascript·算法·json·仙盟创梦ide·东方仙盟·东方仙盟算法
王家视频教程图书馆10 小时前
vue3从本地选择一个视频 展示到视频组件中
前端·javascript·音视频
天外来鹿10 小时前
Map/Set/WeakMap/WeakSet学习笔记
前端·javascript·笔记·学习
紫_龙11 小时前
最新版vue3+TypeScript开发入门到实战教程之vue3与vue2语法优劣对比
前端·javascript·typescript
全栈小512 小时前
【前端】Vue 组件开发中的枚举值验证:从一个Type属性错误说起
前端·javascript·vue.js