多语言切换-国际化插件vue-i18n

在 Vue 项目中使用 i18n(国际化) 是非常常见的需求,尤其是在多语言网站或应用中。Vue 官方推荐使用的国际化插件是 vue-i18n。(点击vur-i18n跳转官网)


🌍 一、什么是 i18n?

i18n 是 "internationalization" 的缩写(首字母 i + 中间18个字母 + 尾字母 n),意思是"国际化"。它指的是让应用程序支持多种语言的能力。


📦 二、安装 vue-i18n 插件

bash 复制代码
npm install vue-i18n

或者使用 yarn:

bash 复制代码
yarn add vue-i18n

🔧 三、基本使用步骤(Vue 3 + Composition API)

1. 创建 i18n 实例

通常我们会将 i18n 配置单独放在一个文件中,比如 src/i18n.jssrc/plugins/i18n.js

js 复制代码
// src/i18n.js
import { createI18n } from 'vue-i18n'

// 定义语言包
const messages = {
  en: {
    greeting: 'Hello, welcome to my app!',
    button: {
      submit: 'Submit'
    }
  },
  zh: {
    greeting: '你好,欢迎使用本应用!',
    button: {
      submit: '提交'
    }
  }
}

export default createI18n({
  legacy: false, // 使用 composition API 模式
  locale: 'zh',  // 默认语言
  fallbackLocale: 'en', // 回退语言
  globalInjection: true, // 全局注入 $t 方法
  messages
})

2. 在 main.js 中注册 i18n 插件

js 复制代码
// main.js
import { createApp } from 'vue'
import App from './App.vue'
import i18n from './i18n' // 引入 i18n 实例

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

3. 在组件中使用翻译内容

✅ 模板中直接使用 $t

vue 复制代码
<template>
  <div>
    <h1>{{ $t('greeting') }}</h1>
    <button>{{ $t('button.submit') }}</button>
  </div>
</template>

✅ 在 script setup / composition API 中使用

vue 复制代码
<script setup>
import { useI18n } from 'vue-i18n'

const { t } = useI18n()

function sayHello() {
  alert(t('greeting'))
}
</script>

<template>
  <button @click="sayHello">Say Hello</button>
</template>

🌐 四、切换语言示例

你可以在组件中动态切换语言:

vue 复制代码
<script setup>
import { useI18n } from 'vue-i18n'

const { locale } = useI18n()

function changeLang(lang) {
  locale.value = lang
}
</script>

<template>
  <button @click="changeLang('zh')">中文</button>
  <button @click="changeLang('en')">English</button>
</template>

📁 五、进阶:按模块拆分语言包

你可以把语言包按模块拆分成多个文件,例如:

复制代码
locales/
├── en.json
└── zh.json

然后在 i18n.js 中导入:

js 复制代码
import en from './locales/en.json'
import zh from './locales/zh.json'

const messages = { en, zh }

export default createI18n({ ... })

🧩 六、配合路由实现自动切换语言(可选)

如果你使用了 vue-router,可以结合 URL 路径来切换语言,比如 /zh/home/en/home,并根据路径设置 locale


🧪 七、完整项目结构示例

css 复制代码
src/
├── i18n.js
├── locales/
│   ├── en.json
│   └── zh.json
├── components/
├── views/
└── main.js

🎯 八、常见问题解答

问题 解决方法
$t is not defined 确保在 i18n.js 中设置了 globalInjection: true
切换语言不生效 确保你在 setup() 中正确使用了 useI18n().locale.value
语言包太大怎么办? 可以按需加载语言包(懒加载)
支持复数、日期、数字格式化吗? vue-i18n 支持 ICU MessageFormat,功能非常强大

✅ 九、总结

步骤 内容
1️⃣ 安装 vue-i18n
2️⃣ 创建 i18n 实例并配置语言包
3️⃣ 注册到 Vue 应用中 .use(i18n)
4️⃣ 在模板中使用 {{ $t('key') }}
5️⃣ 在 JS 中使用 useI18n().t('key')
6️⃣ 动态切换语言 locale.value = 'zh'

相关推荐
倾颜9 小时前
React 19 源码主线拆解 04:Fiber 到底是什么,React 为什么需要 Fiber?
前端·react.js·源码阅读
AI攻城狮9 小时前
国产大模型能力大比拼,社区有话说
前端
IT_陈寒10 小时前
Vite的public文件夹放静态资源?这坑我替你踩了
前端·人工智能·后端
涵涵(互关)10 小时前
GoView各项目文件中的相关语法2
前端·javascript·vue.js
子兮曰10 小时前
别让爬虫白嫖你的导航站了:纯免费,手把手实现加密字体防爬
前端·javascript·后端
小村儿11 小时前
连载06 - Hooks 源码深度解析:Claude Code 的确定性自动化体系
前端·后端·ai编程
心中无石马11 小时前
uniapp引入tailwindcss4.x
前端·css·uni-app
焰火199911 小时前
[Vue]可重置的响应式状态reactive
前端·vue.js
陆枫Larry11 小时前
CSS transform scale:图片放大效果背后的原理
前端
源码宝11 小时前
基于 SpringBoot + Vue 的医院随访系统:技术架构与功能实现
java·vue.js·spring boot·架构·源码·随访系统·随访管理