Migrate to vite & new structure

Signed-off-by: Bryan Frimin <bryan@getprobo.com>
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
This commit is contained in:
Jonathan
2025-05-19 20:13:50 +02:00
committed by Sacha Al Himdani
parent db9e5f32ac
commit a2d1310780
244 changed files with 9153 additions and 3096 deletions

View File

@@ -0,0 +1,60 @@
import {
createContext,
PropsWithChildren,
useCallback,
useContext,
useEffect,
useState,
} from "react";
const defaultValue = {
lang: "en" as "en" | "fr",
translations: {} as Record<string, string>,
translate: (s: string) => s,
};
type Context = typeof defaultValue;
const TranslatorContext = createContext(defaultValue);
type Props = {
lang: "en" | "fr";
loader: (lang: string) => Promise<Record<string, string>>;
};
export function TranslatorProvider({
lang,
loader,
children,
}: PropsWithChildren<Props>) {
const [translations, setTranslations] = useState(
{} as Record<string, string>,
);
const translate = useCallback<Context["translate"]>(
(s) => {
return translations[s] ? translations[s] : s;
},
[translations],
);
useEffect(() => {
loader(lang).then(setTranslations);
}, [lang]);
return (
<TranslatorContext.Provider
value={{ lang, translations, translate }}
>
{children}
</TranslatorContext.Provider>
);
}
export function useTranslate() {
const { translate, lang } =
useContext(TranslatorContext);
return {
lang,
__: translate,
};
}

View File

@@ -0,0 +1,19 @@
{
"name": "@probo/i18n",
"version": "1.0.0",
"description": "",
"main": "./TranslatorProvider.tsx",
"scripts": {},
"peerDependencies": {
"react": "^18.0"
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"@types/react": "^18.2.78"
},
"dependencies": {
"date-fns": "^3.6.0"
}
}