import {useMemo} from 'react' import {defineMessage} from '@lingui/macro' import {useTerminologyPreference} from '#/state/preferences' export type TerminologyKey = | 'post' | 'posts' | 'repost' | 'reposts' | 'reposted' | 'reposting' const terminologyMap = { skeet: { post: defineMessage({message: 'skeet'}), posts: defineMessage({message: 'skeets'}), repost: defineMessage({message: 'reskeet'}), reposts: defineMessage({message: 'reskeets'}), reposted: defineMessage({message: 'reskeeted'}), reposting: defineMessage({message: 'reskeeting'}), }, post: { post: defineMessage({message: 'post'}), posts: defineMessage({message: 'posts'}), repost: defineMessage({message: 'repost'}), reposts: defineMessage({message: 'reposts'}), reposted: defineMessage({message: 'reposted'}), reposting: defineMessage({message: 'reposting'}), }, spell: { post: defineMessage({message: 'spell'}), posts: defineMessage({message: 'spells'}), repost: defineMessage({message: 'respell'}), reposts: defineMessage({message: 'respells'}), reposted: defineMessage({message: 'respelled'}), reposting: defineMessage({message: 'respelling'}), }, } /** * Hook to get the correct terminology based on user preference * @returns An object with all terminology variants */ export function useTerminology() { const preference = useTerminologyPreference() return useMemo(() => { const selectedTerminology = preference || 'skeet' return terminologyMap[selectedTerminology] }, [preference]) } /** * Hook to get a specific terminology term * @param key - The terminology key to retrieve * @returns The localized terminology message */ export function useTerm(key: TerminologyKey) { const terminology = useTerminology() return terminology[key] }