diff --git a/src/lib/components/LanguageSelector.svelte b/src/lib/components/LanguageSelector.svelte index 42822dc..1b4d08f 100644 --- a/src/lib/components/LanguageSelector.svelte +++ b/src/lib/components/LanguageSelector.svelte @@ -9,14 +9,20 @@ let langButton: HTMLButtonElement; let langOptions: HTMLDivElement; + // Faith subroute mappings + const faithSubroutes: Record> = { + en: { gebete: 'prayers', rosenkranz: 'rosary', angelus: 'angelus' }, + de: { prayers: 'gebete', rosary: 'rosenkranz', angelus: 'angelus' } + }; + $effect(() => { // Update current language and path when page changes (reactive to browser navigation) const path = $page.url.pathname; currentPath = path; - if (path.startsWith('/recipes')) { + if (path.startsWith('/recipes') || path.startsWith('/faith')) { languageStore.set('en'); - } else if (path.startsWith('/rezepte')) { + } else if (path.startsWith('/rezepte') || path.startsWith('/glaube')) { languageStore.set('de'); } else if (path === '/') { // On main page, read from localStorage @@ -33,6 +39,24 @@ } } + function convertFaithPath(path: string, targetLang: 'de' | 'en'): string { + // Extract the current base and subroute + const faithMatch = path.match(/^\/(glaube|faith)(\/(.+))?$/); + if (!faithMatch) return path; + + const targetBase = targetLang === 'en' ? 'faith' : 'glaube'; + const subroute = faithMatch[3]; // e.g., "gebete", "rosenkranz", "angelus" + + if (!subroute) { + // Main faith page + return `/${targetBase}`; + } + + // Convert subroute + const convertedSubroute = faithSubroutes[targetLang][subroute] || subroute; + return `/${targetBase}/${convertedSubroute}`; + } + async function switchLanguage(lang: 'de' | 'en') { // Update the shared language store immediately languageStore.set(lang); @@ -51,6 +75,13 @@ return; } + // Handle faith pages + if (path.startsWith('/glaube') || path.startsWith('/faith')) { + const newPath = convertFaithPath(path, lang); + await goto(newPath); + return; + } + // If we have recipe translation data from store, use the correct short names const recipeData = $recipeTranslationStore; if (recipeData) { @@ -76,7 +107,7 @@ } else if (lang === 'de' && path.startsWith('/recipes')) { newPath = path.replace('/recipes', '/rezepte'); } else if (!path.startsWith('/rezepte') && !path.startsWith('/recipes')) { - // On other pages (glaube, cospend, etc), go to recipe home + // On other pages (cospend, etc), go to recipe home newPath = lang === 'en' ? '/recipes' : '/rezepte'; } diff --git a/src/params/faithLang.ts b/src/params/faithLang.ts new file mode 100644 index 0000000..a5c3694 --- /dev/null +++ b/src/params/faithLang.ts @@ -0,0 +1,5 @@ +import type { ParamMatcher } from '@sveltejs/kit'; + +export const match: ParamMatcher = (param) => { + return param === 'faith' || param === 'glaube'; +}; diff --git a/src/params/prayersLang.ts b/src/params/prayersLang.ts new file mode 100644 index 0000000..b0712c3 --- /dev/null +++ b/src/params/prayersLang.ts @@ -0,0 +1,5 @@ +import type { ParamMatcher } from '@sveltejs/kit'; + +export const match: ParamMatcher = (param) => { + return param === 'prayers' || param === 'gebete'; +}; diff --git a/src/params/rosaryLang.ts b/src/params/rosaryLang.ts new file mode 100644 index 0000000..0bf1019 --- /dev/null +++ b/src/params/rosaryLang.ts @@ -0,0 +1,5 @@ +import type { ParamMatcher } from '@sveltejs/kit'; + +export const match: ParamMatcher = (param) => { + return param === 'rosary' || param === 'rosenkranz'; +}; diff --git a/src/routes/(main)/+page.svelte b/src/routes/(main)/+page.svelte index de9e57c..4192ecd 100644 --- a/src/routes/(main)/+page.svelte +++ b/src/routes/(main)/+page.svelte @@ -6,6 +6,7 @@ let lang = $state<'de' | 'en'>('de'); let recipesUrl = $state('/rezepte'); + let faithUrl = $state('/glaube'); onMount(() => { // Check localStorage for preferred language @@ -13,15 +14,18 @@ if (preferredLanguage === 'en') { lang = 'en'; recipesUrl = '/recipes'; + faithUrl = '/faith'; } else { lang = 'de'; recipesUrl = '/rezepte'; + faithUrl = '/glaube'; } // Listen for language changes from UserHeader const handleLanguageChange = (e: CustomEvent) => { lang = e.detail.lang; recipesUrl = lang === 'en' ? '/recipes' : '/rezepte'; + faithUrl = lang === 'en' ? '/faith' : '/glaube'; }; window.addEventListener('languagechange', handleLanguageChange as EventListener); @@ -181,7 +185,7 @@ section h2{

