35 lines
814 B
TypeScript
35 lines
814 B
TypeScript
import type { i18n } from 'i18next';
|
|
import { writable } from 'svelte/store';
|
|
|
|
export const createI18nStore = (i18n: i18n) => {
|
|
const i18nWritable = writable(i18n);
|
|
|
|
i18n.on('initialized', () => {
|
|
i18nWritable.set(i18n);
|
|
});
|
|
i18n.on('loaded', () => {
|
|
i18nWritable.set(i18n);
|
|
});
|
|
i18n.on('added', () => i18nWritable.set(i18n));
|
|
i18n.on('languageChanged', () => {
|
|
i18nWritable.set(i18n);
|
|
});
|
|
return i18nWritable;
|
|
};
|
|
|
|
export const isLoading = (i18n: i18n) => {
|
|
const isLoading = writable(false);
|
|
|
|
// if loaded resources are empty || {}, set loading to true
|
|
i18n.on('loaded', (resources) => {
|
|
Object.keys(resources).length !== 0 && isLoading.set(false);
|
|
});
|
|
|
|
// if resources failed loading, set loading to true
|
|
i18n.on('failedLoading', () => {
|
|
isLoading.set(true);
|
|
});
|
|
|
|
return isLoading;
|
|
};
|