diff options
| author | ivarlovlie <git@ivarlovlie.no> | 2023-02-11 23:37:12 +0100 |
|---|---|---|
| committer | ivarlovlie <git@ivarlovlie.no> | 2023-02-11 23:37:12 +0100 |
| commit | 9b2c63d92ff77ebce0f90a7be05437504422bf45 (patch) | |
| tree | 682447cde9d3eed555973ff1aff369b4443da07f /src/hooks.server.ts | |
| parent | 23ab0a24ba82004fa449491b4e08698a1de9e6a0 (diff) | |
| download | auroraklinikken.no-9b2c63d92ff77ebce0f90a7be05437504422bf45.tar.xz auroraklinikken.no-9b2c63d92ff77ebce0f90a7be05437504422bf45.zip | |
feat: Render localized content from sanity
Diffstat (limited to 'src/hooks.server.ts')
| -rw-r--r-- | src/hooks.server.ts | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/src/hooks.server.ts b/src/hooks.server.ts new file mode 100644 index 0000000..ddd9342 --- /dev/null +++ b/src/hooks.server.ts @@ -0,0 +1,43 @@ +import { detectLocale, i18n, isLocale } from '$i18n/i18n-util' +import { loadAllLocales } from '$i18n/i18n-util.sync' +import type { Handle, RequestEvent } from '@sveltejs/kit' +import { initAcceptLanguageHeaderDetector } from 'typesafe-i18n/detectors' + +loadAllLocales() +const L = i18n() + +export const handle: Handle = async ({ event, resolve }) => { + // read language slug + const [, lang] = event.url.pathname.split('/') + + // redirect to base locale if no locale slug was found + if (!lang) { + const locale = getPreferredLocale(event) + + return new Response(null, { + status: 302, + headers: { Location: `/${locale}` }, + }) + } + + // if slug is not a locale, use base locale (e.g. api endpoints) + const locale = isLocale(lang) ? (lang as Locales) : getPreferredLocale(event) + const LL = L[locale] + + // bind locale and translation functions to current request + event.locals.locale = locale + event.locals.LL = LL + + console.info(LL.log({ fileName: 'hooks.server.ts' })) + + // replace html lang attribute with correct language + return resolve(event, { transformPageChunk: ({ html }) => html.replace('%lang%', locale) }) +} + +const getPreferredLocale = ({ request }: RequestEvent) => { + // detect the preferred language the user has configured in his browser + // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Language + const acceptLanguageDetector = initAcceptLanguageHeaderDetector(request) + + return detectLocale(acceptLanguageDetector) +}
\ No newline at end of file |
