From 56a7a7851b09cb30a5cd543c8cb4f926109b4290 Mon Sep 17 00:00:00 2001
From: Fuwn <contact@fuwn.net>
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/Error/RateLimited.svelte | 31 +++++++++++++++++++------------
 1 file changed, 19 insertions(+), 12 deletions(-)

(limited to 'src/lib/Error/RateLimited.svelte')

diff --git a/src/lib/Error/RateLimited.svelte b/src/lib/Error/RateLimited.svelte
index 2a79efb6..890c4d20 100644
--- a/src/lib/Error/RateLimited.svelte
+++ b/src/lib/Error/RateLimited.svelte
@@ -1,5 +1,6 @@
 <script lang="ts">
 import Spacer from "$lib/Layout/Spacer.svelte";
+import locale from "$stores/locale";
 export let type = "Media";
 export let loginSessionError = true;
 export let contact = true;
@@ -13,15 +14,18 @@ export let might = true;
     <ul>
       <li>
         <p>
-          {type} could not be loaded. You{might ? ' might' : ''} have been rate-limited. {#if !might}
-            Try again in one minute.
+          {type}
+          {might
+            ? $locale().errors?.rateLimited?.notLoadedMight
+            : $locale().errors?.rateLimited?.notLoadedDefinitely}
+          {#if !might}
+            {$locale().errors?.rateLimited?.tryAgainOneMinute}
           {/if}
         </p>
 
         {#if loginSessionError}
           <p>
-            Your login session may have expired. Try logging out and logging back in, or try again
-            in a few minutes.
+            {$locale().errors?.rateLimited?.sessionExpired}
           </p>
         {/if}
 
@@ -30,22 +34,25 @@ export let might = true;
         {#if contact}
           <Spacer />
 
-          If the problem persists, please contact
-          <a href="https://anilist.co/user/fuwn" target="_blank">@fuwn</a> on AniList.
+          {$locale().errors?.rateLimited?.contactSupport?.split('@fuwn')[0]}
+          <a href="https://anilist.co/user/fuwn" target="_blank">@fuwn</a>{$locale().errors?.rateLimited?.contactSupport?.split('@fuwn')[1]}
         {/if}
       </li>
     </ul>
   {:else}
     <p>
-      {type} could not be loaded. You{might ? ' might' : ''} have been rate-limited. {#if !might}
-        Try again in one minute.
+      {type}
+      {might
+        ? $locale().errors?.rateLimited?.notLoadedMight
+        : $locale().errors?.rateLimited?.notLoadedDefinitely}
+      {#if !might}
+        {$locale().errors?.rateLimited?.tryAgainOneMinute}
       {/if}
     </p>
 
     {#if loginSessionError}
       <p>
-        Your login session may have expired. Try logging out and logging back in, or try again in a
-        few minutes.
+        {$locale().errors?.rateLimited?.sessionExpired}
       </p>
     {/if}
 
@@ -54,8 +61,8 @@ export let might = true;
     {#if contact}
       <Spacer />
 
-      If the problem persists, please contact
-      <a href="https://anilist.co/user/fuwn" target="_blank">@fuwn</a> on AniList.
+      {$locale().errors?.rateLimited?.contactSupport?.split('@fuwn')[0]}
+      <a href="https://anilist.co/user/fuwn" target="_blank">@fuwn</a>{$locale().errors?.rateLimited?.contactSupport?.split('@fuwn')[1]}
     {/if}
   {/if}
 </div>
-- 
cgit v1.2.3

