Skip to content

Commit 31ec34b

Browse files
committed
fix: Fix dynamic loading for i18n messages
1 parent f714d2e commit 31ec34b

File tree

1 file changed

+5
-5
lines changed

1 file changed

+5
-5
lines changed

src/provider/IntlProvider.tsx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { setDefaultOptions } from "date-fns";
22
import flatpickr from "flatpickr";
3-
import React, { useEffect, useState } from "react";
3+
import React, { ComponentProps, useEffect, useState } from "react";
44
import { IntlProvider as ReactIntlProvider } from "react-intl";
55
import useSettings from "../hooks/useSettings";
66

@@ -11,7 +11,6 @@ import { english as flatpickrEN } from "flatpickr/dist/l10n/default";
1111
import { French as flatpickrFR } from "flatpickr/dist/l10n/fr.js";
1212
import { Russian as flatpickrRU } from "flatpickr/dist/l10n/ru.js";
1313

14-
// eslint-disable-next-line react-refresh/only-export-components
1514
export const LANGUAGES = ["en", "de", "ru", "fr"] as const;
1615

1716
type Language = (typeof LANGUAGES)[number];
@@ -30,11 +29,12 @@ const IntlProvider = ({ children }: PropTypes) => {
3029
locale = LANGUAGES.find((lang) => settings.language === lang) ?? "en";
3130
}
3231

33-
const [messages, setMessages] = useState(messagesEN);
32+
const [messages, setMessages] = useState<Partial<Record<Language, ComponentProps<typeof ReactIntlProvider>["messages"]>>>({ en: messagesEN });
3433

3534
useEffect(() => {
3635
(async () => {
37-
setMessages((await import(`../lang/${locale}.json`)).default);
36+
const messages = (await import(`../lang/${locale}.json`)).default;
37+
setMessages((prev) => ({ ...prev, [locale]: messages }));
3838

3939
setDefaultOptions({
4040
locale: (await import("date-fns/locale"))[locale === "en" ? "enUS" : locale],
@@ -62,7 +62,7 @@ const IntlProvider = ({ children }: PropTypes) => {
6262
}, [locale]);
6363

6464
return (
65-
<ReactIntlProvider locale={locale} messages={messages}>
65+
<ReactIntlProvider locale={locale} messages={messages[locale] ?? messagesEN}>
6666
{children}
6767
</ReactIntlProvider>
6868
);

0 commit comments

Comments
 (0)