Skip to content

Commit 5be9bb1

Browse files
committed
refactor: combine vant i18n setup (#133)
1 parent 9a0062c commit 5be9bb1

File tree

1 file changed

+17
-16
lines changed

1 file changed

+17
-16
lines changed

src/utils/i18n.ts

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,13 @@ import enUS from 'vant/es/locale/lang/en-US'
33
import zhCN from 'vant/es/locale/lang/zh-CN'
44
import { Locale, type PickerColumn } from 'vant'
55

6-
/** 默认语言包名称 */
76
const FALLBACK_LOCALE = 'zh-CN'
87

9-
/** 多语言 picker columns */
8+
const vantLocales = {
9+
'zh-CN': zhCN,
10+
'en-US': enUS,
11+
}
12+
1013
export const languageColumns: PickerColumn = [
1114
{ text: '简体中文', value: 'zh-CN' },
1215
{ text: 'English', value: 'en-US' },
@@ -15,7 +18,6 @@ export const languageColumns: PickerColumn = [
1518
export const i18n = setupI18n()
1619
type I18n = typeof i18n
1720

18-
/** 当前语言 */
1921
export const locale = computed({
2022
get() {
2123
return i18n.global.locale.value
@@ -25,14 +27,6 @@ export const locale = computed({
2527
},
2628
})
2729

28-
// 载入 vant 语言包
29-
Locale.use('zh-CN', zhCN)
30-
Locale.use('en-US', enUS)
31-
32-
// 根据当前语言切换 vant 语言包
33-
Locale.use(locale.value)
34-
35-
/** 初始化 i18n */
3630
function setupI18n() {
3731
const locale = getI18nLocale()
3832
const i18n = createI18n({
@@ -45,25 +39,32 @@ function setupI18n() {
4539

4640
async function setLang(lang: string, i18n: I18n) {
4741
await loadLocaleMsg(lang, i18n)
42+
4843
document.querySelector('html').setAttribute('lang', lang)
4944
localStorage.setItem('language', lang)
5045
i18n.global.locale.value = lang
51-
Locale.use(lang)
46+
47+
// 设置 vant 组件语言包
48+
Locale.use(lang, vantLocales[lang])
5249
}
5350

54-
/** 加载语言包 */
51+
// 加载本地语言包
5552
async function loadLocaleMsg(locale: string, i18n: I18n) {
5653
const messages = await import(`../locales/${locale}.json`)
5754
i18n.global.setLocaleMessage(locale, messages.default)
5855
}
5956

60-
/** 获取当前语言对应的语言包名称 */
57+
// 获取当前语言对应的语言包名称
6158
function getI18nLocale() {
6259
const storedLocale = localStorage.getItem('language') || navigator.language
6360

6461
const langs = languageColumns.map(v => v.value as string)
65-
const foundLocale = langs.find(v => v === storedLocale || v.indexOf(storedLocale) === 0) // 存在当前语言的语言包 或 存在当前语言的任意地区的语言包
66-
const locale = foundLocale || FALLBACK_LOCALE // 若未找到,则使用 默认语言包
62+
63+
// 存在当前语言的语言包 或 存在当前语言的任意地区的语言包
64+
const foundLocale = langs.find(v => v === storedLocale || v.indexOf(storedLocale) === 0)
65+
66+
// 若未找到,则使用 默认语言包
67+
const locale = foundLocale || FALLBACK_LOCALE
6768

6869
return locale
6970
}

0 commit comments

Comments
 (0)