瀏覽代碼

feat: Get available languages from json file

Ased Mammad 1 年之前
父節點
當前提交
f4a1885298

+ 3 - 4
src/lib/components/chat/Settings/General.svelte

@@ -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}
-							<option {value}>{value}</option>
+						{#each languages as language}
+							<option value={language['code']}>{language['title']}</option>
 						{/each}
 						{/each}
 					</select>
 					</select>
 				</div>
 				</div>

+ 5 - 2
src/lib/i18n/index.ts

@@ -50,13 +50,16 @@ i18next
 			lookupQuerystring: 'lang',
 			lookupQuerystring: 'lang',
 			lookupLocalStorage: 'locale'
 			lookupLocalStorage: 'locale'
 		},
 		},
-		fallbackLng: 'en',
-		ns: 'common',
+		fallbackLng: {
+			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;

+ 0 - 0
src/lib/i18n/locales/de/common.json → src/lib/i18n/locales/de/translation.json


+ 0 - 0
src/lib/i18n/locales/en/common.json → src/lib/i18n/locales/en-US/translation.json


+ 0 - 0
src/lib/i18n/locales/fa/common.json → src/lib/i18n/locales/fa/translation.json


+ 0 - 0
src/lib/i18n/locales/fr/common.json → src/lib/i18n/locales/fr/translation.json


+ 22 - 0
src/lib/i18n/locales/languages.json

@@ -0,0 +1,22 @@
+[
+	{
+		"title": "English",
+		"code": "en-US"
+	},
+	{
+		"title": "فارسی",
+		"code": "fa"
+	},
+	{
+		"title": "Deutsch",
+		"code": "de"
+	},
+	{
+		"title": "French",
+		"code": "fr"
+	},
+	{
+		"title": "Ukrainian",
+		"code": "uk"
+	}
+]

+ 0 - 0
src/lib/i18n/locales/ua/common.json → src/lib/i18n/locales/uk/translation.json