mirror of https://git.lenooby09.tech/LeNooby09/social-app.git
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 messagesCa} from '#/locale/locales/ca/messages'
15import {messages as messagesDe} from '#/locale/locales/de/messages'
16import {messages as messagesEn} from '#/locale/locales/en/messages'
17import {messages as messagesEs} from '#/locale/locales/es/messages'
18import {messages as messagesFi} from '#/locale/locales/fi/messages'
19import {messages as messagesFr} from '#/locale/locales/fr/messages'
20import {messages as messagesGa} from '#/locale/locales/ga/messages'
21import {messages as messagesHi} from '#/locale/locales/hi/messages'
22import {messages as messagesId} from '#/locale/locales/id/messages'
23import {messages as messagesIt} from '#/locale/locales/it/messages'
24import {messages as messagesJa} from '#/locale/locales/ja/messages'
25import {messages as messagesKo} from '#/locale/locales/ko/messages'
26import {messages as messagesPt_BR} from '#/locale/locales/pt-BR/messages'
27import {messages as messagesRu} from '#/locale/locales/ru/messages'
28import {messages as messagesTr} from '#/locale/locales/tr/messages'
29import {messages as messagesUk} from '#/locale/locales/uk/messages'
30import {messages as messagesZh_CN} from '#/locale/locales/zh-CN/messages'
31import {messages as messagesZh_TW} from '#/locale/locales/zh-TW/messages'
32import {useLanguagePrefs} from '#/state/preferences'
33
34/**
35 * We do a dynamic import of just the catalog that we need
36 */
37export async function dynamicActivate(locale: AppLanguage) {
38 switch (locale) {
39 case AppLanguage.ca: {
40 i18n.loadAndActivate({locale, messages: messagesCa})
41 await Promise.all([
42 import('@formatjs/intl-pluralrules/locale-data/ca'),
43 import('@formatjs/intl-numberformat/locale-data/ca'),
44 ])
45 break
46 }
47 case AppLanguage.de: {
48 i18n.loadAndActivate({locale, messages: messagesDe})
49 await Promise.all([
50 import('@formatjs/intl-pluralrules/locale-data/de'),
51 import('@formatjs/intl-numberformat/locale-data/de'),
52 ])
53 break
54 }
55 case AppLanguage.es: {
56 i18n.loadAndActivate({locale, messages: messagesEs})
57 await Promise.all([
58 import('@formatjs/intl-pluralrules/locale-data/es'),
59 import('@formatjs/intl-numberformat/locale-data/es'),
60 ])
61 break
62 }
63 case AppLanguage.fi: {
64 i18n.loadAndActivate({locale, messages: messagesFi})
65 await Promise.all([
66 import('@formatjs/intl-pluralrules/locale-data/fi'),
67 import('@formatjs/intl-numberformat/locale-data/fi'),
68 ])
69 break
70 }
71 case AppLanguage.fr: {
72 i18n.loadAndActivate({locale, messages: messagesFr})
73 await Promise.all([
74 import('@formatjs/intl-pluralrules/locale-data/fr'),
75 import('@formatjs/intl-numberformat/locale-data/fr'),
76 ])
77 break
78 }
79 case AppLanguage.ga: {
80 i18n.loadAndActivate({locale, messages: messagesGa})
81 await Promise.all([
82 import('@formatjs/intl-pluralrules/locale-data/ga'),
83 import('@formatjs/intl-numberformat/locale-data/ga'),
84 ])
85 break
86 }
87 case AppLanguage.hi: {
88 i18n.loadAndActivate({locale, messages: messagesHi})
89 await Promise.all([
90 import('@formatjs/intl-pluralrules/locale-data/hi'),
91 import('@formatjs/intl-numberformat/locale-data/hi'),
92 ])
93 break
94 }
95 case AppLanguage.id: {
96 i18n.loadAndActivate({locale, messages: messagesId})
97 await Promise.all([
98 import('@formatjs/intl-pluralrules/locale-data/id'),
99 import('@formatjs/intl-numberformat/locale-data/id'),
100 ])
101 break
102 }
103 case AppLanguage.it: {
104 i18n.loadAndActivate({locale, messages: messagesIt})
105 await Promise.all([
106 import('@formatjs/intl-pluralrules/locale-data/it'),
107 import('@formatjs/intl-numberformat/locale-data/it'),
108 ])
109 break
110 }
111 case AppLanguage.ja: {
112 i18n.loadAndActivate({locale, messages: messagesJa})
113 await Promise.all([
114 import('@formatjs/intl-pluralrules/locale-data/ja'),
115 import('@formatjs/intl-numberformat/locale-data/ja'),
116 ])
117 break
118 }
119 case AppLanguage.ko: {
120 i18n.loadAndActivate({locale, messages: messagesKo})
121 await Promise.all([
122 import('@formatjs/intl-pluralrules/locale-data/ko'),
123 import('@formatjs/intl-numberformat/locale-data/ko'),
124 ])
125 break
126 }
127 case AppLanguage.pt_BR: {
128 i18n.loadAndActivate({locale, messages: messagesPt_BR})
129 await Promise.all([
130 import('@formatjs/intl-pluralrules/locale-data/pt'),
131 import('@formatjs/intl-numberformat/locale-data/pt'),
132 ])
133 break
134 }
135 case AppLanguage.ru: {
136 i18n.loadAndActivate({locale, messages: messagesRu})
137 await Promise.all([
138 import('@formatjs/intl-pluralrules/locale-data/ru'),
139 import('@formatjs/intl-numberformat/locale-data/ru'),
140 ])
141 break
142 }
143 case AppLanguage.tr: {
144 i18n.loadAndActivate({locale, messages: messagesTr})
145 await Promise.all([
146 import('@formatjs/intl-pluralrules/locale-data/tr'),
147 import('@formatjs/intl-numberformat/locale-data/tr'),
148 ])
149 break
150 }
151 case AppLanguage.uk: {
152 i18n.loadAndActivate({locale, messages: messagesUk})
153 await Promise.all([
154 import('@formatjs/intl-pluralrules/locale-data/uk'),
155 import('@formatjs/intl-numberformat/locale-data/uk'),
156 ])
157 break
158 }
159 case AppLanguage.zh_CN: {
160 i18n.loadAndActivate({locale, messages: messagesZh_CN})
161 await Promise.all([
162 import('@formatjs/intl-pluralrules/locale-data/zh'),
163 import('@formatjs/intl-numberformat/locale-data/zh'),
164 ])
165 break
166 }
167 case AppLanguage.zh_TW: {
168 i18n.loadAndActivate({locale, messages: messagesZh_TW})
169 await Promise.all([
170 import('@formatjs/intl-pluralrules/locale-data/zh'),
171 import('@formatjs/intl-numberformat/locale-data/zh'),
172 ])
173 break
174 }
175 default: {
176 i18n.loadAndActivate({locale, messages: messagesEn})
177 break
178 }
179 }
180}
181
182export async function useLocaleLanguage() {
183 const {appLanguage} = useLanguagePrefs()
184 useEffect(() => {
185 dynamicActivate(sanitizeAppLanguageSetting(appLanguage))
186 }, [appLanguage])
187}