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

模板中使用:

<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
  }
})

日期时间本地化

配置日期时间格式:

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 保存语言选择:

vue项目实现不同语言

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之间的跳

Vue 实现组件间跳转的方法 在 Vue 中实现不同组件之间的跳转,可以通过以下几种方式: 使用 Vue Router Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(…

vue实现不同主题色

vue实现不同主题色

Vue 实现不同主题色的方法 在 Vue 中实现不同主题色可以通过多种方式完成,以下是几种常见的方法: 使用 CSS 变量动态切换主题 CSS 变量(自定义属性)是实现主题切换的常用方式。可以在根元…

react如何适配pc不同分辨率

react如何适配pc不同分辨率

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

css语言制作

css语言制作

CSS 基础语法 CSS(层叠样式表)用于描述 HTML 文档的样式。基本语法由选择器和声明块组成: selector { property: value; } selector 选择 HTML…

php实现不同角色登录

php实现不同角色登录

PHP实现不同角色登录的方法 数据库设计 创建用户表时需包含角色字段(如role),常见角色如admin、user、guest。示例表结构: CREATE TABLE users ( id…

如何学习java语言

如何学习java语言

学习 Java 语言的步骤 掌握基础语法 从变量、数据类型、运算符、控制流程(if-else、循环)开始。理解类和对象的基本概念,熟悉方法定义与调用。官方文档或《Java 核心技术》等书籍适合入门。…