2023-02-08 20:16:35 +00:00
|
|
|
import { type ReactNode } from "react";
|
|
|
|
import { IntlProvider as ReactIntlProvider } from "react-intl";
|
2023-02-15 11:31:02 +00:00
|
|
|
import enMessages from "translations/en.json";
|
|
|
|
import esMessages from "translations/es.json";
|
|
|
|
import zhMessages from "translations/zh.json";
|
|
|
|
import jaMessages from "translations/ja.json";
|
|
|
|
import frMessages from "translations/fr.json";
|
|
|
|
import huMessages from "translations/hu.json";
|
|
|
|
import idMessages from "translations/id.json";
|
|
|
|
import arMessages from "translations/ar.json";
|
2023-02-08 04:54:33 +00:00
|
|
|
|
2023-02-08 20:16:35 +00:00
|
|
|
const DEFAULT_LOCALE = "en-US";
|
2023-02-08 04:54:33 +00:00
|
|
|
|
|
|
|
const getMessages = (locale: string) => {
|
2023-02-08 20:16:35 +00:00
|
|
|
const truncatedLocale = locale.toLowerCase().split(/[_-]+/)[0];
|
2023-02-08 04:54:33 +00:00
|
|
|
|
2023-02-08 20:16:35 +00:00
|
|
|
switch (truncatedLocale) {
|
|
|
|
case "en":
|
|
|
|
return enMessages;
|
|
|
|
case "es":
|
|
|
|
return esMessages;
|
|
|
|
case "zh":
|
|
|
|
return zhMessages;
|
|
|
|
case "ja":
|
|
|
|
return jaMessages;
|
2023-02-09 13:10:13 +00:00
|
|
|
case "fr":
|
|
|
|
return frMessages;
|
2023-02-11 16:35:53 +00:00
|
|
|
case "hu":
|
|
|
|
return huMessages;
|
2023-02-12 16:00:59 +00:00
|
|
|
case "id":
|
|
|
|
return idMessages;
|
2023-02-13 10:08:09 +00:00
|
|
|
case "ar":
|
|
|
|
return arMessages;
|
2023-02-08 20:16:35 +00:00
|
|
|
default:
|
|
|
|
return enMessages;
|
|
|
|
}
|
|
|
|
};
|
2023-02-08 04:54:33 +00:00
|
|
|
|
|
|
|
export const IntlProvider = ({ children }: { children: ReactNode }) => {
|
2023-02-08 20:16:35 +00:00
|
|
|
const getLocale = () => {
|
2023-02-09 12:26:54 +00:00
|
|
|
return (navigator.languages && navigator.languages[0]) || navigator.language || DEFAULT_LOCALE;
|
2023-02-08 20:16:35 +00:00
|
|
|
};
|
|
|
|
const locale = getLocale();
|
|
|
|
|
|
|
|
return (
|
|
|
|
<ReactIntlProvider locale={locale} messages={getMessages(locale)}>
|
|
|
|
{children}
|
|
|
|
</ReactIntlProvider>
|
|
|
|
);
|
|
|
|
};
|