Skip to content

Commit f1fed1b

Browse files
committedFeb 27, 2024
fix: i18n language detection
1 parent a9a0bf4 commit f1fed1b

File tree

2 files changed

+25
-5
lines changed

2 files changed

+25
-5
lines changed
 

‎src/GZCTF/ClientApp/src/main.tsx

+20-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { App } from '@App'
2+
import { LanguageMap, SupportedLanguages, defaultLanguage } from '@Utils/I18n'
23
import i18n from 'i18next'
34
import LanguageDetector from 'i18next-browser-languagedetector'
45
import { StrictMode } from 'react'
@@ -7,17 +8,34 @@ import { initReactI18next } from 'react-i18next'
78
import { BrowserRouter as Router } from 'react-router-dom'
89
import resources from 'virtual:i18next-loader'
910

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+
1028
i18n
1129
.use(LanguageDetector)
1230
.use(initReactI18next)
1331
.init({
1432
resources,
15-
fallbackLng: 'zh_CN',
33+
fallbackLng: defaultLanguage,
1634
interpolation: {
1735
escapeValue: false,
1836
},
1937
detection: {
20-
convertDetectedLanguage: 'Iso15897',
38+
convertDetectedLanguage: convertLanguage,
2139
},
2240
})
2341

‎src/GZCTF/ClientApp/src/utils/I18n.tsx

+5-3
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ export const LanguageMap = {
99
ja_JP: '日本語',
1010
}
1111

12+
export const defaultLanguage = 'zh_CN'
13+
1214
export type SupportedLanguages = keyof typeof LanguageMap
1315

1416
export const useLanguage = () => {
@@ -32,12 +34,12 @@ export const useLanguage = () => {
3234
if (supportedLanguages.includes(lang)) {
3335
setLanguageInner(lang)
3436
} 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)
3739
}
3840
}
3941

4042
return { language, setLanguage, supportedLanguages }
4143
}
4244

43-
export let apiLanguage: string = 'zh-CN'
45+
export let apiLanguage: string = defaultLanguage

0 commit comments

Comments
 (0)