@@ -3,10 +3,13 @@ import enUS from 'vant/es/locale/lang/en-US'
3
3
import zhCN from 'vant/es/locale/lang/zh-CN'
4
4
import { Locale , type PickerColumn } from 'vant'
5
5
6
- /** 默认语言包名称 */
7
6
const FALLBACK_LOCALE = 'zh-CN'
8
7
9
- /** 多语言 picker columns */
8
+ const vantLocales = {
9
+ 'zh-CN' : zhCN ,
10
+ 'en-US' : enUS ,
11
+ }
12
+
10
13
export const languageColumns : PickerColumn = [
11
14
{ text : '简体中文' , value : 'zh-CN' } ,
12
15
{ text : 'English' , value : 'en-US' } ,
@@ -15,7 +18,6 @@ export const languageColumns: PickerColumn = [
15
18
export const i18n = setupI18n ( )
16
19
type I18n = typeof i18n
17
20
18
- /** 当前语言 */
19
21
export const locale = computed ( {
20
22
get ( ) {
21
23
return i18n . global . locale . value
@@ -25,14 +27,6 @@ export const locale = computed({
25
27
} ,
26
28
} )
27
29
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 */
36
30
function setupI18n ( ) {
37
31
const locale = getI18nLocale ( )
38
32
const i18n = createI18n ( {
@@ -45,25 +39,32 @@ function setupI18n() {
45
39
46
40
async function setLang ( lang : string , i18n : I18n ) {
47
41
await loadLocaleMsg ( lang , i18n )
42
+
48
43
document . querySelector ( 'html' ) . setAttribute ( 'lang' , lang )
49
44
localStorage . setItem ( 'language' , lang )
50
45
i18n . global . locale . value = lang
51
- Locale . use ( lang )
46
+
47
+ // 设置 vant 组件语言包
48
+ Locale . use ( lang , vantLocales [ lang ] )
52
49
}
53
50
54
- /** 加载语言包 */
51
+ // 加载本地语言包
55
52
async function loadLocaleMsg ( locale : string , i18n : I18n ) {
56
53
const messages = await import ( `../locales/${ locale } .json` )
57
54
i18n . global . setLocaleMessage ( locale , messages . default )
58
55
}
59
56
60
- /** 获取当前语言对应的语言包名称 */
57
+ // 获取当前语言对应的语言包名称
61
58
function getI18nLocale ( ) {
62
59
const storedLocale = localStorage . getItem ( 'language' ) || navigator . language
63
60
64
61
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
67
68
68
69
return locale
69
70
}
0 commit comments