当前位置: 首页 > news >正文

重生之我在学Vue--第14天 Vue 3 国际化(i18n)实战指南

重生之我在学Vue–第14天 Vue 3 国际化(i18n)实战指南

文章目录

  • 重生之我在学Vue--第14天 Vue 3 国际化(i18n)实战指南
    • 前言
    • 一、Vue I18n 核心配置
      • 1.1 基础环境搭建
      • 1.2 初始化配置
      • 1.3 全局挂载
    • 二、多语言实现方案
      • 2.1 基础使用
      • 2.2 动态切换语言
      • 2.3 高级功能实现
        • 复数处理
        • 日期/货币本地化
    • 三、工程化实践
      • 3.1 语言包模块化
      • 3.2 异步加载语言包
      • 3.3 与Pinia整合
    • 四、最佳实践
      • 4.1 翻译规范
      • 4.2 与UI框架整合
      • 4.3 检测未翻译项

前言

“真正的国际化不是简单的文字翻译,而是文化适配的艺术。” —— 全球化开发准则

经过14天的锤炼,我们的任务管理系统已具备工业级水准。今天将解锁多语言支持能力,让应用走向国际化舞台。

Vue3 官方中文文档传送点: 国际化指南

Vue3 官方中文文档传送点: 简介 | Vue.js

Vue3 的中文官方文档学习笔记很全还有练习场,推荐去官网学习

Vue前端成仙之路:Vue 前端成仙之路_野生的程序媛的博客-CSDN博客

GO后端成神之路:Go 后端成神之路_野生的程序媛的博客-CSDN博客

一、Vue I18n 核心配置

1.1 基础环境搭建

npm install vue-i18n@9

1.2 初始化配置

// src/plugins/i18n.ts
import { createI18n } from 'vue-i18n'

// 基础语言包
const messages = {
  en: {
    task: {
      title: 'Task Manager',
      add: 'Add Task',
      delete: 'Delete'
    }
  },
  zh: {
    task: {
      title: '任务管理系统',
      add: '添加任务',
      delete: '删除'
    }
  }
}

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

export default i18n

1.3 全局挂载

// main.ts
import i18n from './plugins/i18n'

app.use(i18n)

二、多语言实现方案

2.1 基础使用

<template>
  <h1>{{ $t('task.title') }}</h1>
  <button>{{ $t('task.add') }}</button>
</template>

<script setup>
import { useI18n } from 'vue-i18n'

const { t } = useI18n()
console.log(t('task.delete')) 
</script>

2.2 动态切换语言

<template>
  <select v-model="locale">
    <option value="en">English</option>
    <option value="zh">中文</option>
  </select>
</template>

<script setup>
import { useI18n } from 'vue-i18n'

const { locale } = useI18n()
</script>

2.3 高级功能实现

复数处理
{
  "task": {
    "count": "{count} task | {count} tasks"
  }
}
<p>{{ $tc('task.count', taskCount) }}</p>
日期/货币本地化
const { d, n } = useI18n()
const localDate = d(new Date(), 'long')
const localPrice = n(99.99, 'currency')

三、工程化实践

3.1 语言包模块化

src/
└─ locales/
   ├─ en/
   │  ├─ common.json
   │  └─ task.json
   └─ zh/
      ├─ common.json
      └─ task.json

3.2 异步加载语言包

// 动态加载语言包
async function loadLocaleMessages(locale: string) {
  const messages = await import(`./locales/${locale}/index.ts`)
  i18n.global.setLocaleMessage(locale, messages.default)
}

// 切换语言时调用
const setLanguage = async (lang: string) => {
  if (!i18n.global.availableLocales.includes(lang)) {
    await loadLocaleMessages(lang)
  }
  i18n.global.locale.value = lang
}

3.3 与Pinia整合

// stores/languageStore.ts
export const useLanguageStore = defineStore('language', {
  state: () => ({
    currentLang: 'zh'
  }),
  actions: {
    async switchLang(lang: string) {
      await setLanguage(lang)
      this.currentLang = lang
    }
  }
})

四、最佳实践

4.1 翻译规范

场景正确示例错误示例
变量插值{name}的任务name的任务
标点符号你好!你好!
长文本使用多行JSON格式拼接字符串

4.2 与UI框架整合

Element Plus国际化配置:

import ElementPlus from 'element-plus'
import zhLocale from 'element-plus/lib/locale/lang/zh-cn'
import enLocale from 'element-plus/lib/locale/lang/en'

const i18n = createI18n({
  // ...
  messages: {
    zh: { ...zhLocale, ...zhMessages },
    en: { ...enLocale, ...enMessages }
  }
})

app.use(ElementPlus, {
  i18n: i18n.global.t
})

4.3 检测未翻译项

配置警告提示:

const i18n = createI18n({
  // ...
  missingWarn: false,
  fallbackWarn: false,
  warnHtmlMessage: false
})

相关文章:

  • vue-常用指令 | 常用指令的修饰符
  • DNS查询
  • Mysql与ElasticSearch间的数据同步场景模拟
  • Blender-MCP服务源码4-初始化项目解读
  • 算法——先序中序还原二叉树
  • ubuntu测试指定文件夹的读写速度
  • 深度学习-145-Text2SQL之基于官方提示词模板进行交互
  • VMware安装Centos
  • leetcode日记(100)填充每个节点的下一个右侧节点指针
  • go程序调用k8s pod副本的名称IP手动赋值给configmap的参数
  • 麒麟服务器操作系统Go环境部署手册
  • 麒麟服务器操作系统Redis部署手册
  • BGP实验(二)路由反射器
  • Spring Cloud Config - 动态配置管理与高可用治理
  • LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS 论文阅读
  • uniapp移动端图片比较器组件,仿英伟达官网rtx光追图片比较器功能
  • ⚡️Jolt -- 通过JSON配置来处理复杂数据转换的工具
  • [Java实战]Spring Boot服务CPU 100%问题排查:从定位到解决
  • JS - 重点JS方法温故而知新
  • ROS2 系统架构
  • 人民日报:不能层层加码,要层层负责
  • 特朗普与普京开始进行电话会谈,稍后还将致电泽连斯基
  • 长三角议事厅·周报|新能源汽车产业需寻求“第二增长曲线”
  • 减负举措如何助力基层干部轻装上阵?记者一线调查
  • 曾毓群说未来三年重卡新能源渗透率将突破50%,宁德时代如何打好换电这张牌
  • 全中国最好的十个博物馆展陈选出来了!