Whalebird-desktop-client-ma.../renderer/provider/i18n.tsx

48 lines
1.4 KiB
TypeScript
Raw Normal View History

2023-11-04 07:32:37 +01:00
import en from '../../locales/en/translation.json'
2023-12-04 17:08:12 +01:00
import ja from '../../locales/ja/translation.json'
2024-02-05 13:52:13 +01:00
import pt_pt from '../../locales/pt_pt/translation.json'
import zh_tw from '../../locales/zh_tw/translation.json'
2024-06-12 16:32:34 +02:00
import es_es from '../../locales/es_es/translation.json'
import { flattenMessages } from '../utils/flattenMessage'
2023-11-04 07:32:37 +01:00
import { createContext, useState } from 'react'
import { IntlProvider } from 'react-intl'
2024-06-12 16:32:34 +02:00
export type localeType = 'en' | 'ja' | 'pt-PT' | 'zh-TW' | 'es-ES'
2023-11-04 07:32:37 +01:00
type Props = {
2023-12-27 14:49:59 +01:00
children: React.ReactNode
2023-11-04 07:32:37 +01:00
}
interface Lang {
switchLang(lang: string): void
}
export const Context = createContext<Lang>({} as Lang)
export const IntlProviderWrapper: React.FC<Props> = props => {
2023-12-04 17:08:12 +01:00
const langs = [
{ locale: 'en', messages: flattenMessages(en) },
2024-02-05 13:52:13 +01:00
{ locale: 'ja', messages: flattenMessages(ja) },
{ locale: 'pt-PT', messages: flattenMessages(pt_pt) },
2024-06-12 16:32:34 +02:00
{ locale: 'zh-TW', messages: flattenMessages(zh_tw) },
{ locale: 'es-ES', messages: flattenMessages(es_es) }
2023-12-04 17:08:12 +01:00
]
2023-11-04 07:32:37 +01:00
const [lang, setLang] = useState(langs[0])
const switchLang = (locale: string) => {
const changeLang = langs.find(lang => lang.locale === locale)
if (changeLang == null) {
return
}
setLang(changeLang)
}
return (
<Context.Provider value={{ switchLang }}>
<IntlProvider {...lang} defaultLocale="en" fallbackOnEmptyString={true}>
{props.children}
</IntlProvider>
</Context.Provider>
)
}