Piotoru

prefer lang on start

Jun 20th, 2023 (edited)
300
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import axios from 'axios';
  2. import useSWR from 'swr';
  3. import { DataType } from 'types/global.types';
  4.  
  5. import { usePreferLanguage } from 'helpers/getPreferLanguage';
  6.  
  7. export const useHookSWR = () => {
  8.   const fetcher = (args: string): DataType => axios.get(args).then((res) => res.data);
  9.   const { data } = useSWR(`/languages/${usePreferLanguage()}.json`, fetcher);
  10.  
  11.   return data;
  12. };
  13.  
  14. //CUSTOM HOOK
  15. 'use client';
  16.  
  17. import { useEffect, useState } from 'react';
  18. import { useRouter } from 'next/router';
  19.  
  20. export const usePreferLanguage = () => {
  21.   const { locale, replace, asPath } = useRouter();
  22.  
  23.   let browserLang = typeof window !== 'undefined' && window.navigator.language;
  24.  
  25.   const localst = browserLang && localStorage.getItem('lang');
  26.  
  27.   const languageFistTwo =
  28.     browserLang.toString().length === 2 ? browserLang.toString() : browserLang.toString().substring(0, 2);
  29.  
  30.   const refresh = async (loc: string) => {
  31.     return replace(`${process.env.NEXT_PUBLIC_PAGE}/${loc === 'en' ? '' : `${loc}`}${asPath}`);
  32.   };
  33.  
  34.   const [lang, setLang] = useState(languageFistTwo);
  35.  
  36.   useEffect(() => {
  37.     if (localst === null) {
  38.       switch (languageFistTwo) {
  39.         case 'ja':
  40.           localStorage.setItem('lang', 'jp');
  41.           setLang('jp');
  42.           refresh('jp');
  43.           break;
  44.         case 'pl':
  45.           localStorage.setItem('lang', 'pl');
  46.           setLang('pl');
  47.           refresh('pl');
  48.           break;
  49.         default:
  50.           localStorage.setItem('lang', 'en');
  51.           setLang('en');
  52.           refresh('en');
  53.           break;
  54.       }
  55.     } else if (!!localst && localst !== locale) {
  56.       refresh(localst!);
  57.     } else {
  58.       setLang(locale!);
  59.       localStorage.setItem('lang', locale!);
  60.       refresh(locale!);
  61.     }
  62.   }, [locale]);
  63.  
  64.   return lang;
  65. };
  66.  
Advertisement
Add Comment
Please, Sign In to add comment