当前位置:首页 > VUE

vue项目实现不同语言

2026-01-22 21:24:19VUE

国际化(i18n)配置

安装 vue-i18n 库:

npm install vue-i18n

在项目中创建语言文件(如 src/locales/en.jsonsrc/locales/zh.json):

// en.json
{
  "welcome": "Welcome",
  "button": {
    "submit": "Submit"
  }
}

// zh.json
{
  "welcome": "欢迎",
  "button": {
    "submit": "提交"
  }
}

初始化 i18n 实例

src/main.js 中配置:

import { createI18n } from 'vue-i18n'
import en from './locales/en.json'
import zh from './locales/zh.json'

const i18n = createI18n({
  locale: 'en', // 默认语言
  fallbackLocale: 'en', // 回退语言
  messages: { en, zh }
})

const app = createApp(App)
app.use(i18n)
app.mount('#app')

切换语言实现

在组件中添加语言切换逻辑:

import { useI18n } from 'vue-i18n'

export default {
  setup() {
    const { locale } = useI18n()
    const changeLanguage = (lang) => {
      locale.value = lang
    }
    return { changeLanguage }
  }
}

模板中使用:

vue项目实现不同语言

<button @click="changeLanguage('en')">English</button>
<button @click="changeLanguage('zh')">中文</button>
<p>{{ $t('welcome') }}</p>

动态导入语言文件

优化大型项目语言加载:

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

const i18n = createI18n({
  locale: 'en',
  fallbackLocale: 'en',
  messages: {}
})

// 动态加载语言
async function setLocale(lang) {
  const messages = await loadLocaleMessages(lang)
  i18n.global.setLocaleMessage(lang, messages)
  i18n.global.locale = lang
}

路由参数集成

结合 vue-router 实现 URL 语言标识:

const router = createRouter({
  routes,
  parseQuery: (query) => {
    if (query.lang) i18n.global.locale = query.lang
    return query
  }
})

日期时间本地化

配置日期时间格式:

vue项目实现不同语言

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

const i18n = createI18n({
  datetimeFormats,
  // ...其他配置
})

模板中使用:

<p>{{ $d(new Date(), 'short') }}</p>

复数处理

配置复数规则:

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

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

浏览器语言自动检测

添加自动检测逻辑:

const browserLang = navigator.language.split('-')[0]
const supportedLangs = ['en', 'zh']
const defaultLang = supportedLangs.includes(browserLang) ? browserLang : 'en'

const i18n = createI18n({
  locale: defaultLang,
  // ...其他配置
})

持久化存储

使用 localStorage 保存语言选择:

const savedLang = localStorage.getItem('user-lang') || 'en'
const i18n = createI18n({
  locale: savedLang,
  // ...其他配置
})

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

标签: 不同语言
分享给朋友:

相关文章

vue实现不同状态

vue实现不同状态

Vue 实现不同状态的方法 在 Vue 中管理不同状态可以通过多种方式实现,以下是几种常见的方法: 使用 data 属性管理状态 在 Vue 组件中,可以通过 data 属性定义和管理状态。这种方式…

vue怎么实现切换语言

vue怎么实现切换语言

Vue 实现切换语言的方法 在 Vue 项目中实现多语言切换通常需要使用国际化(i18n)库。以下是具体实现步骤: 安装 vue-i18n 库 通过 npm 或 yarn 安装 vue-i18n:…

react如何适配pc不同分辨率

react如何适配pc不同分辨率

响应式布局设计 使用CSS媒体查询(Media Queries)针对不同分辨率范围定义样式。通过@media规则匹配屏幕宽度,调整布局、字体大小等属性。例如: @media (min-width:…