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组件样式要更复杂,但万变不离其宗,总体的步骤依然是上面这些。

相关推荐
光影少年16 分钟前
数组去重方法
开发语言·前端·javascript
我命由我1234516 分钟前
浏览器的 JS 模块化支持观察记录
开发语言·前端·javascript·css·html·ecmascript·html5
weixin_443478511 小时前
Flutter第三方常用组件包之路由管理
前端·javascript·flutter
QQ5110082852 小时前
基于区块链的个人医疗咨询挂号信息系统vue
前端·vue.js·区块链
程序员小寒3 小时前
JavaScript设计模式(八):命令模式实现与应用
前端·javascript·设计模式·ecmascript·命令模式
Z_Wonderful5 小时前
在 Next.js 中,使用 [id] 或 public 作为文件夹或文件名是两种完全不同的概念,分别对应 动态路由 和 静态资源托管
javascript·网络·chrome
妖萌妹儿7 小时前
postman怎么做参数化批量测试,测试不同输入组合
开发语言·javascript·postman
阿琳a_7 小时前
在github上部署个人的vitepress文档网站
前端·vue.js·github·网站搭建·cesium
Zk.Sun7 小时前
【RK3588 Mali610 适配 Qt6 】
前端·javascript·vue.js
不想吃菠萝7 小时前
vue3+ts 使用postcss-pxtorem依赖进行rem适配
前端·javascript·vue.js·postcss