Browse Source

wip: Set default language from config

Ased Mammad 1 year ago
parent
commit
26121c5d88
4 changed files with 39 additions and 29 deletions
  1. 1 0
      backend/data/config.json
  2. 2 4
      backend/main.py
  3. 30 24
      src/lib/i18n/index.ts
  4. 6 1
      src/routes/+layout.svelte

+ 1 - 0
backend/data/config.json

@@ -1,6 +1,7 @@
 {
 {
     "version": 0,
     "version": 0,
     "ui": {
     "ui": {
+	"locale": "en-US",
         "prompt_suggestions": [
         "prompt_suggestions": [
             {
             {
                 "title": [
                 "title": [

+ 2 - 4
backend/main.py

@@ -32,6 +32,7 @@ from utils.utils import get_admin_user
 from apps.rag.utils import rag_messages
 from apps.rag.utils import rag_messages
 
 
 from config import (
 from config import (
+    CONFIG_DATA,
     WEBUI_NAME,
     WEBUI_NAME,
     ENV,
     ENV,
     VERSION,
     VERSION,
@@ -88,7 +89,6 @@ class RAGMiddleware(BaseHTTPMiddleware):
             # Example: Add a new key-value pair or modify existing ones
             # Example: Add a new key-value pair or modify existing ones
             # data["modified"] = True  # Example modification
             # data["modified"] = True  # Example modification
             if "docs" in data:
             if "docs" in data:
-
                 data = {**data}
                 data = {**data}
                 data["messages"] = rag_messages(
                 data["messages"] = rag_messages(
                     data["docs"],
                     data["docs"],
@@ -163,11 +163,11 @@ app.mount("/rag/api/v1", rag_app)
 
 
 @app.get("/api/config")
 @app.get("/api/config")
 async def get_app_config():
 async def get_app_config():
-
     return {
     return {
         "status": True,
         "status": True,
         "name": WEBUI_NAME,
         "name": WEBUI_NAME,
         "version": VERSION,
         "version": VERSION,
+        "locale": CONFIG_DATA["ui"]["locale"],
         "images": images_app.state.ENABLED,
         "images": images_app.state.ENABLED,
         "default_models": webui_app.state.DEFAULT_MODELS,
         "default_models": webui_app.state.DEFAULT_MODELS,
         "default_prompt_suggestions": webui_app.state.DEFAULT_PROMPT_SUGGESTIONS,
         "default_prompt_suggestions": webui_app.state.DEFAULT_PROMPT_SUGGESTIONS,
@@ -191,7 +191,6 @@ class ModelFilterConfigForm(BaseModel):
 async def update_model_filter_config(
 async def update_model_filter_config(
     form_data: ModelFilterConfigForm, user=Depends(get_admin_user)
     form_data: ModelFilterConfigForm, user=Depends(get_admin_user)
 ):
 ):
-
     app.state.MODEL_FILTER_ENABLED = form_data.enabled
     app.state.MODEL_FILTER_ENABLED = form_data.enabled
     app.state.MODEL_FILTER_LIST = form_data.models
     app.state.MODEL_FILTER_LIST = form_data.models
 
 
@@ -231,7 +230,6 @@ async def update_webhook_url(form_data: UrlForm, user=Depends(get_admin_user)):
 
 
 @app.get("/api/version")
 @app.get("/api/version")
 async def get_app_config():
 async def get_app_config():
-
     return {
     return {
         "version": VERSION,
         "version": VERSION,
     }
     }

+ 30 - 24
src/lib/i18n/index.ts

@@ -37,30 +37,36 @@ const createIsLoadingStore = (i18n: i18nType) => {
 	return isLoading;
 	return isLoading;
 };
 };
 
 
-i18next
-	.use(
-		resourcesToBackend(
-			(language: string, namespace: string) => import(`./locales/${language}/${namespace}.json`)
-		)
-	)
-	.use(LanguageDetector)
-	.init({
-		debug: false,
-		detection: {
-			order: ['querystring', 'localStorage', 'navigator'],
-			caches: ['localStorage'],
-			lookupQuerystring: 'lang',
-			lookupLocalStorage: 'locale'
-		},
-		fallbackLng: {
-			default: ['en-US']
-		},
-		ns: 'translation',
-		returnEmptyString: false,
-		interpolation: {
-			escapeValue: false // not needed for svelte as it escapes by default
-		}
-	});
+export const initI18n = (defaultLocale: string) => {
+	let detectionOrder = defaultLocale
+		? ['querystring', 'localStorage']
+		: ['querystring', 'localStorage', 'navigator'];
+	let fallbackDefaultLocale = defaultLocale ? [defaultLocale] : ['en-US'];
+
+	const loadResource = (language: string, namespace: string) =>
+		import(`./locales/${language}/${namespace}.json`);
+
+	i18next
+		.use(resourcesToBackend(loadResource))
+		.use(LanguageDetector)
+		.init({
+			debug: false,
+			detection: {
+				order: detectionOrder,
+				caches: ['localStorage'],
+				lookupQuerystring: 'lang',
+				lookupLocalStorage: 'locale'
+			},
+			fallbackLng: {
+				default: fallbackDefaultLocale
+			},
+			ns: 'translation',
+			returnEmptyString: false,
+			interpolation: {
+				escapeValue: false // not needed for svelte as it escapes by default
+			}
+		});
+};
 
 
 const i18n = createI18nStore(i18next);
 const i18n = createI18nStore(i18next);
 const isLoadingStore = createIsLoadingStore(i18next);
 const isLoadingStore = createIsLoadingStore(i18next);

+ 6 - 1
src/routes/+layout.svelte

@@ -11,7 +11,7 @@
 	import '../tailwind.css';
 	import '../tailwind.css';
 	import 'tippy.js/dist/tippy.css';
 	import 'tippy.js/dist/tippy.css';
 	import { WEBUI_BASE_URL } from '$lib/constants';
 	import { WEBUI_BASE_URL } from '$lib/constants';
-	import i18n from '$lib/i18n';
+	import i18n, { initI18n } from '$lib/i18n';
 
 
 	setContext('i18n', i18n);
 	setContext('i18n', i18n);
 
 
@@ -25,6 +25,11 @@
 		if (backendConfig) {
 		if (backendConfig) {
 			// Save Backend Status to Store
 			// Save Backend Status to Store
 			await config.set(backendConfig);
 			await config.set(backendConfig);
+			if ($config.locale) {
+				initI18n($config.locale);
+			} else {
+				initI18n();
+			}
 
 
 			await WEBUI_NAME.set(backendConfig.name);
 			await WEBUI_NAME.set(backendConfig.name);
 			console.log(backendConfig);
 			console.log(backendConfig);