多语言切换-国际化插件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'

相关推荐
一条上岸小咸鱼33 分钟前
Kotlin 基本数据类型(一):Numbers
android·前端·kotlin
前端小巷子1 小时前
Vue 事件绑定机制
前端·vue.js·面试
uhakadotcom1 小时前
开源:subdomainpy快速高效的 Python 子域名检测工具
前端·后端·面试
爱加班的猫1 小时前
Node.js 中 require 函数的原理深度解析
前端·node.js
用户8165111263971 小时前
WWDC 2025 Build a SwiftUI app with the new design
前端
伍哥的传说1 小时前
Vue 3.5重磅更新:响应式Props解构,让组件开发更简洁高效
前端·javascript·vue.js·defineprops·vue 3.5·响应式props解构·vue.js新特性
阅文作家助手开发团队_山神1 小时前
第一章: Mac Flutter Engine开发准备工作
前端·flutter
菜牙买菜1 小时前
Hicharts入门
前端·vue.js·数据可视化
摸着石头过河的石头1 小时前
手把手教你入门 MCP:模型上下文协议与 Trae IDE 中的实践
前端·mcp