当前位置:首页 > VUE

vue实现多语言

2026-02-23 16:52:44VUE

Vue 实现多语言方案

使用 vue-i18n 插件

安装 vue-i18n 依赖:

npm install vue-i18n

在项目中创建语言资源文件,例如:

// src/locales/en.json
{
  "welcome": "Welcome",
  "home": "Home"
}

// src/locales/zh.json
{
  "welcome": "欢迎",
  "home": "首页"
}

初始化 vue-i18n:

import Vue from 'vue'
import VueI18n from 'vue-i18n'
import en from './locales/en.json'
import zh from './locales/zh.json'

Vue.use(VueI18n)

const i18n = new VueI18n({
  locale: 'en', // 默认语言
  messages: {
    en,
    zh
  }
})

new Vue({
  i18n,
  render: h => h(App)
}).$mount('#app')

在组件中使用:

<template>
  <div>{{ $t('welcome') }}</div>
</template>

切换语言:

this.$i18n.locale = 'zh'

动态加载语言包

对于大型应用,可以按需加载语言包:

vue实现多语言

async function loadLocaleMessages(locale) {
  const messages = await import(`./locales/${locale}.json`)
  i18n.setLocaleMessage(locale, messages.default)
  return nextTick()
}

路由与语言切换结合

在路由守卫中处理语言切换:

router.beforeEach((to, from, next) => {
  const lang = to.params.lang
  if (lang && i18n.availableLocales.includes(lang)) {
    i18n.locale = lang
  }
  next()
})

日期和数字本地化

vue-i18n 也支持日期和数字格式化:

$d(new Date(), 'short')
$n(1000, 'currency')

自定义翻译缺失处理

可以设置缺失翻译的回调:

const i18n = new VueI18n({
  missing: (locale, key) => {
    console.warn(`Missing translation: ${key} for locale ${locale}`)
    return key
  }
})

服务端渲染支持

对于 SSR 应用,需要在服务器和客户端分别处理:

vue实现多语言

// 服务端
export default ({ app }) => {
  app.i18n = new VueI18n({ ... })
}

// 客户端
if (process.client) {
  const lang = navigator.language.split('-')[0]
  i18n.locale = lang
}

浏览器语言自动检测

可以通过 navigator 对象获取用户首选语言:

const userLang = navigator.language || navigator.userLanguage
const shortLang = userLang.split('-')[0]
if (i18n.availableLocales.includes(shortLang)) {
  i18n.locale = shortLang
}

持久化语言选择

使用 localStorage 保存用户选择:

// 读取
const savedLang = localStorage.getItem('user-lang') || 'en'
i18n.locale = savedLang

// 保存
localStorage.setItem('user-lang', newLang)

命名空间支持

对于大型项目,可以使用命名空间组织翻译:

{
  "user": {
    "profile": "Profile",
    "settings": "Settings"
  }
}

使用时:

{{ $t('user.profile') }}

标签: 多语言vue
分享给朋友:

相关文章

tabbar 实现 vue

tabbar 实现 vue

在 Vue 中实现 TabBar 功能可以通过多种方式完成,以下是几种常见的方法: 使用 Vue Router 结合自定义组件 创建一个自定义的 TabBar 组件,结合 Vue Router 实现…

vue实现选择

vue实现选择

Vue 实现选择功能的方法 在 Vue 中实现选择功能可以通过多种方式完成,以下介绍几种常见的实现方法。 使用 v-model 绑定单选 通过 v-model 可以轻松实现单选功能。以下是一个简单的…

vue实现datalist

vue实现datalist

使用 Vue 实现 HTML5 的 datalist 功能 HTML5 的 <datalist> 元素提供了一种自动完成输入框的功能,允许用户在输入时从预定义的选项列表中选择。以下是几种在…

vue ref实现

vue ref实现

Vue 中 ref 的实现 在 Vue 中,ref 是一个用于创建响应式引用的 API,适用于基本类型和对象。以下是 ref 的核心实现原理和使用方法。 基本实现原理 ref 通过 Reactive…

vue实现导入

vue实现导入

Vue 实现文件导入功能 使用 <input type="file"> 元素 在 Vue 模板中添加一个文件输入元素,绑定 change 事件处理函数。 <template>…

vue实现popper

vue实现popper

Vue 实现 Popper 的方法 使用 Tippy.js 库 Tippy.js 是一个轻量级的 Popper.js 封装库,提供丰富的工具提示功能。安装 Tippy.js 及其 Vue 封装: n…