Improve MineGeo interface and functionality

This commit is contained in:
2026-10-06 19:24:41 +05:00
parent 7404f1dc1c
commit 233e4d57f0
67 changed files with 3053 additions and 643 deletions

View File

@@ -0,0 +1,45 @@
"use client";
import { createContext, useContext, useMemo } from "react";
import {
localeTag,
translator,
type Locale,
type LanguagePreference,
} from "@/shared/i18n";
type LanguageContext = {
locale: Locale;
preference: LanguagePreference;
detectedLocale: Locale;
};
const I18nContext = createContext<LanguageContext>({
locale: "en",
preference: "auto",
detectedLocale: "en",
});
export function I18nProvider({
children,
...language
}: LanguageContext & { children: React.ReactNode }) {
const value = useMemo(
() => language,
[language.locale, language.preference, language.detectedLocale],
);
return <I18nContext.Provider value={value}>{children}</I18nContext.Provider>;
}
export function useI18n() {
const language = useContext(I18nContext);
return useMemo(
() => ({
...language,
t: translator(language.locale),
formatNumber: (value: number) =>
value.toLocaleString(localeTag(language.locale)),
formatDate: (value: string) =>
new Date(value).toLocaleDateString(localeTag(language.locale)),
}),
[language],
);
}