123456789101112131415161718192021222324252627282930 |
- import { Semaphore } from 'async-mutex';
- import type { LocaleData } from './global_locale';
- import { isLocaleLoaded, setLocale } from './global_locale';
- const localeLoadingSemaphore = new Semaphore(1);
- export async function loadLocale() {
- // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- we want to match empty strings
- const locale = document.querySelector<HTMLElement>('html')?.lang || 'en';
- // We use a Semaphore here so only one thing can try to load the locales at
- // the same time. If one tries to do it while its in progress, it will wait
- // for the initial load to finish before it is resumed (and will see that locale
- // data is already loaded)
- await localeLoadingSemaphore.runExclusive(async () => {
- // if the locale is already set, then do nothing
- if (isLocaleLoaded()) return;
- const localeData = (await import(
- /* webpackMode: "lazy" */
- /* webpackChunkName: "locale/[request]" */
- /* webpackInclude: /\.json$/ */
- /* webpackPreload: true */
- `mastodon/locales/${locale}.json`
- )) as LocaleData['messages'];
- setLocale({ messages: localeData, locale });
- });
- }
|