Co-authored-by: tobi <tobi.smethurst@protonmail.com> Reviewed-on: https://codeberg.org/superseriousbusiness/masto-fe-standalone/pulls/88 Co-authored-by: Zoë Bijl <moiety@noreply.codeberg.org> Co-committed-by: Zoë Bijl <moiety@noreply.codeberg.org>
33 lines
1.1 KiB
TypeScript
33 lines
1.1 KiB
TypeScript
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() {
|
|
|
|
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: "locales/vanilla/[request]" */
|
|
/* webpackInclude: /\.json$/ */
|
|
/* webpackPreload: true */
|
|
`mastodon/locales/${locale}.json`,
|
|
)) as LocaleData["messages"];
|
|
|
|
setLocale({ messages: localeData, locale });
|
|
});
|
|
}
|