feat: Get available languages from json file

This commit is contained in:
Ased Mammad 2024-03-07 13:07:05 +03:30
parent 41378748b8
commit f4a1885298
8 changed files with 30 additions and 6 deletions

View file

@ -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>

View file

@ -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;

View 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"
}
]