2023-03-03 03:12:27 +08:00

54 lines
1.2 KiB
TypeScript

import i18next from 'i18next'
import { initReactI18next } from 'react-i18next'
import zhCN from './locales/zh-cn.json'
import enUS from './locales/en-us.json'
export const supportedLanguages = ['zh-CN', 'en-US'] as const
export type SupportedLanguage = typeof supportedLanguages[number]
declare module 'react-i18next' {
interface CustomTypeOptions {
returnNull: false
resources: {
'en-US': typeof enUS
'zh-CN': typeof enUS
}
}
}
export const getInitLanguage = () => {
// Get language from settings
try {
const settings = JSON.parse(localStorage.getItem('settings') || '{}')
if (supportedLanguages.includes(settings.language)) {
return settings.language
}
} catch (e) {
// ignore
}
// Get language from browser
if (navigator.language.startsWith('zh-')) {
return 'zh-CN'
}
// Fallback to English
return 'en-US'
}
i18next.use(initReactI18next).init({
returnNull: false,
resources: {
'en-US': { translation: enUS },
'zh-CN': { translation: zhCN },
},
lng: getInitLanguage(),
fallbackLng: 'en-US',
supportedLngs: supportedLanguages,
interpolation: {
escapeValue: false,
},
})
export default i18next