diff --git a/scripts/generate-mystery-verses.ts b/scripts/generate-mystery-verses.ts index 6141253..ede3935 100644 --- a/scripts/generate-mystery-verses.ts +++ b/scripts/generate-mystery-verses.ts @@ -5,48 +5,61 @@ import { writeFileSync } from 'fs'; import { resolve } from 'path'; import { lookupReference } from '../src/lib/server/bible'; -import { mysteryReferences } from '../src/lib/data/mysteryDescriptions'; +import { mysteryReferences, mysteryReferencesEnglish } from '../src/lib/data/mysteryDescriptions'; import type { MysteryDescription, VerseData } from '../src/lib/data/mysteryDescriptions'; -const tsvPath = resolve('static/allioli.tsv'); +function generateVerseData( + references: Record, + tsvPath: string +): Record { + const result: Record = {}; -const mysteryDescriptions: Record = {}; + for (const [mysteryType, refs] of Object.entries(references)) { + const descriptions: MysteryDescription[] = []; -for (const [mysteryType, references] of Object.entries(mysteryReferences)) { - const descriptions: MysteryDescription[] = []; + for (const ref of refs) { + const lookup = lookupReference(ref.reference, tsvPath); - for (const ref of references) { - const result = lookupReference(ref.reference, tsvPath); + let text = ''; + let verseData: VerseData | null = null; - let text = ''; - let verseData: VerseData | null = null; + if (lookup && lookup.verses.length > 0) { + text = `«${lookup.verses.map((v) => v.text).join(' ')}»`; + verseData = { + book: lookup.book, + chapter: lookup.chapter, + verses: lookup.verses + }; + } else { + console.warn(`No verses found for: ${ref.reference} in ${tsvPath}`); + } - if (result && result.verses.length > 0) { - text = `«${result.verses.map((v) => v.text).join(' ')}»`; - verseData = { - book: result.book, - chapter: result.chapter, - verses: result.verses - }; - } else { - console.warn(`No verses found for: ${ref.reference}`); + descriptions.push({ + title: ref.title, + reference: ref.reference, + text, + verseData + }); } - descriptions.push({ - title: ref.title, - reference: ref.reference, - text, - verseData - }); + result[mysteryType] = descriptions; } - mysteryDescriptions[mysteryType] = descriptions; + return result; } +const dePath = resolve('static/allioli.tsv'); +const enPath = resolve('static/drb.tsv'); + +const mysteryVerseDataDe = generateVerseData(mysteryReferences, dePath); +const mysteryVerseDataEn = generateVerseData(mysteryReferencesEnglish, enPath); + const output = `// Auto-generated by scripts/generate-mystery-verses.ts — do not edit manually import type { MysteryDescription } from './mysteryDescriptions'; -export const mysteryVerseData: Record = ${JSON.stringify(mysteryDescriptions, null, '\t')}; +export const mysteryVerseDataDe: Record = ${JSON.stringify(mysteryVerseDataDe, null, '\t')}; + +export const mysteryVerseDataEn: Record = ${JSON.stringify(mysteryVerseDataEn, null, '\t')}; `; const outPath = resolve('src/lib/data/mysteryVerseData.ts'); diff --git a/src/hooks.server.ts b/src/hooks.server.ts index 66992f0..40d8e17 100644 --- a/src/hooks.server.ts +++ b/src/hooks.server.ts @@ -63,9 +63,11 @@ async function authorization({ event, resolve }) { } // Bible verse functionality for error pages -async function getRandomVerse(fetch: typeof globalThis.fetch): Promise { +async function getRandomVerse(fetch: typeof globalThis.fetch, pathname: string): Promise { + const isEnglish = pathname.startsWith('/faith/') || pathname.startsWith('/recipes/'); + const endpoint = isEnglish ? '/api/faith/bibel/zufallszitat' : '/api/glaube/bibel/zufallszitat'; try { - const response = await fetch('/api/glaube/bibel/zufallszitat'); + const response = await fetch(endpoint); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } @@ -80,11 +82,14 @@ export const handleError: HandleServerError = async ({ error, event, status, mes console.error('Error occurred:', { error, status, message, url: event.url.pathname }); // Add Bible verse to error context - const bibleQuote = await getRandomVerse(event.fetch); + const bibleQuote = await getRandomVerse(event.fetch, event.url.pathname); + + const isEnglish = event.url.pathname.startsWith('/faith/') || event.url.pathname.startsWith('/recipes/'); return { message: message, - bibleQuote + bibleQuote, + lang: isEnglish ? 'en' : 'de' }; }; diff --git a/src/lib/components/faith/BibleModal.svelte b/src/lib/components/faith/BibleModal.svelte index fed0c19..eee2d00 100644 --- a/src/lib/components/faith/BibleModal.svelte +++ b/src/lib/components/faith/BibleModal.svelte @@ -5,19 +5,23 @@ reference = '', title = '', verseData = null, + lang = 'de', onClose }: { reference?: string, title?: string, verseData?: VerseData | null, + lang?: string, onClose: () => void } = $props(); + const isEnglish = $derived(lang === 'en'); + let book: string = $state(verseData?.book || ''); let chapter: number = $state(verseData?.chapter || 0); let verses: Array<{ verse: number; text: string }> = $state(verseData?.verses || []); let loading = $state(false); - let error = $state(verseData ? '' : 'Keine Versdaten verfügbar'); + let error = $state(verseData ? '' : (lang === 'en' ? 'No verse data available' : 'Keine Versdaten verfügbar')); function handleBackdropClick(event: MouseEvent) { if (event.target === event.currentTarget) { @@ -49,7 +53,7 @@ {/if} -