当前位置:首页 > VUE

vue国际化实现

2026-01-22 03:08:48VUE

Vue 国际化实现方法

使用 vue-i18n 插件

安装 vue-i18n 插件:

npm install vue-i18n

在 Vue 项目中配置:

import Vue from 'vue'
import VueI18n from 'vue-i18n'

Vue.use(VueI18n)

const messages = {
  en: {
    message: {
      hello: 'Hello world'
    }
  },
  zh: {
    message: {
      hello: '你好世界'
    }
  }
}

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

new Vue({
  i18n
}).$mount('#app')

在模板中使用:

<p>{{ $t('message.hello') }}</p>

动态切换语言

通过方法切换当前语言:

this.$i18n.locale = 'zh'

懒加载语言包

按需加载语言文件:

vue国际化实现

// 异步加载语言包
async function loadLanguageAsync(lang) {
  const messages = await import(`@/lang/${lang}.json`)
  i18n.setLocaleMessage(lang, messages.default)
  i18n.locale = lang
}

格式化处理

处理复数、日期等复杂格式化:

const messages = {
  en: {
    car: 'car | cars',
    date: '{date, date}'
  }
}

组件内使用

在组件选项中定义本地化内容:

export default {
  i18n: {
    messages: {
      en: { button: 'Submit' },
      zh: { button: '提交' }
    }
  }
}

路由国际化

结合 vue-router 实现路由本地化:

vue国际化实现

const routes = [
  {
    path: '/home',
    component: Home,
    meta: {
      title: 'route.home'
    }
  }
]

router.beforeEach((to, from, next) => {
  document.title = i18n.t(to.meta.title)
  next()
})

浏览器语言检测

自动检测用户浏览器语言:

const navigatorLang = navigator.language.split('-')[0]
i18n.locale = ['en', 'zh'].includes(navigatorLang) ? navigatorLang : 'en'

持久化存储

使用 localStorage 保存语言偏好:

const savedLang = localStorage.getItem('lang')
i18n.locale = savedLang || 'en'

// 切换语言时保存
function setLanguage(lang) {
  i18n.locale = lang
  localStorage.setItem('lang', lang)
}

单元测试

测试国际化组件:

import { mount } from '@vue/test-utils'
import Component from './Component.vue'

const wrapper = mount(Component, {
  mocks: {
    $t: (key) => key
  }
})

服务端渲染

在 Nuxt.js 中使用国际化:

// nuxt.config.js
export default {
  modules: [
    'nuxt-i18n'
  ],
  i18n: {
    locales: ['en', 'zh'],
    defaultLocale: 'en',
    vueI18n: {
      fallbackLocale: 'en'
    }
  }
}

标签: vue
分享给朋友:

相关文章

vue实现菜单

vue实现菜单

Vue 实现菜单的方法 在 Vue 中实现菜单功能可以通过多种方式完成,以下是几种常见的方法: 使用 v-for 动态生成菜单项 通过数据驱动的方式,利用 v-for 指令动态渲染菜单项。定义一个…

vue为啥能实现监听

vue为啥能实现监听

Vue 实现监听的原理 Vue 的监听能力主要基于其响应式系统,该系统通过数据劫持和依赖收集实现。当数据变化时,系统能自动触发视图更新或执行回调函数。 核心机制:Object.definePrope…

vue中如何实现循环

vue中如何实现循环

在 Vue 中实现循环 Vue 提供了 v-for 指令用于实现循环渲染列表数据。v-for 可以遍历数组、对象或数字范围,生成动态的 DOM 元素。 遍历数组 使用 v-for 遍历数组时,语法…

vue实现弹窗

vue实现弹窗

Vue 实现弹窗的常见方法 使用组件化方式封装弹窗 创建一个独立的弹窗组件(如 Modal.vue),通过 v-if 或 v-show 控制显示隐藏: <template> <…

vue 实现复选

vue 实现复选

Vue 实现复选功能 在 Vue 中实现复选功能可以通过多种方式完成,以下是常见的几种方法: 使用 v-model 绑定数组 通过 v-model 绑定一个数组,可以自动收集用户选择的复选框值。…

vue 实现菜单

vue 实现菜单

Vue 实现菜单的方法 使用 Vue 实现菜单可以通过多种方式,以下是几种常见的方法: 使用 Vue Router 实现动态路由菜单 通过 Vue Router 可以动态生成菜单,根据路由配置自动渲…