@@ -3,10 +3,13 @@ import enUS from 'vant/es/locale/lang/en-US'
33import zhCN from 'vant/es/locale/lang/zh-CN'
44import { Locale , type PickerColumn } from 'vant'
55
6- /** 默认语言包名称 */
76const FALLBACK_LOCALE = 'zh-CN'
87
9- /** 多语言 picker columns */
8+ const vantLocales = {
9+ 'zh-CN' : zhCN ,
10+ 'en-US' : enUS ,
11+ }
12+
1013export const languageColumns : PickerColumn = [
1114 { text : '简体中文' , value : 'zh-CN' } ,
1215 { text : 'English' , value : 'en-US' } ,
@@ -15,7 +18,6 @@ export const languageColumns: PickerColumn = [
1518export const i18n = setupI18n ( )
1619type I18n = typeof i18n
1720
18- /** 当前语言 */
1921export 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 */
3630function setupI18n ( ) {
3731 const locale = getI18nLocale ( )
3832 const i18n = createI18n ( {
@@ -45,25 +39,32 @@ function setupI18n() {
4539
4640async 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+ // 加载本地语言包
5552async 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+ // 获取当前语言对应的语言包名称
6158function 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