当前位置:首页 > 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'

动态加载语言包

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

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 应用,需要在服务器和客户端分别处理:

// 服务端
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"
  }
}

使用时:

vue实现多语言

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

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

相关文章

vue实现皮肤切换

vue实现皮肤切换

实现皮肤切换的基本思路 在Vue中实现皮肤切换功能,通常涉及动态修改CSS变量或类名。核心是通过状态管理当前主题,并在组件中应用对应的样式。 使用CSS变量实现主题切换 CSS变量(自定义属性)是实…

vue全选实现

vue全选实现

Vue 全选实现方法 在 Vue 中实现全选功能通常涉及数据绑定和事件处理。以下是几种常见的实现方式: 基础实现方式 <template> <div> <i…

vue滚动实现

vue滚动实现

Vue 滚动实现方法 使用原生滚动 在 Vue 中可以通过 ref 获取 DOM 元素,调用原生滚动方法实现滚动效果。适用于简单场景。 <template> <div ref=…

vue拼图实现

vue拼图实现

实现 Vue 拼图游戏的方法 使用 Vue 组件和动态数据绑定 创建一个 Vue 组件来管理拼图的状态和逻辑。通过 v-for 动态渲染拼图块,利用 v-bind 绑定样式和位置。拼图块的数据可以存储…

用vue实现全选

用vue实现全选

实现全选功能的基本思路 在Vue中实现全选功能通常涉及以下核心逻辑:通过一个布尔值控制全选状态,遍历子选项并同步其选中状态。以下是具体实现方法。 使用v-model绑定全选状态 在模板中,使用v-m…

vue打包实现推送

vue打包实现推送

Vue 项目打包与自动化部署推送 打包 Vue 项目 使用以下命令生成生产环境代码,默认输出到 dist 目录: npm run build 配置自动化推送(以 GitHub Pages 为例)…