forked from open-webui/open-webui
feat: Get available languages from json file
This commit is contained in:
parent
41378748b8
commit
f4a1885298
8 changed files with 30 additions and 6 deletions
|
@ -1,6 +1,7 @@
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { toast } from 'svelte-sonner';
|
import { toast } from 'svelte-sonner';
|
||||||
import { createEventDispatcher, onMount, getContext } from 'svelte';
|
import { createEventDispatcher, onMount, getContext } from 'svelte';
|
||||||
|
import { languages } from '$lib/i18n';
|
||||||
const dispatch = createEventDispatcher();
|
const dispatch = createEventDispatcher();
|
||||||
|
|
||||||
import { models, user } from '$lib/stores';
|
import { models, user } from '$lib/stores';
|
||||||
|
@ -16,7 +17,6 @@
|
||||||
let themes = ['dark', 'light', 'rose-pine dark', 'rose-pine-dawn light'];
|
let themes = ['dark', 'light', 'rose-pine dark', 'rose-pine-dawn light'];
|
||||||
let theme = 'dark';
|
let theme = 'dark';
|
||||||
// TODO: Get these dynamically from the i18n module
|
// TODO: Get these dynamically from the i18n module
|
||||||
let languages = ['en', 'fa', 'fr', 'de', 'ua'];
|
|
||||||
let lang = $i18n.language;
|
let lang = $i18n.language;
|
||||||
let notificationEnabled = false;
|
let notificationEnabled = false;
|
||||||
let system = '';
|
let system = '';
|
||||||
|
@ -134,12 +134,11 @@
|
||||||
bind:value={lang}
|
bind:value={lang}
|
||||||
placeholder="Select a language"
|
placeholder="Select a language"
|
||||||
on:change={(e) => {
|
on:change={(e) => {
|
||||||
console.log($i18n);
|
|
||||||
$i18n.changeLanguage(lang);
|
$i18n.changeLanguage(lang);
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{#each languages as value}
|
{#each languages as language}
|
||||||
<option {value}>{value}</option>
|
<option value={language['code']}>{language['title']}</option>
|
||||||
{/each}
|
{/each}
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -50,13 +50,16 @@ i18next
|
||||||
lookupQuerystring: 'lang',
|
lookupQuerystring: 'lang',
|
||||||
lookupLocalStorage: 'locale'
|
lookupLocalStorage: 'locale'
|
||||||
},
|
},
|
||||||
fallbackLng: 'en',
|
fallbackLng: {
|
||||||
ns: 'common',
|
default: ['en-US']
|
||||||
|
},
|
||||||
|
ns: 'translation',
|
||||||
interpolation: {
|
interpolation: {
|
||||||
escapeValue: false // not needed for svelte as it escapes by default
|
escapeValue: false // not needed for svelte as it escapes by default
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
export const languages = (await import(`./locales/languages.json`)).default;
|
||||||
const i18n = createI18nStore(i18next);
|
const i18n = createI18nStore(i18next);
|
||||||
const isLoadingStore = createIsLoadingStore(i18next);
|
const isLoadingStore = createIsLoadingStore(i18next);
|
||||||
export default i18n;
|
export default i18n;
|
||||||
|
|
22
src/lib/i18n/locales/languages.json
Normal file
22
src/lib/i18n/locales/languages.json
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"title": "English",
|
||||||
|
"code": "en-US"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "فارسی",
|
||||||
|
"code": "fa"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Deutsch",
|
||||||
|
"code": "de"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "French",
|
||||||
|
"code": "fr"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Ukrainian",
|
||||||
|
"code": "uk"
|
||||||
|
}
|
||||||
|
]
|
Loading…
Reference in a new issue