@@ -8,26 +8,42 @@ import messages from '@intlify/unplugin-vue-i18n/messages'
88import { Locale } from '@varlet/ui'
99import type { PickerColumnOption } from '@varlet/ui'
1010
11- export const i18n = createI18n ( {
12- locale : localStorage . getItem ( 'language' ) || navigator . language ,
13- fallbackLocale : 'zhCN' ,
14- messages,
15- } )
11+ /** Default language pack name */
12+ const FALLBACK_LOCALE = 'zh-CN'
1613
1714/** i18n picker columns */
1815export const languageColumns : PickerColumnOption [ ] = [
1916 { text : '简体中文' , value : 'zh-CN' } ,
2017 { text : 'English' , value : 'en-US' } ,
2118]
2219
20+ /** Gets the language pack name for the current language */
21+ function getI18nLocale ( ) {
22+ const locale = localStorage . getItem ( 'language' ) || navigator . language
23+ for ( const l of languageColumns ) {
24+ const value = l . value as string
25+ if ( value === locale )
26+ return locale // A language pack for the current language exists
27+ else if ( value . indexOf ( locale ) === 0 )
28+ return value // A language pack that exists in any locale of the current language
29+ }
30+ return FALLBACK_LOCALE // Use the default language pack
31+ }
32+
33+ export const i18n = createI18n ( {
34+ locale : getI18nLocale ( ) ,
35+ legacy : false ,
36+ messages,
37+ } )
38+
2339/** Current language */
2440export const locale = computed ( {
2541 get ( ) {
26- return ( i18n . global . locale as unknown as Ref < string > ) . value
42+ return i18n . global . locale . value
2743 } ,
2844 set ( language : string ) {
29- localStorage . setItem ( 'language' , language ) ;
30- ( i18n . global . locale as unknown as Ref < string > ) . value = language
45+ localStorage . setItem ( 'language' , language )
46+ i18n . global . locale . value = language
3147 Locale . use ( language )
3248 } ,
3349} )
0 commit comments