diff --git a/src/client/sw/sw.ts b/src/client/sw/sw.ts index 6c7ab17852..0a23e51141 100644 --- a/src/client/sw/sw.ts +++ b/src/client/sw/sw.ts @@ -113,7 +113,21 @@ self.addEventListener('message', ev => { //#region Function: (Re)Load i18n instance async function fetchLocale() { - i18n = new I18n(await (await fetch(`/assets/locales/${lang}.${version}.json`)).json()); + //#region localeファイルの読み込み + // Service Workerは何度も起動しそのたびにlocaleを読み込むので、CacheStorageを使う + const localeUrl = `/assets/locales/${lang}.${version}.json`; + let localeRes = await caches.match(localeUrl); + + if (!localeRes) { + localeRes = await fetch(localeUrl); + const clone = localeRes?.clone() + if (!clone?.clone().ok) return; + + caches.open(cacheName).then(cache => cache.put(localeUrl, clone)); + } + + i18n = new I18n(await localeRes.json()); + //#endregion //#region i18nをきちんと読み込んだ後にやりたい処理 for (const { type, body } of pushesPool) {