diff --git a/web/public/locales/en/common.json b/web/public/locales/en/common.json
index 0676d3e26..6083c7950 100644
--- a/web/public/locales/en/common.json
+++ b/web/public/locales/en/common.json
@@ -108,7 +108,33 @@
"languages": "Languages",
"language": {
"en": "English",
+ "es": "Español (Spanish)",
"zhCN": "简体中文 (Simplified Chinese)",
+ "hi": "हिन्दी (Hindi)",
+ "fr": "Français (French)",
+ "ar": "العربية (Arabic)",
+ "pt": "Português (Portuguese)",
+ "ru": "Русский (Russian)",
+ "de": "Deutsch (German)",
+ "ja": "日本語 (Japanese)",
+ "tr": "Türkçe (Turkish)",
+ "it": "Italiano (Italian)",
+ "nl": "Nederlands (Dutch)",
+ "sv": "Svenska (Swedish)",
+ "cs": "Čeština (Czech)",
+ "nb": "Norsk Bokmål (Norwegian Bokmål)",
+ "ko": "한국어 (Korean)",
+ "vi": "Tiếng Việt (Vietnamese)",
+ "fa": "فارسی (Persian)",
+ "pl": "Polski (Polish)",
+ "uk": "Українська (Ukrainian)",
+ "he": "עברית (Hebrew)",
+ "el": "Ελληνικά (Greek)",
+ "ro": "Română (Romanian)",
+ "hu": "Magyar (Hungarian)",
+ "fi": "Suomi (Finnish)",
+ "da": "Dansk (Danish)",
+ "sk": "Slovenčina (Slovak)",
"withSystem": {
"label": "Use the system settings for language"
}
diff --git a/web/src/components/menu/GeneralSettings.tsx b/web/src/components/menu/GeneralSettings.tsx
index f844b74ef..b769e75e8 100644
--- a/web/src/components/menu/GeneralSettings.tsx
+++ b/web/src/components/menu/GeneralSettings.tsx
@@ -331,6 +331,24 @@ export default function GeneralSettings({ className }: GeneralSettingsProps) {
{t("menu.language.en")}
)}
+
+
diff --git a/web/src/components/ui/calendar.tsx b/web/src/components/ui/calendar.tsx
index 34e4eac08..bddde6711 100644
--- a/web/src/components/ui/calendar.tsx
+++ b/web/src/components/ui/calendar.tsx
@@ -1,23 +1,43 @@
-import * as React from "react";
+import { useState, useEffect } from "react";
import { ChevronLeft, ChevronRight } from "lucide-react";
import { DayPicker } from "react-day-picker";
-import { enUS, Locale, zhCN } from "date-fns/locale";
+import { Locale, enUS } from "date-fns/locale";
import { cn } from "@/lib/utils";
import { buttonVariants } from "@/components/ui/button";
import i18n from "@/utils/i18n";
export type CalendarProps = React.ComponentProps;
-
-let locale: Locale;
-switch(i18n.language) {
- case "zh-CN":
- locale = zhCN;
- break;
- default:
- locale = enUS;
- break;
-}
+// Map of locale codes to dynamic import functions
+const localeMap: Record Promise> = {
+ "zh-CN": () => import("date-fns/locale/zh-CN").then((module) => module.zhCN),
+ es: () => import("date-fns/locale/es").then((module) => module.es),
+ hi: () => import("date-fns/locale/hi").then((module) => module.hi),
+ fr: () => import("date-fns/locale/fr").then((module) => module.fr),
+ ar: () => import("date-fns/locale/ar").then((module) => module.ar),
+ pt: () => import("date-fns/locale/pt").then((module) => module.pt),
+ ru: () => import("date-fns/locale/ru").then((module) => module.ru),
+ de: () => import("date-fns/locale/de").then((module) => module.de),
+ ja: () => import("date-fns/locale/ja").then((module) => module.ja),
+ tr: () => import("date-fns/locale/tr").then((module) => module.tr),
+ it: () => import("date-fns/locale/it").then((module) => module.it),
+ nl: () => import("date-fns/locale/nl").then((module) => module.nl),
+ sv: () => import("date-fns/locale/sv").then((module) => module.sv),
+ cs: () => import("date-fns/locale/cs").then((module) => module.cs),
+ nb: () => import("date-fns/locale/nb").then((module) => module.nb),
+ ko: () => import("date-fns/locale/ko").then((module) => module.ko),
+ vi: () => import("date-fns/locale/vi").then((module) => module.vi),
+ fa: () => import("date-fns/locale/fa-IR").then((module) => module.faIR),
+ pl: () => import("date-fns/locale/pl").then((module) => module.pl),
+ uk: () => import("date-fns/locale/uk").then((module) => module.uk),
+ he: () => import("date-fns/locale/he").then((module) => module.he),
+ el: () => import("date-fns/locale/el").then((module) => module.el),
+ ro: () => import("date-fns/locale/ro").then((module) => module.ro),
+ hu: () => import("date-fns/locale/hu").then((module) => module.hu),
+ fi: () => import("date-fns/locale/fi").then((module) => module.fi),
+ da: () => import("date-fns/locale/da").then((module) => module.da),
+ sk: () => import("date-fns/locale/sk").then((module) => module.sk),
+};
function Calendar({
className,
@@ -25,6 +45,26 @@ function Calendar({
showOutsideDays = true,
...props
}: CalendarProps) {
+ const [locale, setLocale] = useState(enUS);
+
+ useEffect(() => {
+ const loadLocale = async () => {
+ if (i18n.language === "en") {
+ setLocale(enUS);
+ return;
+ }
+
+ const localeLoader = localeMap[i18n.language];
+ if (localeLoader) {
+ const loadedLocale = await localeLoader();
+ setLocale(loadedLocale);
+ } else {
+ setLocale(enUS);
+ }
+ };
+ loadLocale();
+ }, [i18n.language]);
+
return (