piral-translate
Version:
Plugin for providing translated messages in Piral.
38 lines (33 loc) • 995 B
text/typescript
import { useEffect, useState } from 'react';
import { useActions, useGlobalState } from 'piral-core';
import { LanguageLoader } from './types';
export function useDynamicLanguage(
defaultSelected: string,
load: LanguageLoader,
): [string, (language: string) => void] {
const [selected, setSelected] = useState(defaultSelected);
const { selectLanguage, setTranslations, getTranslations } = useActions();
useEffect(() => {
let active = true;
const current = getTranslations(selected);
selectLanguage(undefined);
load(selected, current).then(
(result) => {
if (active) {
setTranslations(selected, result);
selectLanguage(selected);
}
},
(err) => console.error(err),
);
return () => {
active = false;
};
}, [selected]);
return [selected, setSelected];
}
export function useTranslate() {
const { translate } = useActions();
useGlobalState((m) => m.language.selected);
return translate;
}