refactor: unify recipe routes into [recipeLang] slug with full bilingual support

Consolidate /rezepte and /recipes routes into single [recipeLang] structure to eliminate code duplication. All pages now use conditional API routing and reactive labels based on language parameter.

- Merge duplicate route structures into /[recipeLang] with 404 for invalid slugs
- Add English API endpoints for search, favorites, tags, and categories
- Implement language dropdown in header with localStorage persistence
- Convert all pages to use Svelte 5 runes (, , )
- Add German-only redirects (301) for add/edit pages
- Make all view pages (list, detail, filters, search, favorites) fully bilingual
- Remove floating language switcher in favor of header dropdown
This commit is contained in:
2025-12-26 21:19:27 +01:00
parent 36a7fac39a
commit 6de3d76504
72 changed files with 417511 additions and 1097 deletions

View File

@@ -3,6 +3,12 @@
export let englishUrl: string;
export let currentLang: 'de' | 'en' = 'de';
export let hasTranslation: boolean = true;
function setLanguagePreference(lang: 'de' | 'en') {
if (typeof localStorage !== 'undefined') {
localStorage.setItem('preferredLanguage', lang);
}
}
</script>
<style>
@@ -101,6 +107,7 @@
href={germanUrl}
class:active={currentLang === 'de'}
aria-label="Switch to German"
onclick={() => setLanguagePreference('de')}
>
<span class="flag">🇩🇪</span>
<span class="label">DE</span>
@@ -110,6 +117,7 @@
href={englishUrl}
class:active={currentLang === 'en'}
aria-label="Switch to English"
onclick={() => setLanguagePreference('en')}
>
<span class="flag">🇬🇧</span>
<span class="label">EN</span>