当前位置:首页 > VUE

vue 实现国际化

2026-01-23 08:23:18VUE

Vue 国际化实现方法

使用 vue-i18n 插件

安装 vue-i18n 依赖:

npm install vue-i18n

在 Vue 项目中创建国际化配置文件(如 src/i18n.js):

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

Vue.use(VueI18n)

const messages = {
  en: {
    greeting: 'Hello!',
    button: {
      submit: 'Submit'
    }
  },
  zh: {
    greeting: '你好!',
    button: {
      submit: '提交'
    }
  }
}

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

export default i18n

在 main.js 中引入并挂载:

import i18n from './i18n'

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

在组件中使用

模板中使用 $t 方法:

<template>
  <div>
    <p>{{ $t('greeting') }}</p>
    <button>{{ $t('button.submit') }}</button>
  </div>
</template>

JavaScript 代码中使用:

this.$t('greeting')

切换语言

通过修改 locale 属性实现语言切换:

this.$i18n.locale = 'zh'

动态加载语言包

对于大型项目,可以按需加载语言包:

async function loadLocaleMessages(locale) {
  const response = await fetch(`./locales/${locale}.json`)
  return response.json()
}

// 切换语言时动态加载
async function setLocale(locale) {
  if (!i18n.availableLocales.includes(locale)) {
    const messages = await loadLocaleMessages(locale)
    i18n.setLocaleMessage(locale, messages)
  }
  i18n.locale = locale
}

处理复数形式

vue-i18n 支持复数处理:

const messages = {
  en: {
    apple: 'apple | apples'
  }
}

// 使用
$tc('apple', 1) // 'apple'
$tc('apple', 5) // 'apples'

日期时间本地化

配置日期时间格式:

const datetimeFormats = {
  en: {
    short: {
      year: 'numeric',
      month: 'short',
      day: 'numeric'
    }
  }
}

const i18n = new VueI18n({
  datetimeFormats
})

// 使用
$d(new Date(), 'short')

数字本地化

配置数字格式:

const numberFormats = {
  en: {
    currency: {
      style: 'currency',
      currency: 'USD'
    }
  }
}

const i18n = new VueI18n({
  numberFormats
})

// 使用
$n(100, 'currency') // '$100.00'

浏览器语言自动检测

可以通过浏览器 API 检测用户首选语言:

const userLocale = navigator.language || navigator.userLanguage
const supportedLocales = ['en', 'zh']
const locale = supportedLocales.includes(userLocale) ? userLocale : 'en'
i18n.locale = locale

路由结合国际化

在路由路径中添加语言前缀:

const router = new VueRouter({
  routes: [
    {
      path: '/:lang',
      component: App,
      children: [
        // 其他路由
      ]
    }
  ]
})

在路由守卫中同步语言状态:

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

vue 实现国际化

标签: vue
分享给朋友:

相关文章

vue登录业务的实现

vue登录业务的实现

实现登录业务的基本流程 在Vue中实现登录业务通常涉及前端界面设计、表单验证、API请求交互、状态管理以及路由控制等环节。以下是核心实现步骤: 登录表单设计与验证 创建包含用户名和密码输入框的登录…

vue实现冰墩墩

vue实现冰墩墩

使用 Vue 实现冰墩墩动画 通过 Vue 的动画特性和 SVG 技术,可以动态渲染冰墩墩的形象。以下是具体实现方法: 准备 SVG 素材 冰墩墩的形象通常由多个 SVG 路径组成,包括身体轮廓、面…

vue实现ai

vue实现ai

Vue 实现 AI 功能 Vue.js 可以通过集成第三方 AI 服务或本地 AI 模型来实现 AI 功能。以下是几种常见的方法: 集成第三方 AI API 使用 Vue 调用如 OpenAI、G…

vue实现跑车

vue实现跑车

Vue 实现跑车动画效果 使用 Vue 结合 CSS 动画可以实现跑车在屏幕上移动的效果。以下是一个完整的实现方案: 创建 Vue 组件结构 <template> <div…

vue架构实现

vue架构实现

Vue 架构实现核心方案 Vue.js 的架构实现通常围绕模块化、组件化和状态管理展开。以下为常见实现方案: 基于单文件组件(SFC)的模块化 通过 .vue 文件组织模板、脚本和样式: <…

vue 实现递归

vue 实现递归

Vue 实现递归组件的方法 在 Vue 中实现递归组件通常用于处理树形结构数据,例如菜单、评论列表或文件目录。以下是实现递归组件的关键步骤: 定义递归组件 递归组件需要设置 name 属性,以便在…