forked from
jollywhoppers.com/witchsky.app
Bluesky app fork with some witchin' additions 馃挮
1// Don't remove -force from these because detection is VERY slow on low-end Android.
2// https://github.com/formatjs/formatjs/issues/4463#issuecomment-2176070577
3import '@formatjs/intl-locale/polyfill-force'
4import '@formatjs/intl-pluralrules/polyfill-force'
5import '@formatjs/intl-numberformat/polyfill-force'
6import '@formatjs/intl-pluralrules/locale-data/en'
7import '@formatjs/intl-numberformat/locale-data/en'
8
9import {useEffect} from 'react'
10import {i18n} from '@lingui/core'
11
12import {sanitizeAppLanguageSetting} from '#/locale/helpers'
13import {AppLanguage} from '#/locale/languages'
14import {messages as messagesAn} from '#/locale/locales/an/messages'
15import {messages as messagesAst} from '#/locale/locales/ast/messages'
16import {messages as messagesCa} from '#/locale/locales/ca/messages'
17import {messages as messagesCy} from '#/locale/locales/cy/messages'
18import {messages as messagesDa} from '#/locale/locales/da/messages'
19import {messages as messagesDe} from '#/locale/locales/de/messages'
20import {messages as messagesEl} from '#/locale/locales/el/messages'
21import {messages as messagesEn} from '#/locale/locales/en/messages'
22import {messages as messagesEn_GB} from '#/locale/locales/en-GB/messages'
23import {messages as messagesEo} from '#/locale/locales/eo/messages'
24import {messages as messagesEs} from '#/locale/locales/es/messages'
25import {messages as messagesEu} from '#/locale/locales/eu/messages'
26import {messages as messagesFi} from '#/locale/locales/fi/messages'
27import {messages as messagesFr} from '#/locale/locales/fr/messages'
28import {messages as messagesFy} from '#/locale/locales/fy/messages'
29import {messages as messagesGa} from '#/locale/locales/ga/messages'
30import {messages as messagesGd} from '#/locale/locales/gd/messages'
31import {messages as messagesGl} from '#/locale/locales/gl/messages'
32import {messages as messagesHi} from '#/locale/locales/hi/messages'
33import {messages as messagesHu} from '#/locale/locales/hu/messages'
34import {messages as messagesIa} from '#/locale/locales/ia/messages'
35import {messages as messagesId} from '#/locale/locales/id/messages'
36import {messages as messagesIt} from '#/locale/locales/it/messages'
37import {messages as messagesJa} from '#/locale/locales/ja/messages'
38import {messages as messagesKm} from '#/locale/locales/km/messages'
39import {messages as messagesKo} from '#/locale/locales/ko/messages'
40import {messages as messagesNe} from '#/locale/locales/ne/messages'
41import {messages as messagesNl} from '#/locale/locales/nl/messages'
42import {messages as messagesPl} from '#/locale/locales/pl/messages'
43import {messages as messagesPt_BR} from '#/locale/locales/pt-BR/messages'
44import {messages as messagesPt_PT} from '#/locale/locales/pt-PT/messages'
45import {messages as messagesRo} from '#/locale/locales/ro/messages'
46import {messages as messagesRu} from '#/locale/locales/ru/messages'
47import {messages as messagesSv} from '#/locale/locales/sv/messages'
48import {messages as messagesTh} from '#/locale/locales/th/messages'
49import {messages as messagesTr} from '#/locale/locales/tr/messages'
50import {messages as messagesUk} from '#/locale/locales/uk/messages'
51import {messages as messagesVi} from '#/locale/locales/vi/messages'
52import {messages as messagesZh_CN} from '#/locale/locales/zh-CN/messages'
53import {messages as messagesZh_HK} from '#/locale/locales/zh-HK/messages'
54import {messages as messagesZh_TW} from '#/locale/locales/zh-TW/messages'
55import {useLanguagePrefs} from '#/state/preferences'
56
57/**
58 * We do a dynamic import of just the catalog that we need
59 */
60export async function dynamicActivate(locale: AppLanguage) {
61 switch (locale) {
62 case AppLanguage.an: {
63 i18n.loadAndActivate({locale, messages: messagesAn})
64 await Promise.all([
65 import('@formatjs/intl-pluralrules/locale-data/an'),
66 import('@formatjs/intl-numberformat/locale-data/es'),
67 ])
68 break
69 }
70 case AppLanguage.ast: {
71 i18n.loadAndActivate({locale, messages: messagesAst})
72 await Promise.all([
73 import('@formatjs/intl-pluralrules/locale-data/ast'),
74 import('@formatjs/intl-numberformat/locale-data/ast'),
75 ])
76 break
77 }
78 case AppLanguage.ca: {
79 i18n.loadAndActivate({locale, messages: messagesCa})
80 await Promise.all([
81 import('@formatjs/intl-pluralrules/locale-data/ca'),
82 import('@formatjs/intl-numberformat/locale-data/ca'),
83 ])
84 break
85 }
86 case AppLanguage.cy: {
87 i18n.loadAndActivate({locale, messages: messagesCy})
88 await Promise.all([
89 import('@formatjs/intl-pluralrules/locale-data/cy'),
90 import('@formatjs/intl-numberformat/locale-data/cy'),
91 ])
92 break
93 }
94 case AppLanguage.da: {
95 i18n.loadAndActivate({locale, messages: messagesDa})
96 await Promise.all([
97 import('@formatjs/intl-pluralrules/locale-data/da'),
98 import('@formatjs/intl-numberformat/locale-data/da'),
99 ])
100 break
101 }
102 case AppLanguage.de: {
103 i18n.loadAndActivate({locale, messages: messagesDe})
104 await Promise.all([
105 import('@formatjs/intl-pluralrules/locale-data/de'),
106 import('@formatjs/intl-numberformat/locale-data/de'),
107 ])
108 break
109 }
110 case AppLanguage.el: {
111 i18n.loadAndActivate({locale, messages: messagesEl})
112 await Promise.all([
113 import('@formatjs/intl-pluralrules/locale-data/el'),
114 import('@formatjs/intl-numberformat/locale-data/el'),
115 ])
116 break
117 }
118 case AppLanguage.en_GB: {
119 i18n.loadAndActivate({locale, messages: messagesEn_GB})
120 await Promise.all([
121 import('@formatjs/intl-pluralrules/locale-data/en'),
122 import('@formatjs/intl-numberformat/locale-data/en-GB'),
123 ])
124 break
125 }
126 case AppLanguage.eo: {
127 i18n.loadAndActivate({locale, messages: messagesEo})
128 await Promise.all([
129 import('@formatjs/intl-pluralrules/locale-data/eo'),
130 import('@formatjs/intl-numberformat/locale-data/eo'),
131 ])
132 break
133 }
134 case AppLanguage.es: {
135 i18n.loadAndActivate({locale, messages: messagesEs})
136 await Promise.all([
137 import('@formatjs/intl-pluralrules/locale-data/es'),
138 import('@formatjs/intl-numberformat/locale-data/es'),
139 ])
140 break
141 }
142 case AppLanguage.eu: {
143 i18n.loadAndActivate({locale, messages: messagesEu})
144 await Promise.all([
145 import('@formatjs/intl-pluralrules/locale-data/eu'),
146 import('@formatjs/intl-numberformat/locale-data/eu'),
147 ])
148 break
149 }
150 case AppLanguage.fi: {
151 i18n.loadAndActivate({locale, messages: messagesFi})
152 await Promise.all([
153 import('@formatjs/intl-pluralrules/locale-data/fi'),
154 import('@formatjs/intl-numberformat/locale-data/fi'),
155 ])
156 break
157 }
158 case AppLanguage.fr: {
159 i18n.loadAndActivate({locale, messages: messagesFr})
160 await Promise.all([
161 import('@formatjs/intl-pluralrules/locale-data/fr'),
162 import('@formatjs/intl-numberformat/locale-data/fr'),
163 ])
164 break
165 }
166 case AppLanguage.fy: {
167 i18n.loadAndActivate({locale, messages: messagesFy})
168 await Promise.all([
169 import('@formatjs/intl-pluralrules/locale-data/fy'),
170 import('@formatjs/intl-numberformat/locale-data/fy'),
171 ])
172 break
173 }
174 case AppLanguage.ga: {
175 i18n.loadAndActivate({locale, messages: messagesGa})
176 await Promise.all([
177 import('@formatjs/intl-pluralrules/locale-data/ga'),
178 import('@formatjs/intl-numberformat/locale-data/ga'),
179 ])
180 break
181 }
182 case AppLanguage.gd: {
183 i18n.loadAndActivate({locale, messages: messagesGd})
184 await Promise.all([
185 import('@formatjs/intl-pluralrules/locale-data/gd'),
186 import('@formatjs/intl-numberformat/locale-data/gd'),
187 ])
188 break
189 }
190 case AppLanguage.gl: {
191 i18n.loadAndActivate({locale, messages: messagesGl})
192 await Promise.all([
193 import('@formatjs/intl-pluralrules/locale-data/gl'),
194 import('@formatjs/intl-numberformat/locale-data/gl'),
195 ])
196 break
197 }
198 case AppLanguage.hi: {
199 i18n.loadAndActivate({locale, messages: messagesHi})
200 await Promise.all([
201 import('@formatjs/intl-pluralrules/locale-data/hi'),
202 import('@formatjs/intl-numberformat/locale-data/hi'),
203 ])
204 break
205 }
206 case AppLanguage.hu: {
207 i18n.loadAndActivate({locale, messages: messagesHu})
208 await Promise.all([
209 import('@formatjs/intl-pluralrules/locale-data/hu'),
210 import('@formatjs/intl-numberformat/locale-data/hu'),
211 ])
212 break
213 }
214 case AppLanguage.ia: {
215 i18n.loadAndActivate({locale, messages: messagesIa})
216 await Promise.all([
217 import('@formatjs/intl-pluralrules/locale-data/ia'),
218 import('@formatjs/intl-numberformat/locale-data/ia'),
219 ])
220 break
221 }
222 case AppLanguage.id: {
223 i18n.loadAndActivate({locale, messages: messagesId})
224 await Promise.all([
225 import('@formatjs/intl-pluralrules/locale-data/id'),
226 import('@formatjs/intl-numberformat/locale-data/id'),
227 ])
228 break
229 }
230 case AppLanguage.it: {
231 i18n.loadAndActivate({locale, messages: messagesIt})
232 await Promise.all([
233 import('@formatjs/intl-pluralrules/locale-data/it'),
234 import('@formatjs/intl-numberformat/locale-data/it'),
235 ])
236 break
237 }
238 case AppLanguage.ja: {
239 i18n.loadAndActivate({locale, messages: messagesJa})
240 await Promise.all([
241 import('@formatjs/intl-pluralrules/locale-data/ja'),
242 import('@formatjs/intl-numberformat/locale-data/ja'),
243 ])
244 break
245 }
246 case AppLanguage.km: {
247 i18n.loadAndActivate({locale, messages: messagesKm})
248 await Promise.all([
249 import('@formatjs/intl-pluralrules/locale-data/km'),
250 import('@formatjs/intl-numberformat/locale-data/km'),
251 ])
252 break
253 }
254 case AppLanguage.ko: {
255 i18n.loadAndActivate({locale, messages: messagesKo})
256 await Promise.all([
257 import('@formatjs/intl-pluralrules/locale-data/ko'),
258 import('@formatjs/intl-numberformat/locale-data/ko'),
259 ])
260 break
261 }
262 case AppLanguage.ne: {
263 i18n.loadAndActivate({locale, messages: messagesNe})
264 break
265 }
266 case AppLanguage.nl: {
267 i18n.loadAndActivate({locale, messages: messagesNl})
268 await Promise.all([
269 import('@formatjs/intl-pluralrules/locale-data/nl'),
270 import('@formatjs/intl-numberformat/locale-data/nl'),
271 ])
272 break
273 }
274 case AppLanguage.pl: {
275 i18n.loadAndActivate({locale, messages: messagesPl})
276 await Promise.all([
277 import('@formatjs/intl-pluralrules/locale-data/pl'),
278 import('@formatjs/intl-numberformat/locale-data/pl'),
279 ])
280 break
281 }
282 case AppLanguage.pt_BR: {
283 i18n.loadAndActivate({locale, messages: messagesPt_BR})
284 await Promise.all([
285 import('@formatjs/intl-pluralrules/locale-data/pt'),
286 import('@formatjs/intl-numberformat/locale-data/pt'),
287 ])
288 break
289 }
290 case AppLanguage.pt_PT: {
291 i18n.loadAndActivate({locale, messages: messagesPt_PT})
292 await Promise.all([
293 import('@formatjs/intl-pluralrules/locale-data/pt-PT'),
294 import('@formatjs/intl-numberformat/locale-data/pt-PT'),
295 ])
296 break
297 }
298 case AppLanguage.ro: {
299 i18n.loadAndActivate({locale, messages: messagesRo})
300 await Promise.all([
301 import('@formatjs/intl-pluralrules/locale-data/ro'),
302 import('@formatjs/intl-numberformat/locale-data/ro'),
303 ])
304 break
305 }
306 case AppLanguage.ru: {
307 i18n.loadAndActivate({locale, messages: messagesRu})
308 await Promise.all([
309 import('@formatjs/intl-pluralrules/locale-data/ru'),
310 import('@formatjs/intl-numberformat/locale-data/ru'),
311 ])
312 break
313 }
314 case AppLanguage.sv: {
315 i18n.loadAndActivate({locale, messages: messagesSv})
316 await Promise.all([
317 import('@formatjs/intl-pluralrules/locale-data/sv'),
318 import('@formatjs/intl-numberformat/locale-data/sv'),
319 ])
320 break
321 }
322 case AppLanguage.th: {
323 i18n.loadAndActivate({locale, messages: messagesTh})
324 await Promise.all([
325 import('@formatjs/intl-pluralrules/locale-data/th'),
326 import('@formatjs/intl-numberformat/locale-data/th'),
327 ])
328 break
329 }
330 case AppLanguage.tr: {
331 i18n.loadAndActivate({locale, messages: messagesTr})
332 await Promise.all([
333 import('@formatjs/intl-pluralrules/locale-data/tr'),
334 import('@formatjs/intl-numberformat/locale-data/tr'),
335 ])
336 break
337 }
338 case AppLanguage.uk: {
339 i18n.loadAndActivate({locale, messages: messagesUk})
340 await Promise.all([
341 import('@formatjs/intl-pluralrules/locale-data/uk'),
342 import('@formatjs/intl-numberformat/locale-data/uk'),
343 ])
344 break
345 }
346 case AppLanguage.vi: {
347 i18n.loadAndActivate({locale, messages: messagesVi})
348 await Promise.all([
349 import('@formatjs/intl-pluralrules/locale-data/vi'),
350 import('@formatjs/intl-numberformat/locale-data/vi'),
351 ])
352 break
353 }
354 case AppLanguage.zh_CN: {
355 i18n.loadAndActivate({locale, messages: messagesZh_CN})
356 await Promise.all([
357 import('@formatjs/intl-pluralrules/locale-data/zh'),
358 import('@formatjs/intl-numberformat/locale-data/zh'),
359 ])
360 break
361 }
362 case AppLanguage.zh_HK: {
363 i18n.loadAndActivate({locale, messages: messagesZh_HK})
364 await Promise.all([
365 import('@formatjs/intl-pluralrules/locale-data/zh'),
366 import('@formatjs/intl-numberformat/locale-data/zh'),
367 ])
368 break
369 }
370 case AppLanguage.zh_TW: {
371 i18n.loadAndActivate({locale, messages: messagesZh_TW})
372 await Promise.all([
373 import('@formatjs/intl-pluralrules/locale-data/zh'),
374 import('@formatjs/intl-numberformat/locale-data/zh'),
375 ])
376 break
377 }
378 default: {
379 i18n.loadAndActivate({locale, messages: messagesEn})
380 break
381 }
382 }
383}
384
385export function useLocaleLanguage() {
386 const {appLanguage} = useLanguagePrefs()
387 useEffect(() => {
388 dynamicActivate(sanitizeAppLanguageSetting(appLanguage))
389 }, [appLanguage])
390}