一文帶你搞懂Vue中i18n的使用方法
1.i18n的基礎介紹
i18n(Internationalization的縮寫,18代表首尾字母之間的字母數(shù))是"國際化"的簡稱。它的主要目的是讓應用程序能夠適應不同的語言和地區(qū)的需求。為什么需要i18n?全球化需求,應用需要服務不同國家的用戶,滿足多語言市場的業(yè)務拓展需求,提升產品的國際競爭力。i18n不僅僅是一個翻譯工具,而是一個完整的國際化解決方案,它能夠幫助我們更好地開發(fā)和維護國際化應用,提升用戶體驗和開發(fā)效率。在現(xiàn)代web開發(fā)中,i18n已經(jīng)成為構建全球化應用的必要工具。
2.安裝配置
# 1. 安裝 vue-i18n npm install vue-i18n@next # Vue 3.x # 或 npm install vue-i18n@8 # Vue 2.x
3.基礎配置
// i18n/index.js
import { createI18n } from 'vue-i18n'
// 語言包配置
const messages = {
// 中文語言包
zh: {
message: {
hello: '你好',
welcome: '歡迎來到{name}',
// 導航
nav: {
home: '首頁',
about: '關于我們',
user: '用戶中心'
},
// 表單
form: {
username: '用戶名',
password: '密碼',
submit: '提交',
reset: '重置'
}
}
},
// 英文語言包
en: {
message: {
hello: 'Hello',
welcome: 'Welcome to {name}',
nav: {
home: 'Home',
about: 'About',
user: 'User Center'
},
form: {
username: 'Username',
password: 'Password',
submit: 'Submit',
reset: 'Reset'
}
}
}
}
// 創(chuàng)建 i18n 實例
const i18n = createI18n({
locale: 'zh', // 設置默認語言
fallbackLocale: 'en', // 設置備用語言
messages, // 語言包
legacy: false, // 使用組合式API
globalInjection: true // 全局注入 $t 函數(shù)
})
export default i18n4.在 main.js 中注冊
import { createApp } from 'vue'
import App from './App.vue'
import i18n from './i18n'
const app = createApp(App)
app.use(i18n)
app.mount('#app')
5.基礎用法
<!-- 1. 模板中使用 -->
<template>
<!-- 基本翻譯 -->
<h1>{{ $t('message.hello') }}</h1>
<!-- 帶參數(shù)翻譯 -->
<p>{{ $t('message.welcome', { name: 'Vue' }) }}</p>
<!-- 切換語言 -->
<select v-model="$i18n.locale">
<option value="zh">中文</option>
<option value="en">English</option>
</select>
</template>
<!-- 2. 組合式API中使用 -->
<script setup>
import { useI18n } from 'vue-i18n'
const { t, locale } = useI18n()
// 使用翻譯
console.log(t('message.hello'))
// 切換語言
const changeLanguage = (lang) => {
locale.value = lang
}
</script>6.進階用法
// 1. 數(shù)字格式化
const i18n = createI18n({
numberFormats: {
zh: {
currency: {
style: 'currency',
currency: 'CNY'
}
},
en: {
currency: {
style: 'currency',
currency: 'USD'
}
}
}
})
// 使用
<template>
<p>{{ $n(100, 'currency') }}</p>
</template>
// 2. 日期格式化
const i18n = createI18n({
datetimeFormats: {
zh: {
short: {
year: 'numeric',
month: 'short',
day: 'numeric'
}
},
en: {
short: {
year: 'numeric',
month: 'short',
day: 'numeric'
}
}
}
})
// 使用
<template>
<p>{{ $d(new Date(), 'short') }}</p>
</template>7.動態(tài)加載語言包
// i18n/loader.js
export const loadLanguageAsync = async (lang) => {
// 動態(tài)導入語言文件
const messages = await import(`./locales/${lang}.js`)
// 設置語言包
i18n.global.setLocaleMessage(lang, messages.default)
// 切換語言
i18n.global.locale.value = lang
// 存儲語言選擇
localStorage.setItem('language', lang)
return messages.default
}
// 使用
const changeLanguage = async (lang) => {
await loadLanguageAsync(lang)
}
8.語言包管理
// locales/zh.js
export default {
message: {
// 通用
common: {
confirm: '確認',
cancel: '取消',
save: '保存'
},
// 錯誤信息
error: {
network: '網(wǎng)絡錯誤',
timeout: '請求超時',
notFound: '資源不存在'
},
// 業(yè)務模塊
user: {
login: '登錄',
register: '注冊',
profile: '個人資料'
}
}
}
9.持久化語言選擇
// i18n/persistence.js
export const setupI18nPersistence = (i18n) => {
// 從本地存儲獲取語言設置
const savedLanguage = localStorage.getItem('language')
if (savedLanguage) {
i18n.global.locale.value = savedLanguage
} else {
// 獲取瀏覽器語言
const browserLang = navigator.language.split('-')[0]
i18n.global.locale.value = browserLang
localStorage.setItem('language', browserLang)
}
}
10.最佳實踐
// 1. 創(chuàng)建語言切換組件
const LanguageSwitcher = {
setup() {
const { locale, t } = useI18n()
const languages = [
{ code: 'zh', name: '中文' },
{ code: 'en', name: 'English' }
]
const changeLanguage = async (lang) => {
await loadLanguageAsync(lang)
document.querySelector('html').setAttribute('lang', lang)
}
return { locale, languages, changeLanguage }
}
}
// 2. 路由標題國際化
router.beforeEach((to, from, next) => {
const { t } = i18n.global
document.title = t(to.meta.title) || '默認標題'
next()
})
// 3. 錯誤信息國際化
const handleError = (error) => {
const { t } = i18n.global
showMessage(t(`error.${error.code}`))
}
11.使用建議
合理組織語言包結構
使用命名空間避免沖突
實現(xiàn)語言選擇持久化
考慮動態(tài)加載優(yōu)化性能
注意日期和數(shù)字的本地化
做好錯誤信息的國際化
保持語言包的同步更新
到此這篇關于一文帶你搞懂Vue中i18n的使用方法的文章就介紹到這了,更多相關Vue i18n使用方法內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Vite打包優(yōu)化之縮小打包體積實現(xiàn)詳解
這篇文章主要為大家介紹了使用Vite縮小打包體積如何實現(xiàn)的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-01-01
解決vue select當前value沒有更新到vue對象屬性的問題
今天小編就為大家分享一篇解決vue select當前value沒有更新到vue對象屬性的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-08-08
拖拽插件sortable.js實現(xiàn)el-table表格拖拽效果
本文主要介紹了拖拽插件sortable.js實現(xiàn)el-table表格拖拽效果,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-02-02

