import memoizeOne from 'memoize-one' import { defaultLocale } from './locale' // IE11 does not have navigator.language interface NavigatorCompatible extends Navigator { userLanguage?: string } const getUserLocaleUnmemoized = (): string => { const navigator = window.navigator as NavigatorCompatible if (navigator) { if (navigator.language && typeof navigator.language === 'string') { return navigator.language } // IE11 if (navigator.userLanguage && typeof navigator.userLanguage === 'string') { return navigator.userLanguage } } return defaultLocale } export const getUserLocale = memoizeOne(getUserLocaleUnmemoized) const getUserLanguageCodeUnmemoized = (): string => { const locale = getUserLocale() const [languageCode] = locale.split('-') return languageCode } export const getUserLanguageCode = memoizeOne(getUserLanguageCodeUnmemoized) const getTimezoneUnmemoized = () => Intl.DateTimeFormat().resolvedOptions().timeZone export const getTimezone = memoizeOne(getTimezoneUnmemoized)