forked from cms/tibi-svelte-starter
39 lines
1.1 KiB
TypeScript
39 lines
1.1 KiB
TypeScript
import { render } from "svelte/server"
|
|
import { addMessages, init, locale } from "svelte-i18n"
|
|
import { DEFAULT_LANGUAGE, extractLanguageFromPath } from "./lib/i18n"
|
|
import deLocale from "./lib/i18n/locales/de.json"
|
|
import enLocale from "./lib/i18n/locales/en.json"
|
|
import App from "./App.svelte"
|
|
|
|
// SSR: load messages synchronously (Babel transforms import → require)
|
|
addMessages("de", deLocale)
|
|
addMessages("en", enLocale)
|
|
|
|
/**
|
|
* SSR render wrapper for Svelte 5.
|
|
*
|
|
* tibi-server calls `app.default.render({ url })`.
|
|
* Svelte 5 no longer provides a `.render()` method on components —
|
|
* instead `render()` must be imported from `svelte/server`.
|
|
*
|
|
* This wrapper keeps the hook-side API compatible while delegating
|
|
* to the Svelte 5 render function internally.
|
|
*/
|
|
export default {
|
|
render({ url }: { url: string }) {
|
|
const lang = extractLanguageFromPath(url) || DEFAULT_LANGUAGE
|
|
|
|
init({
|
|
fallbackLocale: DEFAULT_LANGUAGE,
|
|
initialLocale: lang,
|
|
})
|
|
locale.set(lang)
|
|
|
|
const { body, head } = render(App, {
|
|
props: { url },
|
|
})
|
|
|
|
return { html: body, head }
|
|
},
|
|
}
|