mirror of
https://github.com/Athou/commafeed.git
synced 2026-03-21 21:37:29 +00:00
57 lines
1.4 KiB
TypeScript
57 lines
1.4 KiB
TypeScript
import { i18n, Messages } from "@lingui/core"
|
|
import { useAppSelector } from "app/store"
|
|
import dayjs from "dayjs"
|
|
import "dayjs/locale/en"
|
|
import "dayjs/locale/fr"
|
|
import { en, fr } from "make-plural"
|
|
import { useEffect } from "react"
|
|
import { messages as enMessages } from "./locales/en/messages"
|
|
import { messages as frMessages } from "./locales/fr/messages"
|
|
|
|
interface Locale {
|
|
key: string
|
|
label: string
|
|
messages: Messages
|
|
plurals?: (n: number | string, ord?: boolean) => string
|
|
}
|
|
|
|
// add an object to the array to add a new locale
|
|
// don't forget to also add it to the 'locales' array in .linguirc
|
|
export const locales: Locale[] = [
|
|
{
|
|
key: "en",
|
|
label: "English",
|
|
messages: enMessages,
|
|
plurals: en,
|
|
},
|
|
{
|
|
key: "fr",
|
|
label: "Français",
|
|
messages: frMessages,
|
|
plurals: fr,
|
|
},
|
|
]
|
|
|
|
locales.forEach(l => {
|
|
i18n.loadLocaleData({
|
|
[l.key]: {
|
|
plurals: l.plurals,
|
|
},
|
|
})
|
|
i18n.load({
|
|
[l.key]: l.messages,
|
|
})
|
|
})
|
|
|
|
function activateLocale(locale: string) {
|
|
i18n.activate(locale)
|
|
dayjs.locale(locale)
|
|
}
|
|
|
|
export const useI18n = () => {
|
|
const locale = useAppSelector(state => state.user.settings?.language)
|
|
useEffect(() => {
|
|
activateLocale(locale ?? "en")
|
|
}, [locale])
|
|
}
|