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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/72613.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/72613.shtml
英文地址,請注明出處:http://en.pswp.cn/web/72613.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

開源PACS(dcm4che-arc-light)部署教程,源碼方式

目錄 文件清單下載地址安裝概述OpenLDAP、Apache Directory StudioWildflydcm4che 安裝部署MySQL源碼編譯dcm4cheedcm4chee-arc-light OpenLDAP安裝ApacheDirectoryStudio安裝配置WildFly服務器 部署完成 文件清單 下載地址 Apache directory studio - linkOpenLDAP - linkdcm…

java使用(Preference、Properties、XML、JSON)實現處理(讀寫)配置信息或者用戶首選項的方式的代碼示例和表格對比

在Java應用程序中&#xff0c;處理應用首選項&#xff08;preferences&#xff09;有多種方法&#xff0c;包括使用java.util.prefs.Preferences類、屬性文件&#xff08;如.properties文件&#xff09;、XML文件和JSON文件。下面是每種方法的詳細說明和代碼示例&#xff0c;最…

工作記錄 2017-02-04

工作記錄 2017-02-04 序號 工作 相關人員 1 修改郵件上的問題。 更新RD服務器。 郝 更新的問題 1、DataExport的設置中去掉了ListPayors&#xff0c;見DataExport\bin\dataexport.xml 2、“IPA/Group Name” 改為 “Insurance Name”。 3、修改了Payment Posted的E…

dataframe數據形式操作中的diff和shift函數區別與對比

問題分析 從錯誤日志中可以看到&#xff0c;代碼在 report_services.py 的 gnss_monthly_report 函數中出現了 ValueError&#xff0c;具體錯誤信息是&#xff1a; ValueError: either both or neither of x and y should be given這個錯誤發生在以下代碼行&#xff1a; rep…

C語言動態內存管理(下)

歡迎拜訪&#xff1a;霧里看山-CSDN博客 本篇主題&#xff1a;C語言動態內存管理(下) 發布時間&#xff1a;2025.3.18 隸屬專欄&#xff1a;C語言 目錄 動態內存常見錯誤內存泄漏&#xff08;Memory Leak&#xff09;典型場景后果解決方案 懸掛指針&#xff08;Dangling Pointe…

Vue:Vue2和Vue3創建項目的幾種常用方式以及區別

前言 Vue.js 和 Element UI 都是用 JavaScript 編寫的。 1、Vue.js 是一個漸進式 JavaScript 框架。2、Element UI 是基于 Vue.js 的組件庫。3、JavaScript 是這兩個項目的主要編程語言。 而Element Plus是基于TypeScript開發的。 一、Vue2 1、基于vuecli工具創建 vue2 …

機器人曲面跟蹤Surface-Tracking

定義 機器人曲面跟蹤&#xff08;Surface-Tracking&#xff09;是指機器人通過實時感知工件曲面的三維形貌&#xff0c;動態調整運動軌跡和位姿&#xff0c;以精確跟隨曲面進行加工&#xff08;如打磨、拋光、噴涂等&#xff09;的技術。 力 - 位姿協同控制 力控模式&#xff…

網絡安全運維應急響應與溯源分析實戰案例

在日常運維過程中&#xff0c;網絡安全事件時有發生&#xff0c;快速響應和精準溯源是保障業務穩定運行的關鍵。本文將通過一個實際案例&#xff0c;詳細解析從發現問題到溯源定位&#xff0c;再到最終解決的完整流程。 目錄 一、事件背景 二、事件發現 1. 監控告警觸發 2…

【AVRCP】藍牙協議棧深度解析:AVCTP互操作性核心機制與實現細節

目錄 一、事務標簽&#xff08;Transaction Label&#xff09;機制 1.1 事務標簽核心規則 1.2 事務標簽作用域與并發性 1.3 實現建議與陷阱規避 1.4 協議設計思考 1.5 調試與驗證 二、消息分片&#xff08;Fragmentation&#xff09;機制 2.1 分片觸發條件 2.2 分片支…

harmonyOS NEXT開發與前端開發深度對比分析

