bigbuffet-rw/app/soapbox/hooks/useLocale.ts
2022-12-23 17:34:14 -06:00

39 lines
967 B
TypeScript

import MESSAGES from 'soapbox/locales/messages';
import { useSettings } from './useSettings';
import type { CSSProperties } from 'react';
/** Locales which should be presented in right-to-left. */
const RTL_LOCALES = ['ar', 'ckb', 'fa', 'he'];
/** Ensure the given locale exists in our codebase */
const validLocale = (locale: string): boolean => Object.keys(MESSAGES).includes(locale);
interface UseLocaleResult {
locale: string
direction: CSSProperties['direction']
}
/** Get valid locale from settings. */
const useLocale = (fallback = 'en'): UseLocaleResult => {
const settings = useSettings();
const userLocale = settings.get('locale') as unknown;
const locale =
(typeof userLocale === 'string' && validLocale(userLocale))
? userLocale
: fallback;
const direction: CSSProperties['direction'] =
RTL_LOCALES.includes(locale)
? 'rtl'
: 'ltr';
return {
locale,
direction,
};
};
export { useLocale };