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

ops/2025/3/17 18:47:27/

重生之我在学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
})

http://www.ppmy.cn/ops/166588.html

相关文章

sql靶场--布尔盲注(第八关)保姆级教程

目录 布尔盲注&#xff08;第八关&#xff09; 1.判断 2.确认布尔盲注 3.手工尝试布尔盲注 表名字符 表数 表名长度 表字符 字段数 字段名长度 字段字符 4.脚本布尔盲注注入 布尔盲注&#xff08;第八关&#xff09; 1.判断 布尔盲注了&#xff0c;这种页面只会有…

考研408-数据结构完整代码 线性表的顺序存储结构 - 顺序表

线性表的顺序存储结构 - 顺序表 1. 顺序表的定义 ​ 用一组地址连续的存储单元依次存储线性表的数据元素&#xff0c;从而使逻辑上相邻的两个元素在物理位置上也相邻 2. 顺序表的特点 随机访问&#xff1a; 即通过首地址和元素序号可以在O(1) 时间内找到指定元素&#xff0…

设计模式(行为型)-备忘录模式

目录 定义 类图 角色 角色详解 &#xff08;一&#xff09;发起人角色&#xff08;Originator&#xff09;​ &#xff08;二&#xff09;备忘录角色&#xff08;Memento&#xff09;​ &#xff08;三&#xff09;备忘录管理员角色&#xff08;Caretaker&#xff09;​…

django 运行时仅显示500 但是不提示其他内容 如何令其显示更多错误信息

在 Django 中&#xff0c;当发生 500 错误时默认仅显示简单的错误页面&#xff08;不包含堆栈跟踪等详细信息&#xff09;&#xff0c;这通常是因为 生产环境配置禁用了调试模式&#xff08;DEBUG False&#xff09;。以下是逐步解决方案&#xff0c;帮助你显示更详细的错误信…

蓝桥杯学习-08序列二分

08序列二分 序列二分应用的序列必须是递增或递减&#xff0c;但可以非严格 只要r是mid-1&#xff0c;就对应mid&#xff08;lr1&#xff09;/2 例题1-模板题&#xff08;18492&#xff09; 注意这里是个递增的序列。 解答 import java.util.Scanner; import java.util.Str…

SQL--算术运算符

过滤信息&#xff1a;where SELECT * FROM employees where department_id90; where紧随from语句 算术运算符&#xff1a; 加法运算符&#xff08;&#xff09; 用于计算两个数值的和。 示例&#xff1a; SELECT 1001 FROM dual; /*结果为101*/ SELECT 100A FROM dual; /*…

前端三件套(HTML + CSS + JS)

前言&#xff1a; 前端三件套&#xff0c;会用就行 毕竟在后面学习JavaWeb&#xff0c;以及在学习vue的时候也有帮助 前端三件套&#xff1a; HTML 定义网页的结构和内容。CSS 负责网页的样式和布局。JavaScript 添加动态交互和功能。 使用到的工具是Visual Studio Code 即…

如何用C#编写一个可以验证登录信息的简单登录页面?

要用C#编写一个简单的登录页面&#xff0c;可以按照以下步骤进行&#xff1a; 创建一个新的C#控制台应用程序项目。 创建一个名为Login.cs的类&#xff0c;该类包含用户名和密码作为属性。 class Login {public string Username { get; set; }public string Password { get;…