forked from
jollywhoppers.com/witchsky.app
Bluesky app fork with some witchin' additions 馃挮
1import {useEffect} from 'react'
2import {i18n, type Messages} from '@lingui/core'
3
4import {sanitizeAppLanguageSetting} from '#/locale/helpers'
5import {AppLanguage} from '#/locale/languages'
6import {applySkeetReplacements} from '#/locale/linguiHook'
7import {useLanguagePrefs} from '#/state/preferences'
8
9/**
10 * We do a dynamic import of just the catalog that we need
11 */
12export async function dynamicActivate(locale: AppLanguage) {
13 let mod: {messages: Messages}
14
15 switch (locale) {
16 case AppLanguage.an: {
17 mod = await import(`./locales/an/messages`)
18 break
19 }
20 case AppLanguage.ast: {
21 mod = await import(`./locales/ast/messages`)
22 break
23 }
24 case AppLanguage.ca: {
25 mod = await import(`./locales/ca/messages`)
26 break
27 }
28 case AppLanguage.cy: {
29 mod = await import(`./locales/cy/messages`)
30 break
31 }
32 case AppLanguage.da: {
33 mod = await import(`./locales/da/messages`)
34 break
35 }
36 case AppLanguage.de: {
37 mod = await import(`./locales/de/messages`)
38 break
39 }
40 case AppLanguage.el: {
41 mod = await import(`./locales/el/messages`)
42 break
43 }
44 case AppLanguage.en: {
45 mod = await import(`./locales/en/messages`)
46 const transformedEnMessages = applySkeetReplacements(mod.messages, locale)
47 i18n.load(locale, transformedEnMessages)
48 i18n.activate(locale)
49 break
50 }
51 case AppLanguage.en_GB: {
52 mod = await import(`./locales/en-GB/messages`)
53 const transformedEnGbMessages = applySkeetReplacements(
54 mod.messages,
55 locale,
56 )
57 i18n.load(locale, transformedEnGbMessages)
58 i18n.activate(locale)
59 break
60 }
61 case AppLanguage.eo: {
62 mod = await import(`./locales/eo/messages`)
63 break
64 }
65 case AppLanguage.es: {
66 mod = await import(`./locales/es/messages`)
67 break
68 }
69 case AppLanguage.eu: {
70 mod = await import(`./locales/eu/messages`)
71 break
72 }
73 case AppLanguage.fi: {
74 mod = await import(`./locales/fi/messages`)
75 break
76 }
77 case AppLanguage.fr: {
78 mod = await import(`./locales/fr/messages`)
79 break
80 }
81 case AppLanguage.fy: {
82 mod = await import(`./locales/fy/messages`)
83 break
84 }
85 case AppLanguage.ga: {
86 mod = await import(`./locales/ga/messages`)
87 break
88 }
89 case AppLanguage.gd: {
90 mod = await import(`./locales/gd/messages`)
91 break
92 }
93 case AppLanguage.gl: {
94 mod = await import(`./locales/gl/messages`)
95 break
96 }
97 case AppLanguage.hi: {
98 mod = await import(`./locales/hi/messages`)
99 break
100 }
101 case AppLanguage.hu: {
102 mod = await import(`./locales/hu/messages`)
103 break
104 }
105 case AppLanguage.ia: {
106 mod = await import(`./locales/ia/messages`)
107 break
108 }
109 case AppLanguage.id: {
110 mod = await import(`./locales/id/messages`)
111 break
112 }
113 case AppLanguage.it: {
114 mod = await import(`./locales/it/messages`)
115 break
116 }
117 case AppLanguage.ja: {
118 mod = await import(`./locales/ja/messages`)
119 break
120 }
121 case AppLanguage.km: {
122 mod = await import(`./locales/km/messages`)
123 break
124 }
125 case AppLanguage.ko: {
126 mod = await import(`./locales/ko/messages`)
127 break
128 }
129 case AppLanguage.ne: {
130 mod = await import(`./locales/ne/messages`)
131 break
132 }
133 case AppLanguage.nl: {
134 mod = await import(`./locales/nl/messages`)
135 break
136 }
137 case AppLanguage.pl: {
138 mod = await import(`./locales/pl/messages`)
139 break
140 }
141 case AppLanguage.pt_BR: {
142 mod = await import(`./locales/pt-BR/messages`)
143 break
144 }
145 case AppLanguage.pt_PT: {
146 mod = await import(`./locales/pt-PT/messages`)
147 break
148 }
149 case AppLanguage.ro: {
150 mod = await import(`./locales/ro/messages`)
151 break
152 }
153 case AppLanguage.ru: {
154 mod = await import(`./locales/ru/messages`)
155 break
156 }
157 case AppLanguage.sv: {
158 mod = await import(`./locales/sv/messages`)
159 break
160 }
161 case AppLanguage.th: {
162 mod = await import(`./locales/th/messages`)
163 break
164 }
165 case AppLanguage.tr: {
166 mod = await import(`./locales/tr/messages`)
167 break
168 }
169 case AppLanguage.uk: {
170 mod = await import(`./locales/uk/messages`)
171 break
172 }
173 case AppLanguage.vi: {
174 mod = await import(`./locales/vi/messages`)
175 break
176 }
177 case AppLanguage.zh_CN: {
178 mod = await import(`./locales/zh-CN/messages`)
179 break
180 }
181 case AppLanguage.zh_HK: {
182 mod = await import(`./locales/zh-HK/messages`)
183 break
184 }
185 case AppLanguage.zh_TW: {
186 mod = await import(`./locales/zh-TW/messages`)
187 break
188 }
189 default: {
190 mod = await import(`./locales/en/messages`)
191 const transformedDefaultMessages = applySkeetReplacements(
192 mod.messages,
193 locale,
194 )
195 i18n.load(locale, transformedDefaultMessages)
196 i18n.activate(locale)
197 break
198 }
199 }
200}
201
202export function useLocaleLanguage() {
203 const {appLanguage} = useLanguagePrefs()
204 useEffect(() => {
205 const sanitizedLanguage = sanitizeAppLanguageSetting(appLanguage)
206
207 document.documentElement.lang = sanitizedLanguage
208 dynamicActivate(sanitizedLanguage)
209 }, [appLanguage])
210}