diff --git a/src/client/index.ts b/src/client/index.ts index 0888603..219708a 100644 --- a/src/client/index.ts +++ b/src/client/index.ts @@ -9,6 +9,7 @@ export { $locale as locale, loadLocale as preloadLocale } from './stores/locale' export { $dictionary as dictionary, $locales as locales, + addMessagesTo, } from './stores/dictionary' export { $loading as loading } from './stores/loading' export { $format as format, $format as _, $format as t } from './stores/format' diff --git a/src/client/stores/dictionary.ts b/src/client/stores/dictionary.ts index c6aef6a..6599ee2 100644 --- a/src/client/stores/dictionary.ts +++ b/src/client/stores/dictionary.ts @@ -1,4 +1,5 @@ import { writable, derived } from 'svelte/store' +import merge from 'deepmerge' let dictionary: Record> @@ -15,8 +16,23 @@ function hasLocaleDictionary(locale: string) { return locale in dictionary } +function addMessagesTo(locale: string, ...partials: any[]) { + $dictionary.update(d => { + dictionary[locale] = merge.all( + [dictionary[locale] || {}].concat(partials) + ) + return d + }) +} + const $locales = derived([$dictionary], ([$dictionary]) => Object.keys($dictionary) ) -export { $dictionary, $locales, getDictionary, hasLocaleDictionary } +export { + $dictionary, + $locales, + getDictionary, + hasLocaleDictionary, + addMessagesTo, +}