diff --git a/extensions/web-widget/package-lock.json b/extensions/web-widget/package-lock.json
index addedafe..05466a04 100644
--- a/extensions/web-widget/package-lock.json
+++ b/extensions/web-widget/package-lock.json
@@ -152,12 +152,12 @@
}
},
"node_modules/braces": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
"dev": true,
"dependencies": {
- "fill-range": "^7.0.1"
+ "fill-range": "^7.1.1"
},
"engines": {
"node": ">=8"
@@ -294,9 +294,9 @@
}
},
"node_modules/fill-range": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
- "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
"dev": true,
"dependencies": {
"to-regex-range": "^5.0.1"
diff --git a/frontend/package.json b/frontend/package.json
index 5f7a11d8..5edec918 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -22,6 +22,7 @@
"@reduxjs/toolkit": "^1.9.2",
"@vercel/analytics": "^0.1.10",
"i18next": "^23.11.5",
+ "i18next-browser-languagedetector": "^8.0.0",
"prop-types": "^15.8.1",
"react": "^18.2.0",
"react-copy-to-clipboard": "^5.1.0",
diff --git a/frontend/src/conversation/ConversationBubble.tsx b/frontend/src/conversation/ConversationBubble.tsx
index 32f55a62..fc5d469e 100644
--- a/frontend/src/conversation/ConversationBubble.tsx
+++ b/frontend/src/conversation/ConversationBubble.tsx
@@ -53,7 +53,7 @@ const ConversationBubble = forwardRef<
bubble = (
-
-
+
+
-
-
-
+ >
+
+
-
-
-
-
+
+
+
+ {
- handleFeedback?.('LIKE');
- setIsLikeClicked(true);
- setIsDislikeClicked(false);
- }}
- onMouseEnter={() => setIsLikeHovered(true)}
- onMouseLeave={() => setIsLikeHovered(false)}
- >
-
+ onClick={() => {
+ handleFeedback?.('LIKE');
+ setIsLikeClicked(true);
+ setIsDislikeClicked(false);
+ }}
+ onMouseEnter={() => setIsLikeHovered(true)}
+ onMouseLeave={() => setIsLikeHovered(false)}
+ >
-
-
-
+
+
+
+
- {
- handleFeedback?.('DISLIKE');
- setIsDislikeClicked(true);
- setIsLikeClicked(false);
- }}
- onMouseEnter={() => setIsDislikeHovered(true)}
- onMouseLeave={() => setIsDislikeHovered(false)}
- >
-
+ onClick={() => {
+ handleFeedback?.('DISLIKE');
+ setIsDislikeClicked(true);
+ setIsLikeClicked(false);
+ }}
+ onMouseEnter={() => setIsDislikeHovered(true)}
+ onMouseLeave={() => setIsDislikeHovered(false)}
+ >
diff --git a/frontend/src/locale/i18n.ts b/frontend/src/locale/i18n.ts
index 32b25db7..dbf5ae1b 100644
--- a/frontend/src/locale/i18n.ts
+++ b/frontend/src/locale/i18n.ts
@@ -1,29 +1,38 @@
import i18n from 'i18next';
import { initReactI18next } from 'react-i18next';
+import LanguageDetector from 'i18next-browser-languagedetector';
import en from './en.json'; //English
import es from './es.json'; //Spanish
import jp from './jp.json'; //Japanese
import zh from './zh.json'; //Mandarin
-i18n.use(initReactI18next).init({
- resources: {
- en: {
- translation: en,
+i18n
+ .use(LanguageDetector)
+ .use(initReactI18next)
+ .init({
+ resources: {
+ en: {
+ translation: en,
+ },
+ es: {
+ translation: es,
+ },
+ jp: {
+ translation: jp,
+ },
+ zh: {
+ translation: zh,
+ },
},
- es: {
- translation: es,
+ fallbackLng: 'en',
+ detection: {
+ order: ['localStorage', 'navigator'],
+ caches: ['localStorage'],
+ lookupLocalStorage: 'docsgpt-locale',
},
- jp: {
- translation: jp,
- },
- zh: {
- translation: zh,
- },
- },
-});
+ });
-const locale = localStorage.getItem('docsgpt-locale') ?? 'en';
-i18n.changeLanguage(locale);
+i18n.changeLanguage(i18n.language);
export default i18n;