From 90c367842f64f435ac51d162a60b5543ae106e4b Mon Sep 17 00:00:00 2001 From: utin-francis-peter Date: Thu, 4 Jul 2024 09:00:14 +0100 Subject: [PATCH 1/3] chore: added browser lang detector package by i18next --- frontend/package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/frontend/package.json b/frontend/package.json index ebcbb3f..3bc85d6 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", "react": "^18.2.0", "react-copy-to-clipboard": "^5.1.0", "react-dom": "^18.2.0", From 6727c42f1895c2534acb060d560ee6d1032d8e4c Mon Sep 17 00:00:00 2001 From: utin-francis-peter Date: Thu, 4 Jul 2024 10:05:54 +0100 Subject: [PATCH 2/3] feat: auto browser lang detection on first visit --- frontend/src/locale/i18n.ts | 42 +++++++++++++++++++++++-------------- 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/frontend/src/locale/i18n.ts b/frontend/src/locale/i18n.ts index 32b25db..02c5593 100644 --- a/frontend/src/locale/i18n.ts +++ b/frontend/src/locale/i18n.ts @@ -1,29 +1,39 @@ 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'], // checks localStorage for existing lang before browser's + caches: ['localStorage'], //stores detected lang to localStorage with i18nextLng key + lookupLocalStorage: 'docsgpt-locale', //using docsgpt-locale as the custom key for storing and retrieving the lang rather than the default `i18nextLng` }, - jp: { - translation: jp, - }, - zh: { - translation: zh, - }, - }, -}); + }); -const locale = localStorage.getItem('docsgpt-locale') ?? 'en'; -i18n.changeLanguage(locale); +const savedLocale = localStorage.getItem('docsgpt-locale') ?? i18n.language; +i18n.changeLanguage(savedLocale); export default i18n; From 16ae0725e644e08832c8846a40c16662996be042 Mon Sep 17 00:00:00 2001 From: utin-francis-peter Date: Sat, 6 Jul 2024 20:41:21 +0100 Subject: [PATCH 3/3] chore: took off the option of looking-up docsgpt-locale lang key in localStorage on first load --- frontend/src/locale/i18n.ts | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/frontend/src/locale/i18n.ts b/frontend/src/locale/i18n.ts index 02c5593..dbf5ae1 100644 --- a/frontend/src/locale/i18n.ts +++ b/frontend/src/locale/i18n.ts @@ -27,13 +27,12 @@ i18n }, fallbackLng: 'en', detection: { - order: ['localStorage', 'navigator'], // checks localStorage for existing lang before browser's - caches: ['localStorage'], //stores detected lang to localStorage with i18nextLng key - lookupLocalStorage: 'docsgpt-locale', //using docsgpt-locale as the custom key for storing and retrieving the lang rather than the default `i18nextLng` + order: ['localStorage', 'navigator'], + caches: ['localStorage'], + lookupLocalStorage: 'docsgpt-locale', }, }); -const savedLocale = localStorage.getItem('docsgpt-locale') ?? i18n.language; -i18n.changeLanguage(savedLocale); +i18n.changeLanguage(i18n.language); export default i18n;