{labels.familyTree}

- +

{labels.faith}

diff --git a/src/routes/[faithLang=faithLang]/+layout.server.ts b/src/routes/[faithLang=faithLang]/+layout.server.ts new file mode 100644 index 0000000..dcd656f --- /dev/null +++ b/src/routes/[faithLang=faithLang]/+layout.server.ts @@ -0,0 +1,17 @@ +import type { LayoutServerLoad } from "./$types" +import { error } from "@sveltejs/kit"; + +export const load : LayoutServerLoad = async ({locals, params}) => { + // Validate faithLang parameter + if (params.faithLang !== 'glaube' && params.faithLang !== 'faith') { + throw error(404, 'Not found'); + } + + const lang = params.faithLang === 'faith' ? 'en' : 'de'; + + return { + session: await locals.auth(), + lang, + faithLang: params.faithLang + } +}; diff --git a/src/routes/[faithLang=faithLang]/+layout.svelte b/src/routes/[faithLang=faithLang]/+layout.svelte new file mode 100644 index 0000000..34ac21f --- /dev/null +++ b/src/routes/[faithLang=faithLang]/+layout.svelte @@ -0,0 +1,47 @@ + + + + +
+ {#snippet links()} + + {/snippet} + + {#snippet language_selector_mobile()} + + {/snippet} + + {#snippet language_selector_desktop()} + + {/snippet} + + {#snippet right_side()} + + {/snippet} + + {@render children()} +
diff --git a/src/routes/glaube/+page.svelte b/src/routes/[faithLang=faithLang]/+page.svelte similarity index 77% rename from src/routes/glaube/+page.svelte rename to src/routes/[faithLang=faithLang]/+page.svelte index 7463d06..c34af96 100644 --- a/src/routes/glaube/+page.svelte +++ b/src/routes/[faithLang=faithLang]/+page.svelte @@ -1,10 +1,24 @@ - Glaube - Bocken - + {labels.title} - Bocken + -

Glaube

+

{labels.title}

- Hier findet man einige Gebete und einen interaktiven Rosenkranz zum katholischen Glauben. - Ein Fokus auf Latein und den tridentinischen Ritus wird zu bemerken sein. + {labels.description}

- + -

Gebete

+

{labels.prayers}

- + -

Rosenkranz

+

{labels.rosary}

diff --git a/src/routes/glaube/gebete/+page.svelte b/src/routes/[faithLang=faithLang]/[prayers=prayersLang]/+page.svelte similarity index 100% rename from src/routes/glaube/gebete/+page.svelte rename to src/routes/[faithLang=faithLang]/[prayers=prayersLang]/+page.svelte diff --git a/src/routes/glaube/gebete/Gebet.svelte b/src/routes/[faithLang=faithLang]/[prayers=prayersLang]/Gebet.svelte similarity index 100% rename from src/routes/glaube/gebete/Gebet.svelte rename to src/routes/[faithLang=faithLang]/[prayers=prayersLang]/Gebet.svelte diff --git a/src/routes/glaube/rosenkranz/+page.server.ts b/src/routes/[faithLang=faithLang]/[rosary=rosaryLang]/+page.server.ts similarity index 100% rename from src/routes/glaube/rosenkranz/+page.server.ts rename to src/routes/[faithLang=faithLang]/[rosary=rosaryLang]/+page.server.ts diff --git a/src/routes/glaube/rosenkranz/+page.svelte b/src/routes/[faithLang=faithLang]/[rosary=rosaryLang]/+page.svelte similarity index 100% rename from src/routes/glaube/rosenkranz/+page.svelte rename to src/routes/[faithLang=faithLang]/[rosary=rosaryLang]/+page.svelte diff --git a/src/routes/[faithLang=faithLang]/angelus/+page.svelte b/src/routes/[faithLang=faithLang]/angelus/+page.svelte new file mode 100644 index 0000000..1174949 --- /dev/null +++ b/src/routes/[faithLang=faithLang]/angelus/+page.svelte @@ -0,0 +1,182 @@ + + + + Angelus - The Angel of the Lord + + + +
+
+

Angelus

+
+ +
+
+ +
+
+ + +

+ ℣. Angelus Domini nuntiavit Mariae. + ℣. Der Engel des Herrn brachte Maria die Botschaft + ℣. The Angel of the Lord declared unto Mary. + ℟. Et concepit de Spiritu Sancto. + ℟. und sie empfing vom Heiligen Geist. + ℟. And she conceived of the Holy Spirit. +

+
+
+
+
+ +
+ +
+ + +

+ ℣. Ecce ancilla Domini, + ℣. Maria sprach: Siehe, ich bin die Magd des Herrn + ℣. Behold the handmaid of the Lord. + ℟. Fiat mihi secundum verbum tuum. + ℟. mir geschehe nach Deinem Wort. + ℟. Be it done unto me according to thy word. +

+
+
+ +
+ +
+ +
+ + +

+ ℣. Et Verbum caro factum est, + ℣. Und das Wort ist Fleisch geworden + ℣. And the Word was made flesh. + ℟. Et habitavit in nobis. + ℟. und hat unter uns gewohnt. + ℟. And dwelt among us. +

+
+
+ +
+ + +

+ ℣. Ora pro nobis, sancta Dei Genetrix, + ℣. Bitte für uns Heilige Gottesmutter + ℣. Pray for us, O holy Mother of God. + ℟. Ut digni efficiamur promissionibus Christi. + ℟. auf dass wir würdig werden der Verheißungen Christi. + ℟. That we may be made worthy of the promises of Christ. +

+
+
+
+ + +

+ ℣. Oremus. + ℣. Lasset uns beten. + ℣. Let us pray: +

+ +

+ + Gratiam tuam, quaesumus, Domine, mentibus nostris infunde; ut qui, Angelo nuntiante, + Christi Filii tui incarnationem cognovimus, per passionem eius et crucem ad + resurrectionis gloriam perducamur. Per eumdem Christum Dominum nostrum. Amen. + + + Allmächtiger Gott, gieße deine Gnade in unsere Herzen ein. Durch die Botschaft des + Engels haben wir die Menschwerdung Christi, deines Sohnes, erkannt. Lass uns durch + sein Leiden und Kreuz zur Herrlichkeit der Auferstehung gelangen. Darum bitten wir + durch Christus, unseren Herrn. Amen. + + + Pour forth, we beseech Thee, O Lord, Thy grace into our hearts, that we to whom the + Incarnation of Christ Thy Son was made known by the message of an angel, may by His + Passion and Cross be brought to the glory of His Resurrection. Through the same Christ + Our Lord. Amen. + +

+
+
+ + +
+ diff --git a/src/routes/glaube/+layout.server.ts b/src/routes/glaube/+layout.server.ts deleted file mode 100644 index c8a95cd..0000000 --- a/src/routes/glaube/+layout.server.ts +++ /dev/null @@ -1,7 +0,0 @@ -import type { LayoutServerLoad } from "./$types" - -export const load : LayoutServerLoad = (async ({locals}) => { - return { - session: await locals.auth(), - } -}); diff --git a/src/routes/glaube/+layout.svelte b/src/routes/glaube/+layout.svelte deleted file mode 100644 index 8028708..0000000 --- a/src/routes/glaube/+layout.svelte +++ /dev/null @@ -1,29 +0,0 @@ - - - - -
- {#snippet links()} - - {/snippet} - - {#snippet right_side()} - - {/snippet} - - {@render children()} -
diff --git a/src/routes/glaube/angelus/+page.svelte b/src/routes/glaube/angelus/+page.svelte deleted file mode 100644 index 8f95af7..0000000 --- a/src/routes/glaube/angelus/+page.svelte +++ /dev/null @@ -1,82 +0,0 @@ - - - - Angelus - The Angel of the Lord - - - -
-
-

Angelus

-
- - -
-
- -
- -
-
- -