File tree 2 files changed +25
-5
lines changed
2 files changed +25
-5
lines changed Original file line number Diff line number Diff line change 1
1
import { App } from '@App'
2
+ import { LanguageMap , SupportedLanguages , defaultLanguage } from '@Utils/I18n'
2
3
import i18n from 'i18next'
3
4
import LanguageDetector from 'i18next-browser-languagedetector'
4
5
import { StrictMode } from 'react'
@@ -7,17 +8,34 @@ import { initReactI18next } from 'react-i18next'
7
8
import { BrowserRouter as Router } from 'react-router-dom'
8
9
import resources from 'virtual:i18next-loader'
9
10
11
+ const convertLanguage = ( language : string ) : SupportedLanguages => {
12
+ const normalizeLanguage = ( language : string ) => {
13
+ let sliceIndex = language . indexOf ( '-' )
14
+ if ( sliceIndex === - 1 ) sliceIndex = language . indexOf ( '_' )
15
+ if ( sliceIndex === - 1 ) sliceIndex = language . length
16
+ return language . toLowerCase ( ) . slice ( 0 , sliceIndex )
17
+ }
18
+ const normalizedLanguage = normalizeLanguage ( language )
19
+
20
+ const matchedLanguage = Object . keys ( LanguageMap ) . filter ( ( lang ) => normalizeLanguage ( lang ) === normalizedLanguage )
21
+ if ( matchedLanguage . length > 0 ) {
22
+ return matchedLanguage [ 0 ] as SupportedLanguages
23
+ }
24
+
25
+ return defaultLanguage
26
+ }
27
+
10
28
i18n
11
29
. use ( LanguageDetector )
12
30
. use ( initReactI18next )
13
31
. init ( {
14
32
resources,
15
- fallbackLng : 'zh_CN' ,
33
+ fallbackLng : defaultLanguage ,
16
34
interpolation : {
17
35
escapeValue : false ,
18
36
} ,
19
37
detection : {
20
- convertDetectedLanguage : 'Iso15897' ,
38
+ convertDetectedLanguage : convertLanguage ,
21
39
} ,
22
40
} )
23
41
Original file line number Diff line number Diff line change @@ -9,6 +9,8 @@ export const LanguageMap = {
9
9
ja_JP : '日本語' ,
10
10
}
11
11
12
+ export const defaultLanguage = 'zh_CN'
13
+
12
14
export type SupportedLanguages = keyof typeof LanguageMap
13
15
14
16
export const useLanguage = ( ) => {
@@ -32,12 +34,12 @@ export const useLanguage = () => {
32
34
if ( supportedLanguages . includes ( lang ) ) {
33
35
setLanguageInner ( lang )
34
36
} else {
35
- console . warn ( `Language ${ lang } is not supported, fallback to zh_CN ` )
36
- setLanguageInner ( 'zh_CN' )
37
+ console . warn ( `Language ${ lang } is not supported, fallback to ${ defaultLanguage } ` )
38
+ setLanguageInner ( defaultLanguage )
37
39
}
38
40
}
39
41
40
42
return { language, setLanguage, supportedLanguages }
41
43
}
42
44
43
- export let apiLanguage : string = 'zh-CN'
45
+ export let apiLanguage : string = defaultLanguage
You can’t perform that action at this time.
0 commit comments