forked from
jollywhoppers.com/witchsky.app
Bluesky app fork with some witchin' additions 馃挮
1import {useMemo} from 'react'
2import {defineMessage} from '@lingui/macro'
3
4import {useTerminologyPreference} from '#/state/preferences'
5
6export type TerminologyKey =
7 | 'post'
8 | 'posts'
9 | 'repost'
10 | 'reposts'
11 | 'reposted'
12 | 'reposting'
13
14const terminologyMap = {
15 skeet: {
16 post: defineMessage({message: 'skeet'}),
17 posts: defineMessage({message: 'skeets'}),
18 repost: defineMessage({message: 'reskeet'}),
19 reposts: defineMessage({message: 'reskeets'}),
20 reposted: defineMessage({message: 'reskeeted'}),
21 reposting: defineMessage({message: 'reskeeting'}),
22 },
23 post: {
24 post: defineMessage({message: 'post'}),
25 posts: defineMessage({message: 'posts'}),
26 repost: defineMessage({message: 'repost'}),
27 reposts: defineMessage({message: 'reposts'}),
28 reposted: defineMessage({message: 'reposted'}),
29 reposting: defineMessage({message: 'reposting'}),
30 },
31 spell: {
32 post: defineMessage({message: 'spell'}),
33 posts: defineMessage({message: 'spells'}),
34 repost: defineMessage({message: 'respell'}),
35 reposts: defineMessage({message: 'respells'}),
36 reposted: defineMessage({message: 'respelled'}),
37 reposting: defineMessage({message: 'respelling'}),
38 },
39}
40
41/**
42 * Hook to get the correct terminology based on user preference
43 * @returns An object with all terminology variants
44 */
45export function useTerminology() {
46 const preference = useTerminologyPreference()
47
48 return useMemo(() => {
49 const selectedTerminology = preference || 'skeet'
50 return terminologyMap[selectedTerminology]
51 }, [preference])
52}
53
54/**
55 * Hook to get a specific terminology term
56 * @param key - The terminology key to retrieve
57 * @returns The localized terminology message
58 */
59export function useTerm(key: TerminologyKey) {
60 const terminology = useTerminology()
61 return terminology[key]
62}