aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/lib/Locale/layout.ts2
-rw-r--r--src/lib/Settings/Categories/Display.svelte23
-rw-r--r--src/stores/locale.ts40
3 files changed, 55 insertions, 10 deletions
diff --git a/src/lib/Locale/layout.ts b/src/lib/Locale/layout.ts
index 05e36daf..59862632 100644
--- a/src/lib/Locale/layout.ts
+++ b/src/lib/Locale/layout.ts
@@ -1,4 +1,4 @@
-type LocaleValue = string | LocaleValue[]; // | { [key: string]: LocaleValue };
+type LocaleValue = string; // | LocaleValue[] | { [key: string]: LocaleValue };
export interface LocaleDictionary {
[key: string]: LocaleDictionary | string | Array<string | LocaleDictionary> | null;
diff --git a/src/lib/Settings/Categories/Display.svelte b/src/lib/Settings/Categories/Display.svelte
index f4bc6f79..d9070e8e 100644
--- a/src/lib/Settings/Categories/Display.svelte
+++ b/src/lib/Settings/Categories/Display.svelte
@@ -4,6 +4,7 @@
import SettingCheckboxToggle from '../SettingCheckboxToggle.svelte';
import SettingHint from '../SettingHint.svelte';
import root from '$lib/Utility/root';
+ import locale from '$stores/locale';
const onHelperChange = () => {
const mai = document.getElementById('mai') as HTMLImageElement;
@@ -41,17 +42,17 @@
<b>{$_('settings.display.categories.include_additional_media')}</b><br />
<SettingCheckboxToggle
setting="displayPausedMedia"
- text={$_('settings.media.paused_media')}
+ text={$locale().settings.media.paused_media}
lineBreak={false}
/>
<SettingCheckboxToggle
setting="displayUnresolved"
- text={$_('settings.media.unresolved_media')}
+ text={$locale().settings.media.unresolved_media}
lineBreak={false}
/>
<SettingCheckboxToggle
setting="displayPlannedAnime"
- text={$_('settings.media.planned_anime')}
+ text={$locale().settings.media.planned_anime}
lineBreak={false}
/>
<SettingHint lineBreak>
@@ -64,26 +65,30 @@
<b>{$_('settings.display.categories.hide_panels')}</b><br />
<SettingCheckboxToggle
setting="disableUpcomingAnime"
- text={$_('settings.media.upcoming_anime')}
+ text={$locale().settings.media.upcoming_anime}
lineBreak={false}
/>
-<SettingCheckboxToggle setting="disableAnime" text={$_('settings.media.anime')} lineBreak={false} />
-<SettingCheckboxToggle setting="disableManga" text={$_('settings.media.manga')} />
+<SettingCheckboxToggle
+ setting="disableAnime"
+ text={$locale().settings.media.anime}
+ lineBreak={false}
+/>
+<SettingCheckboxToggle setting="disableManga" text={$locale().settings.media.manga} />
<p />
<b>{$_('settings.display.categories.collapse_panels_by_default')}</b><br />
<SettingCheckboxToggle
setting="displayUpcomingAnimeCollapsed"
- text={$_('settings.media.upcoming_anime')}
+ text={$locale().settings.media.upcoming_anime}
lineBreak={false}
/>
<SettingCheckboxToggle
setting="displayAnimeCollapsed"
- text={$_('settings.media.anime')}
+ text={$locale().settings.media.anime}
lineBreak={false}
/>
-<SettingCheckboxToggle setting="displayMangaCollapsed" text={$_('settings.media.manga')} />
+<SettingCheckboxToggle setting="displayMangaCollapsed" text={$locale().settings.media.manga} />
<p />
diff --git a/src/stores/locale.ts b/src/stores/locale.ts
new file mode 100644
index 00000000..ba657bf5
--- /dev/null
+++ b/src/stores/locale.ts
@@ -0,0 +1,40 @@
+import { derived, type Readable } from 'svelte/store';
+import { json } from 'svelte-i18n';
+import type { Locale } from '$lib/Locale/layout';
+
+// type FormatXMLElementFn<T, R = string | T | (string | T)[]> = (parts: Array<string | T>) => R;
+
+// interface Options {
+// id?: string;
+// locale?: string;
+// format?: string;
+// default?: string;
+// values?:
+// | Record<
+// string,
+// string | number | boolean | Date | FormatXMLElementFn<unknown> | null | undefined
+// >
+// | undefined;
+// }
+
+const createLocale = () => {
+ return derived(json, ($json) => {
+ return (locale = undefined) =>
+ new Proxy(
+ {},
+ {
+ get(_target, key) {
+ const localisation = $json(key.toString(), locale);
+
+ if (localisation === key.toString()) return undefined;
+
+ return localisation;
+ }
+ }
+ );
+ }) as Readable<(locale?: string) => Locale>;
+};
+
+const locale = createLocale();
+
+export default locale;