From 259d7949ddfd80276c3bc56f9ed7f09e68999a23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Lohrer?= Date: Tue, 21 Apr 2026 14:13:59 +0200 Subject: [PATCH] feat(app): post-route + komponenten lokalisiert (titel, datum, hinweise) --- .../lib/components/LanguageAvailability.svelte | 3 ++- app/src/lib/components/PostView.svelte | 17 ++++++++++------- app/src/routes/[...slug]/+page.svelte | 8 +++++--- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/app/src/lib/components/LanguageAvailability.svelte b/app/src/lib/components/LanguageAvailability.svelte index ee21ccb..288f21a 100644 --- a/app/src/lib/components/LanguageAvailability.svelte +++ b/app/src/lib/components/LanguageAvailability.svelte @@ -2,6 +2,7 @@ import type { NostrEvent, TranslationInfo } from '$lib/nostr/loaders'; import { loadTranslations } from '$lib/nostr/loaders'; import { displayLanguage } from '$lib/nostr/languageNames'; + import { t } from '$lib/i18n'; interface Props { event: NostrEvent; @@ -28,7 +29,7 @@ {#if !loading && translations.length > 0}

- Auch verfügbar in: + {$t('post.also_available_in')} {#each translations as t, i} {displayLanguage(t.lang)}{#if i < translations.length - 1}, {/if} {/each} diff --git a/app/src/lib/components/PostView.svelte b/app/src/lib/components/PostView.svelte index 4ec2be3..755ff30 100644 --- a/app/src/lib/components/PostView.svelte +++ b/app/src/lib/components/PostView.svelte @@ -7,6 +7,7 @@ import ReplyComposer from './ReplyComposer.svelte'; import ExternalClientLinks from './ExternalClientLinks.svelte'; import LanguageAvailability from './LanguageAvailability.svelte'; + import { t, activeLocale } from '$lib/i18n'; interface Props { event: NostrEvent; @@ -21,18 +22,20 @@ } const dtag = $derived(tagValue(event, 'd')); - const title = $derived(tagValue(event, 'title') || '(ohne Titel)'); + let currentLocale = $state('de'); + activeLocale.subscribe((v) => (currentLocale = v)); + + const title = $derived(tagValue(event, 'title') || $t('post.untitled')); const summary = $derived(tagValue(event, 'summary')); const image = $derived(tagValue(event, 'image')); const publishedAt = $derived( parseInt(tagValue(event, 'published_at') || `${event.created_at}`, 10) ); const date = $derived( - new Date(publishedAt * 1000).toLocaleDateString('de-DE', { - year: 'numeric', - month: 'long', - day: 'numeric' - }) + new Date(publishedAt * 1000).toLocaleDateString( + currentLocale === 'en' ? 'en-US' : 'de-DE', + { year: 'numeric', month: 'long', day: 'numeric' } + ) ); const tags = $derived(tagsAll(event, 't')); const bodyHtml = $derived(renderMarkdown(event.content)); @@ -51,7 +54,7 @@

{title}

- Veröffentlicht am {date} + {$t('post.published_on', { values: { date } })} {#if tags.length > 0}
{#each tags as t} diff --git a/app/src/routes/[...slug]/+page.svelte b/app/src/routes/[...slug]/+page.svelte index 8ebccdd..13afecf 100644 --- a/app/src/routes/[...slug]/+page.svelte +++ b/app/src/routes/[...slug]/+page.svelte @@ -5,6 +5,8 @@ import { buildHablaLink } from '$lib/nostr/naddr'; import PostView from '$lib/components/PostView.svelte'; import LoadingOrError from '$lib/components/LoadingOrError.svelte'; + import { t } from '$lib/i18n'; + import { get } from 'svelte/store'; let { data } = $props(); const dtag = $derived(data.dtag); @@ -30,14 +32,14 @@ .then((p) => { if (currentDtag !== dtag) return; if (!p) { - error = `Post "${currentDtag}" nicht gefunden.`; + error = get(t)('post.not_found', { values: { slug: currentDtag } }); } else { post = p; } }) .catch((e) => { if (currentDtag !== dtag) return; - error = e instanceof Error ? e.message : 'Unbekannter Fehler'; + error = e instanceof Error ? e.message : get(t)('post.unknown_error'); }) .finally(() => { if (currentDtag === dtag) loading = false; @@ -45,7 +47,7 @@ }); - +