forked from open-webui/open-webui
main #2
2 changed files with 37 additions and 38 deletions
|
@ -1,7 +1,41 @@
|
||||||
import i18next from 'i18next';
|
import i18next from 'i18next';
|
||||||
import resourcesToBackend from 'i18next-resources-to-backend';
|
import resourcesToBackend from 'i18next-resources-to-backend';
|
||||||
import LanguageDetector from 'i18next-browser-languagedetector';
|
import LanguageDetector from 'i18next-browser-languagedetector';
|
||||||
import { createI18nStore, isLoading as isLoadingStore } from './store';
|
import type { i18n as i18nType } from 'i18next';
|
||||||
|
import { writable } from 'svelte/store';
|
||||||
|
|
||||||
|
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;
|
||||||
|
};
|
||||||
|
|
||||||
|
const createIsLoadingStore = (i18n: i18n) => {
|
||||||
|
const isLoading = writable(false);
|
||||||
|
|
||||||
|
// if loaded resources are empty || {}, set loading to true
|
||||||
|
i18n.on('loaded', (resources) => {
|
||||||
|
// console.log('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;
|
||||||
|
};
|
||||||
|
|
||||||
i18next
|
i18next
|
||||||
.use(
|
.use(
|
||||||
|
@ -18,13 +52,12 @@ i18next
|
||||||
},
|
},
|
||||||
fallbackLng: 'en',
|
fallbackLng: 'en',
|
||||||
ns: 'common',
|
ns: 'common',
|
||||||
// backend: {
|
|
||||||
// loadPath: '/locales/{{lng}}/{{ns}}.json'
|
|
||||||
// }
|
|
||||||
interpolation: {
|
interpolation: {
|
||||||
escapeValue: false // not needed for svelte as it escapes by default
|
escapeValue: false // not needed for svelte as it escapes by default
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
const i18n = createI18nStore(i18next);
|
const i18n = createI18nStore(i18next);
|
||||||
|
const isLoadingStore = createIsLoadingStore(i18next);
|
||||||
export default i18n;
|
export default i18n;
|
||||||
export const isLoading = isLoadingStore;
|
export const isLoading = isLoadingStore;
|
||||||
|
|
|
@ -1,34 +0,0 @@
|
||||||
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;
|
|
||||||
};
|
|
Loading…
Reference in a new issue