소스 검색

feat: create useLocale hook to get user locale

Nicolas Meienberger 2 년 전
부모
커밋
cc772c5061
1개의 변경된 파일29개의 추가작업 그리고 0개의 파일을 삭제
  1. 29 0
      src/client/hooks/useLocale.ts

+ 29 - 0
src/client/hooks/useLocale.ts

@@ -0,0 +1,29 @@
+import { useRouter } from 'next/router';
+import { parseCookies, setCookie } from 'nookies';
+import { trpc } from '@/utils/trpc';
+import { Locale, getLocaleFromString } from '@/shared/internationalization/locales';
+
+export const useLocale = () => {
+  const router = useRouter();
+  const cookies = parseCookies();
+  const me = trpc.auth.me.useQuery();
+  const changeUserLocale = trpc.auth.changeLocale.useMutation();
+  const browserLocale = typeof window !== 'undefined' ? window.navigator.language : undefined;
+
+  const locale = me.data?.locale || cookies.locale || browserLocale || 'en';
+
+  const changeLocale = async (l: Locale) => {
+    if (me.data) {
+      await changeUserLocale.mutateAsync({ locale: l });
+    }
+
+    setCookie(null, 'locale', l, {
+      maxAge: 30 * 24 * 60 * 60,
+      path: '/',
+    });
+
+    router.reload();
+  };
+
+  return { locale: getLocaleFromString(locale), changeLocale };
+};