frontend/hooks/useLocale.ts (view raw)
1import {Enum_Userspermissionsuser_Lang as SupportedLocales} from '../generated/graphql';
2import {useRouter} from 'next/router';
3import moment from 'moment';
4
5const useLocale = (): {
6 locale: SupportedLocales;
7 changeLocale: (locale: SupportedLocales) => void;
8} => {
9 const {pathname, query, asPath, push, locale} = useRouter();
10
11 const changeLocale = (newLocale: SupportedLocales) => {
12 moment.locale(newLocale);
13 if (typeof document !== 'undefined') {
14 document.cookie = `NEXT_LOCALE=${newLocale}; max-age=31536000; path=/`;
15 }
16 push({pathname, query}, asPath, {locale: newLocale});
17 };
18
19 if (SupportedLocales[locale]) {
20 return {locale: SupportedLocales[locale], changeLocale};
21 }
22
23 const defaultLocale = SupportedLocales['en'];
24 changeLocale(defaultLocale);
25 return {locale: defaultLocale, changeLocale};
26};
27
28export default useLocale;