Vue3国际化(vue3+pinia+vue-i18n)

在现代的前端项目中,国际化(i18n)是一个常见的需求,特别是当我们需要支持多语言时。本文将介绍如何在 Vue 3 项目中使用 Pinia 和 Vue I18n 来实现中英文切换的效果,并采用 TypeScript 进行开发。

目录

1. 项目初始化

1.1 vue3项目搭建

1.2 安装插件

2. 插件配置

2.1 Pinia配置

2.2 Vue I18n配置

2.3 插件注册

3. 功能实现

4. 功能展示


1. 项目初始化

1.1 vue3项目搭建

准备一个vue3项目,下面是利用vite搭建的(比较快)

具体操作可以见我其他文章

pnpm create vite
cd objectName
pnpm i
pnpm dev

1.2 安装插件

安装piniavue-i18n插件

Pinia是 Vue 的专属状态管理库,允许你跨组件或页面共享状态

Vue I18n 是 Vue 的国际化插件。它可以轻松地将一些本地化功能集成到你的 Vue应用程序中

pnpm add pinia vue-i18n
​
// 其他包管理器
npm i pinia vue-i18n
yarn add pinia vue-i18n

2. 插件配置

2.1 Pinia配置

创建locale小仓库,用于存放关于语言的变量src/store/localeStore.ts

定义切换语言的方法

// src/store/localeStore.ts
​
import { defineStore } from 'pinia'
import i18n from "../utils/lang";
​
const useLocaleStore = defineStore('locale', {
    state: () => {
        return {
            locale: localStorage.getItem('lang') || 'zhCn',
        }
    },
    actions: {
        SET_LOCALE(locale: any) {
            // console.log(locale)
            this.locale = locale
            localStorage.setItem('lang', locale)
            i18n.global.locale.value = locale
        },
    },
    getters: {},
})
​
export default useLocaleStore

2.2 Vue I18n配置

创建根文件src/utils/lang/index.ts,做基本配置

创建两个文件lang/en.tslang/zh-ch.ts,存放中英文数据并在根文件调用

ps:也可以直接建一个i18n.ts文件全放进去,我这样写是为了提高项目的可维护性以及复用性

PS:两个文件的变量名要一致!不然无法切换!

// src/utils/lang/index.ts
​
import { createI18n} from "vue-i18n";
import zhCn from './zh-ch.ts'
import en from './en.ts'
​
const i18n = createI18n({
  legacy: false,
  globalInjection: true,
  locale: localStorage.getItem('lang') || 'zhCn',
  messages: {
    zhCn,
    en,
  },
})
​
export default i18n
// lang/en.ts
​
export default {
  msg:{
    hello:'你好,世界!'
  }
}
// lang/zh-cn.ts
​
export default {
  msg:{
    hello:'Hello, world!'
  }
}

2.3 插件注册

在主文件中注册插件

// main.ts
​
import {createApp} from 'vue'
import './style.css'
import App from './App.vue'
import {createPinia} from "pinia"
import i18n from "./utils/lang";
​
const pinia = createPinia()
const app = createApp(App)
​
app.use(pinia)
app.use(i18n)
app.mount('#app')

3. 功能实现

{{ $t('msg.hello') }}获取i18n定义的变量数据

点击按钮后判断小仓库语言,进行中英切换

<template>
  <div>
    <button @click="changeLocale">{{localeStore.locale==='zhCn'?'中文 / English':'English / 中文'}}</button>
    <h1>{{ $t('msg.hello') }}</h1>
  </div>
</template>
​
<script lang="ts" setup>
​
import useLocaleStore from "../store/localeStore.ts";
​
const localeStore = useLocaleStore()
​
const changeLocale = () => {
  let temp = localeStore.locale === 'zhCn' ? 'en' : 'zhCn'
  localeStore.SET_LOCALE(temp)
}
defineOptions({name: 'Locale'})
</script>
​
<style scoped></style>

4. 功能展示


蟹蟹你的浏览~~~

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Vite是一个用于快速构建现代化的Web项目的构建工具,它专注于开发阶段的快速热重载,并使用ES模块作为原生的开发模式。Vue3是Vue.js的最新版本,它在性能、开发体验和可维护性上都有所提升。 针对你提到的具体的库和框架: - Vue Router是Vue.js官方的路由管理器,用于实现页面之间的导航和路由控制。你可以通过npm安装vue-router,并在项目中进行配置和使用。 - Pinia是Vue.js的状态管理库,它提供了一种简单而强大的方式来管理应用程序的状态。你可以集成Pinia到你的Vue项目中,以便更好地组织和共享你的应用程序状态。 - Axios是一个基于Promise的HTTP客户端,用于通过网络发送异步请求。你可以使用Axios来处理与服务器的通信,并获取数据来更新你的Vue应用程序。 - Element Plus是一套基于Vue3的组件库,包含了丰富的UI组件,可以帮助你快速搭建漂亮的用户界面。你可以在项目中安装和使用Element Plus来实现各种交互效果和用户界面。 如果你想使用Vite、Vue3和以上提到的库和框架来创建一个项目,你可以按照以下步骤进行: 1. 安装Vite:通过npm全局安装Vite,然后使用Vite命令初始化一个新的项目。 2. 配置Vite:根据你的项目需求,在Vite的配置文件中添加Vue Router、Pinia、Axios和Element Plus的相关配置。 3. 安装和配置Vue Router:通过npm安装Vue Router,并在项目中配置和使用Vue Router来管理应用程序的路由。 4. 集成Pinia:通过npm安装Pinia,并在项目中引入和配置Pinia,以便在应用程序中使用Pinia来管理状态。 5. 使用Axios:通过npm安装Axios,并在项目中引入和配置Axios,以便进行网络请求和数据获取。 6. 引入Element Plus:通过npm安装Element Plus,并在项目中按需引入和使用Element Plus的组件,以搭建漂亮的用户界面。 希望以上信息对你有帮助,祝你在使用Vite、Vue3和这些库和框架时取得成功!<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [vite-vue-ts精简模版集成pinia+svg+router+@src](https://download.csdn.net/download/ldy889/85018930)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [vite+vue3+ts+vue-router+pinia+axios+element-plus](https://blog.csdn.net/zy_080400/article/details/127125359)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白白的西柚珉•᷄ࡇ•᷅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值