aboutsummaryrefslogtreecommitdiff
path: root/src/lib/User/BadgeWall
diff options
context:
space:
mode:
authorFuwn <[email protected]>2026-05-24 13:22:34 +0000
committerFuwn <[email protected]>2026-05-24 13:22:34 +0000
commit56a7a7851b09cb30a5cd543c8cb4f926109b4290 (patch)
treea620f908405fa48fd601580c5a48432831ec5c33 /src/lib/User/BadgeWall
parentfix(layout): preserve list panel when clicking action buttons in summary (diff)
downloaddue.moe-56a7a7851b09cb30a5cd543c8cb4f926109b4290.tar.xz
due.moe-56a7a7851b09cb30a5cd543c8cb4f926109b4290.zip
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.
Diffstat (limited to 'src/lib/User/BadgeWall')
-rw-r--r--src/lib/User/BadgeWall/AWC.svelte4
-rw-r--r--src/lib/User/BadgeWall/BadgePreview.svelte20
-rw-r--r--src/lib/User/BadgeWall/Badges.svelte3
-rw-r--r--src/lib/User/BadgeWall/FallbackBadge.svelte7
4 files changed, 23 insertions, 11 deletions
diff --git a/src/lib/User/BadgeWall/AWC.svelte b/src/lib/User/BadgeWall/AWC.svelte
index da01e484..5684eb2f 100644
--- a/src/lib/User/BadgeWall/AWC.svelte
+++ b/src/lib/User/BadgeWall/AWC.svelte
@@ -4,6 +4,7 @@ import type { AWCBadgesGroup } from "$lib/Data/awc";
import { cdn, thumbnail } from "$lib/Utility/image";
import type { Preferences } from "../../../graphql/$types";
import FallbackBadge from "./FallbackBadge.svelte";
+import locale from "$stores/locale";
import "./badges.css";
export let awcPromise: Promise<Response>;
@@ -79,7 +80,8 @@ const awcBadgesGrouped = (awcResponse: string): AWCBadgesGroup[] => {
{#each parsedBadges as group}
<details open={categoryFilter || isOwner ? false : true}>
<summary>
- Anime Watching Club <span class="opaque">|</span>
+ {$locale().badgeWall?.awcGroup}
+ <span class="opaque">|</span>
{group.group}
</summary>
diff --git a/src/lib/User/BadgeWall/BadgePreview.svelte b/src/lib/User/BadgeWall/BadgePreview.svelte
index 104a53da..ebf47d9b 100644
--- a/src/lib/User/BadgeWall/BadgePreview.svelte
+++ b/src/lib/User/BadgeWall/BadgePreview.svelte
@@ -147,7 +147,7 @@ const onClick = (event: MouseEvent) => {
{/if}
{#if selectedBadge.designer}
- <b>Designer:</b>
+ <b>{$locale().badgePreview?.designer}</b>
<!-- {#if selectedBadge.designer.startsWith('http')}
<a href={selectedBadge.designer} target="_blank">
@@ -166,7 +166,11 @@ const onClick = (event: MouseEvent) => {
{/if}
{#if selectedBadge.post && selectedBadge.post !== '#'}
- <b>{selectedBadge.post.includes('forum') ? 'Forum' : 'Activity'}:</b>
+ <b
+ >{selectedBadge.post.includes('forum')
+ ? $locale().badgePreview?.forum
+ : $locale().badgePreview?.activity}:</b
+ >
<a href={selectedBadge.post} target="_blank">
{selectedBadge.post}
@@ -176,7 +180,7 @@ const onClick = (event: MouseEvent) => {
{/if}
{#if selectedBadge.source}
- <b>Source:</b>
+ <b>{$locale().badgePreview?.source}</b>
{#if selectedBadge.source.startsWith('http')}
<!-- <a href={selectedBadge.source} target="_blank">
@@ -191,7 +195,7 @@ const onClick = (event: MouseEvent) => {
{/if}
{#if selectedBadge.category}
- <b>Category:</b>
+ <b>{$locale().badgePreview?.category}</b>
<a href={`?category=${selectedBadge.category}`} onclick={() => (selectedBadge = undefined)}>
{selectedBadge.category}
@@ -200,18 +204,18 @@ const onClick = (event: MouseEvent) => {
<br />
{/if}
- <b>SauceNAO:</b>
+ <b>{$locale().badgePreview?.sauceNAO}</b>
<a href={`https://saucenao.com/search.php?url=${selectedBadge.image}`} target="_blank">
- Search
+ {$locale().badgePreview?.search}
</a>
<div class="badge-preview-seek">
{#if hasPrevious}
- <button onclick={onPrevious}>Previous</button>
+ <button onclick={onPrevious}>{$locale().badgePreview?.previous}</button>
{/if}
{#if hasNext}
- <button onclick={onNext} style="float: right;">Next</button>
+ <button onclick={onNext} style="float: right;">{$locale().badgePreview?.next}</button>
{/if}
</div>
</div>
diff --git a/src/lib/User/BadgeWall/Badges.svelte b/src/lib/User/BadgeWall/Badges.svelte
index 67c00c53..1d620c2f 100644
--- a/src/lib/User/BadgeWall/Badges.svelte
+++ b/src/lib/User/BadgeWall/Badges.svelte
@@ -20,7 +20,8 @@ export let selectedBadge: IndexedBadge | undefined = undefined;
{#if ungroupedBadges.length === 0}
<div class="card">
- No due.moe registered badges found for this user. <a
+ {$locale().badgeWall?.noRegistered}
+ <a
href={'#'}
onclick={(e) => e.preventDefault()}
title="This alert does not include AWC badges."
diff --git a/src/lib/User/BadgeWall/FallbackBadge.svelte b/src/lib/User/BadgeWall/FallbackBadge.svelte
index a930e5e0..04793aa0 100644
--- a/src/lib/User/BadgeWall/FallbackBadge.svelte
+++ b/src/lib/User/BadgeWall/FallbackBadge.svelte
@@ -113,7 +113,12 @@ const asAWCBadge = (b: Badge | AWCBadge) => b as AWCBadge;
</a>
</Tooltip>
{:else if !hideOnError}
- <img src={error} alt="Not found" loading="lazy" class="badge" />
+ <img
+ src={error}
+ alt={$locale().badgeWall?.notFound ?? 'Not found'}
+ loading="lazy"
+ class="badge"
+ />
{/if}
<style lang="scss">