文章目錄 1. 技術體系概覽1.1 技術棧對比1.2 生態對比 2. 開發范式比較2.1 鴻蒙開發范式2.2 前端開發范式 3. 框架特性對比3.1 鴻蒙 Next 框架特性3.2 前端框架特性 4. 性能優化對比4.1 鴻蒙性能優化4.2 前端性能優化 5. 開發工具對比5.1 鴻蒙開發工具5.2 前端開發工具 6. 學習…

OpenWebUI:一站式 AI 應用構建平臺體驗

&#x1f680; 大家好&#xff0c;今天給大家分享一個超棒的 AI 應用構建工具——OpenWebUI&#xff01;體驗下來&#xff0c;只能說絲滑&#xff01;必須強烈推薦&#xff01; &#x1f525; 聽說過阿里巴巴的 Qwen 嗎&#xff1f;他們最新的 Qwen Chat 網站就是用 OpenWebUI…

多線程—進程與線程

1 進程 1.1 進程概念 進程&#xff1a;操作系統提供的一種抽象&#xff0c;當程序在運行時&#xff0c;好像計算機的所有硬件資源都在為其服務。換言之&#xff0c;進程就是程序的一次運行過程。進程是操作系統分配資源的基本單位。 注意&#xff1a;區分進程和程序&#xff0…

[原創](Modern C++)現代C++的關鍵性概念: 靈活多變的綁定: std::bind

[作者] 常用網名: 豬頭三 出生日期: 1981.XX.XX 企鵝交流: 643439947 個人網站: 80x86匯編小站 編程生涯: 2001年~至今[共24年] 職業生涯: 22年 開發語言: C/C、80x86ASM、Object Pascal、Objective-C、C#、R、Python、PHP、Perl、 開發工具: Visual Studio、Delphi、XCode、C …

ssm框架之mybatis框架動態SQL

1 mybatis動態sql mybatis可以通過各種各樣的標簽在sql映射文件中實現如下功能 1、語句的動態拼接 2、前后綴格式處理 3、復雜參數處理 常用標簽如下&#xff1a; 1.1 if標簽 如下示例&#xff0c;當有一個入參為null或者空的時候的時候&#xff0c;不參與計算&#xff0c;…

Spring Boot 事務詳解

Spring Boot 事務詳解 引言 在現代應用程序中&#xff0c;事務管理是確保數據一致性和完整性的重要機制。Spring Boot 提供了強大的事務管理功能&#xff0c;使得開發者可以輕松地定義和管理事務。本文將詳細介紹 Spring Boot 中的事務管理&#xff0c;包括事務傳播行為、事務…

poetry使用

1.初始化 package name 填入口文件名 poetry init2.在本目錄下虛擬 poetry config virtualenvs.in-project true 3.自動生成依賴文件和vent虛擬環境&#xff0c;管理本項目下載包 poetry add flask pandas numpy 4 4.下載依賴 poetry install 5.查看都安裝了什么包 poe…

Git 新建本地分支并關聯到遠程倉庫

文章目錄 1、方法一2、方法二 1、方法一 A、新建本地分支&#xff1a; git checkout -b new-branch-nameB、push新分支到遠程倉庫&#xff1a; git push origin newBranchC、本地分支關聯到遠程&#xff08;選一個即可&#xff09;&#xff1a; git branch --set…

一條SQL在mysql數據庫中經歷的過程

SQL語句在MySQL數據庫中普遍經歷的過程如下&#xff1a; 客戶端發起查詢請求到MySQL數據庫服務器監聽端口&#xff1b; MySQL數據庫server端接收到請求&#xff1b; server端從已有的連接池或者新建一個線程&#xff0c;用來處理客戶端發起的請求&#xff1b; server層…

Compose 的產生和原理

引言 compose 出現的目的&#xff1a; 重新定義android 上ui 的編寫方式。為了提高android 原生ui開發效率。讓android 的UI開發方式跟上時代。 正文 compose 是什么&#xff1f; 就是一套ui框架 和flutter 一樣是一套ui框架 Flutter&#xff1a;跨平臺開發趨勢與企業應用的…

【計算機網絡】一二章

一 二 非常棒的例子 相同的傳播時延&#xff0c;帶寬越大&#xff0c;該鏈路上所能容納的比特數越多 相同的傳播時延&#xff0c;帶寬越大&#xff0c;該鏈路上所能容納的比特數越多 往返時間&#xff08;Round-Trip Time&#xff0c;RTT&#xff09;s是指從發送端發送數據分組…