Bluesky app fork with some witchin' additions 馃挮 witchsky.app
bluesky fork client
at main 322 lines 8.9 kB view raw
1import {useEffect, useState} from 'react' 2import {i18n, type Messages} from '@lingui/core' 3import defaultLocale from 'date-fns/locale/en-US' 4 5import {sanitizeAppLanguageSetting} from '#/locale/helpers' 6import {AppLanguage} from '#/locale/languages' 7import {applyPostReplacements} from '#/locale/linguiHook' 8import {useLanguagePrefs} from '#/state/preferences' 9 10/** 11 * We do a dynamic import of just the catalog that we need 12 */ 13export async function dynamicActivate(locale: AppLanguage) { 14 let mod: {messages: Messages} 15 let dateLocale: Locale = defaultLocale 16 17 switch (locale) { 18 case AppLanguage.an: { 19 ;[mod, {default: dateLocale}] = await Promise.all([ 20 import(`./locales/an/messages`), 21 import('date-fns/locale/es'), 22 ]) 23 break 24 } 25 case AppLanguage.ast: { 26 ;[mod, {default: dateLocale}] = await Promise.all([ 27 import(`./locales/ast/messages`), 28 import('date-fns/locale/es'), 29 ]) 30 break 31 } 32 case AppLanguage.ca: { 33 ;[mod, {default: dateLocale}] = await Promise.all([ 34 import(`./locales/ca/messages`), 35 import('date-fns/locale/ca'), 36 ]) 37 break 38 } 39 case AppLanguage.cy: { 40 ;[mod, {default: dateLocale}] = await Promise.all([ 41 import(`./locales/cy/messages`), 42 import('date-fns/locale/cy'), 43 ]) 44 break 45 } 46 case AppLanguage.da: { 47 ;[mod, {default: dateLocale}] = await Promise.all([ 48 import(`./locales/da/messages`), 49 import('date-fns/locale/da'), 50 ]) 51 break 52 } 53 case AppLanguage.de: { 54 ;[mod, {default: dateLocale}] = await Promise.all([ 55 import(`./locales/de/messages`), 56 import('date-fns/locale/de'), 57 ]) 58 break 59 } 60 case AppLanguage.el: { 61 mod = await import(`./locales/el/messages`) 62 break 63 } 64 case AppLanguage.en: { 65 mod = await import(`./locales/en/messages`) 66 const messages = applyPostReplacements(mod.messages, locale) 67 mod = {messages} 68 break 69 } 70 case AppLanguage.en_GB: { 71 ;[mod, {default: dateLocale}] = await Promise.all([ 72 import(`./locales/en-GB/messages`), 73 import('date-fns/locale/en-GB'), 74 ]) 75 const messages = applyPostReplacements(mod.messages, locale) 76 mod = {messages} 77 break 78 } 79 case AppLanguage.eo: { 80 ;[mod, {default: dateLocale}] = await Promise.all([ 81 import(`./locales/eo/messages`), 82 import('date-fns/locale/eo'), 83 ]) 84 break 85 } 86 case AppLanguage.es: { 87 ;[mod, {default: dateLocale}] = await Promise.all([ 88 import(`./locales/es/messages`), 89 import('date-fns/locale/es'), 90 ]) 91 break 92 } 93 case AppLanguage.eu: { 94 ;[mod, {default: dateLocale}] = await Promise.all([ 95 import(`./locales/eu/messages`), 96 import('date-fns/locale/eu'), 97 ]) 98 break 99 } 100 case AppLanguage.fi: { 101 ;[mod, {default: dateLocale}] = await Promise.all([ 102 import(`./locales/fi/messages`), 103 import('date-fns/locale/fi'), 104 ]) 105 break 106 } 107 case AppLanguage.fr: { 108 ;[mod, {default: dateLocale}] = await Promise.all([ 109 import(`./locales/fr/messages`), 110 import('date-fns/locale/fr'), 111 ]) 112 break 113 } 114 case AppLanguage.fy: { 115 ;[mod, {default: dateLocale}] = await Promise.all([ 116 import(`./locales/fy/messages`), 117 import('date-fns/locale/fy'), 118 ]) 119 break 120 } 121 case AppLanguage.ga: { 122 mod = await import(`./locales/ga/messages`) 123 break 124 } 125 case AppLanguage.gd: { 126 ;[mod, {default: dateLocale}] = await Promise.all([ 127 import(`./locales/gd/messages`), 128 import('date-fns/locale/gd'), 129 ]) 130 break 131 } 132 case AppLanguage.gl: { 133 ;[mod, {default: dateLocale}] = await Promise.all([ 134 import(`./locales/gl/messages`), 135 import('date-fns/locale/gl'), 136 ]) 137 break 138 } 139 case AppLanguage.hi: { 140 ;[mod, {default: dateLocale}] = await Promise.all([ 141 import(`./locales/hi/messages`), 142 import('date-fns/locale/hi'), 143 ]) 144 break 145 } 146 case AppLanguage.hu: { 147 ;[mod, {default: dateLocale}] = await Promise.all([ 148 import(`./locales/hu/messages`), 149 import('date-fns/locale/hu'), 150 ]) 151 break 152 } 153 case AppLanguage.ia: { 154 mod = await import(`./locales/ia/messages`) 155 break 156 } 157 case AppLanguage.id: { 158 ;[mod, {default: dateLocale}] = await Promise.all([ 159 import(`./locales/id/messages`), 160 import('date-fns/locale/id'), 161 ]) 162 break 163 } 164 case AppLanguage.it: { 165 ;[mod, {default: dateLocale}] = await Promise.all([ 166 import(`./locales/it/messages`), 167 import('date-fns/locale/it'), 168 ]) 169 break 170 } 171 case AppLanguage.ja: { 172 ;[mod, {default: dateLocale}] = await Promise.all([ 173 import(`./locales/ja/messages`), 174 import('date-fns/locale/ja'), 175 ]) 176 break 177 } 178 case AppLanguage.km: { 179 ;[mod, {default: dateLocale}] = await Promise.all([ 180 import(`./locales/km/messages`), 181 import('date-fns/locale/km'), 182 ]) 183 break 184 } 185 case AppLanguage.ko: { 186 ;[mod, {default: dateLocale}] = await Promise.all([ 187 import(`./locales/ko/messages`), 188 import('date-fns/locale/ko'), 189 ]) 190 break 191 } 192 case AppLanguage.ne: { 193 mod = await import(`./locales/ne/messages`) 194 break 195 } 196 case AppLanguage.nl: { 197 ;[mod, {default: dateLocale}] = await Promise.all([ 198 import(`./locales/nl/messages`), 199 import('date-fns/locale/nl'), 200 ]) 201 break 202 } 203 case AppLanguage.pl: { 204 ;[mod, {default: dateLocale}] = await Promise.all([ 205 import(`./locales/pl/messages`), 206 import('date-fns/locale/pl'), 207 ]) 208 break 209 } 210 case AppLanguage.pt_BR: { 211 ;[mod, {default: dateLocale}] = await Promise.all([ 212 import(`./locales/pt-BR/messages`), 213 import('date-fns/locale/pt-BR'), 214 ]) 215 break 216 } 217 case AppLanguage.pt_PT: { 218 ;[mod, {default: dateLocale}] = await Promise.all([ 219 import(`./locales/pt-PT/messages`), 220 import('date-fns/locale/pt'), 221 ]) 222 break 223 } 224 case AppLanguage.ro: { 225 ;[mod, {default: dateLocale}] = await Promise.all([ 226 import(`./locales/ro/messages`), 227 import('date-fns/locale/ro'), 228 ]) 229 break 230 } 231 case AppLanguage.ru: { 232 ;[mod, {default: dateLocale}] = await Promise.all([ 233 import(`./locales/ru/messages`), 234 import('date-fns/locale/ru'), 235 ]) 236 break 237 } 238 case AppLanguage.sv: { 239 ;[mod, {default: dateLocale}] = await Promise.all([ 240 import(`./locales/sv/messages`), 241 import('date-fns/locale/sv'), 242 ]) 243 break 244 } 245 case AppLanguage.th: { 246 ;[mod, {default: dateLocale}] = await Promise.all([ 247 import(`./locales/th/messages`), 248 import('date-fns/locale/th'), 249 ]) 250 break 251 } 252 case AppLanguage.tr: { 253 ;[mod, {default: dateLocale}] = await Promise.all([ 254 import(`./locales/tr/messages`), 255 import('date-fns/locale/tr'), 256 ]) 257 break 258 } 259 case AppLanguage.uk: { 260 ;[mod, {default: dateLocale}] = await Promise.all([ 261 import(`./locales/uk/messages`), 262 import('date-fns/locale/uk'), 263 ]) 264 break 265 } 266 case AppLanguage.vi: { 267 ;[mod, {default: dateLocale}] = await Promise.all([ 268 import(`./locales/vi/messages`), 269 import('date-fns/locale/vi'), 270 ]) 271 break 272 } 273 case AppLanguage.zh_CN: { 274 ;[mod, {default: dateLocale}] = await Promise.all([ 275 import(`./locales/zh-CN/messages`), 276 import('date-fns/locale/zh-CN'), 277 ]) 278 break 279 } 280 case AppLanguage.zh_HK: { 281 ;[mod, {default: dateLocale}] = await Promise.all([ 282 import(`./locales/zh-HK/messages`), 283 import('date-fns/locale/zh-HK'), 284 ]) 285 break 286 } 287 case AppLanguage.zh_TW: { 288 ;[mod, {default: dateLocale}] = await Promise.all([ 289 import(`./locales/zh-TW/messages`), 290 import('date-fns/locale/zh-TW'), 291 ]) 292 break 293 } 294 default: { 295 mod = await import(`./locales/en/messages`) 296 const messages = applyPostReplacements(mod.messages, locale) 297 mod = {messages} 298 break 299 } 300 } 301 302 i18n.load(locale, mod.messages) 303 i18n.activate(locale) 304 305 return dateLocale 306} 307 308export function useLocaleLanguage() { 309 const {appLanguage} = useLanguagePrefs() 310 const [dateLocale, setDateLocale] = useState(defaultLocale) 311 312 useEffect(() => { 313 const sanitizedLanguage = sanitizeAppLanguageSetting(appLanguage) 314 315 document.documentElement.lang = sanitizedLanguage 316 dynamicActivate(sanitizedLanguage).then(locale => { 317 setDateLocale(locale) 318 }) 319 }, [appLanguage]) 320 321 return dateLocale 322}