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