From 1fb5c8c5b6008e5f9cb87e8ef01cef322d7c304f Mon Sep 17 00:00:00 2001 From: Fuwn Date: Sun, 21 Jan 2024 01:58:30 -0800 Subject: feat(locale): typed locale getter --- src/lib/Locale/layout.ts | 2 +- src/lib/Settings/Categories/Display.svelte | 23 ++++++++++------- src/stores/locale.ts | 40 ++++++++++++++++++++++++++++++ 3 files changed, 55 insertions(+), 10 deletions(-) create mode 100644 src/stores/locale.ts (limited to 'src') 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 | 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 @@ {$_('settings.display.categories.include_additional_media')}
@@ -64,26 +65,30 @@ {$_('settings.display.categories.hide_panels')}
- - + +

{$_('settings.display.categories.collapse_panels_by_default')}
- +

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 = (parts: Array) => R; + +// interface Options { +// id?: string; +// locale?: string; +// format?: string; +// default?: string; +// values?: +// | Record< +// string, +// string | number | boolean | Date | FormatXMLElementFn | 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; -- cgit v1.2.3