From 56a7a7851b09cb30a5cd543c8cb4f926109b4290 Mon Sep 17 00:00:00 2001 From: Fuwn Date: Sun, 24 May 2026 13:22:34 +0000 Subject: refactor(locale): move hardcoded UI strings into english locale Adds optional namespaces (common, errors, commandPalette, headTitle, notifications, schedule, events, home, reader, routes, badgePreview, badgeWall) and extends existing ones (settings.*, lists.*, tools.*, user.*, hololive.*) on the Locale interface. New fields are optional so japanese.ts can omit them; svelte-i18n's fallbackLocale handles the runtime miss. HeadTitle gains an optional routeKey prop for type-safe lookup. defaultActions becomes a factory so the command palette re-reads locale on language toggle. The existing JP feedback translation in routes/settings is preserved via japanese.ts. Out of scope (kept hardcoded): service-worker.ts, app.html, Landing*.svelte, tools.ts registry, Easter Event 2025 pages. --- src/lib/List/MediaRoulette.svelte | 34 +++++++++++++++++++++------------- 1 file changed, 21 insertions(+), 13 deletions(-) (limited to 'src/lib/List/MediaRoulette.svelte') diff --git a/src/lib/List/MediaRoulette.svelte b/src/lib/List/MediaRoulette.svelte index 3fbc89d6..dc9a2269 100644 --- a/src/lib/List/MediaRoulette.svelte +++ b/src/lib/List/MediaRoulette.svelte @@ -3,6 +3,7 @@ import type { Media } from "$lib/Data/AniList/media"; import ParallaxImage from "$lib/Image/ParallaxImage.svelte"; import { outboundLink } from "$lib/Media/links"; import settings from "$stores/settings"; +import locale from "$stores/locale"; import { mediaTitle } from "./mediaTitle"; interface Props { @@ -96,14 +97,16 @@ const handleOverlayClick = (e: MouseEvent) => { }} >
- +

- {type === 'anime' ? 'Watch' : 'Read'} Roulette + {type === 'anime' ? $locale().lists.roulette?.watchTitle : $locale().lists.roulette?.readTitle}

{#if media.length === 0} -

No media available for roulette.

+

{$locale().lists.roulette?.noMedia}

{:else}
{#if currentMedia} @@ -129,13 +132,18 @@ const handleOverlayClick = (e: MouseEvent) => { target="_blank" class="view-link" > - View on {$settings.displayOutboundLinksTo === 'anilist' - ? 'AniList' - : $settings.displayOutboundLinksTo === 'livechartme' - ? 'LiveChart.me' - : $settings.displayOutboundLinksTo === 'animeschedule' - ? 'AnimeSchedule' - : 'MyAnimeList'} + {$locale({ + values: { + site: + $settings.displayOutboundLinksTo === 'anilist' + ? 'AniList' + : $settings.displayOutboundLinksTo === 'livechartme' + ? 'LiveChart.me' + : $settings.displayOutboundLinksTo === 'animeschedule' + ? 'AnimeSchedule' + : 'MyAnimeList' + } + }).lists.roulette?.viewOn} {/if}
@@ -145,11 +153,11 @@ const handleOverlayClick = (e: MouseEvent) => {
{#if !isSpinning && !showResult} - + {:else if showResult} - + {:else} - + {/if}
{/if} -- cgit v1.2.3