Skip to content

Commit 8ee30e3

Browse files
committed
fix: everytime no query param or selected language by user, set browser language
1 parent cd389b8 commit 8ee30e3

File tree

3 files changed

+25
-8
lines changed

3 files changed

+25
-8
lines changed

src/core/hooks/useSwitchLanguage.tsx

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,23 @@
1-
import i18next from 'i18next';
21
import { useState } from 'react';
2+
import { useTranslation } from 'react-i18next';
3+
import { useSearchParams } from 'react-router-dom';
34
import { supportedLanguages } from 'src/constants/constants';
45

56
const useSwitchLanguage = (defaultLanguage = 'en') => {
6-
const [selectedLanguage, setSelectedLanguage] = useState(() => {
7-
return localStorage.getItem('i18nextLng') || defaultLanguage;
8-
});
7+
const { i18n } = useTranslation();
8+
const [selectedLanguage, setSelectedLanguage] = useState(i18n.language || defaultLanguage);
9+
const [searchParams, setSearchParams] = useSearchParams();
10+
const queryLang = searchParams.get('lang');
911

1012
const switchLanguage = language => {
1113
if (supportedLanguages.map(lang => lang.value).includes(language)) {
1214
setSelectedLanguage(language);
13-
i18next.changeLanguage(language);
15+
i18n.changeLanguage(language);
16+
localStorage.setItem('lang', language);
17+
if (queryLang) {
18+
searchParams.set('lang', language);
19+
setSearchParams(searchParams);
20+
}
1421
window.location.reload();
1522
} else {
1623
console.warn(`Language '${language}' is not supported.`);

src/core/translation/i18n.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,21 @@ const resources = {
2222
},
2323
};
2424

25+
const savedLang = localStorage.getItem('lang');
26+
const queryLang = new URLSearchParams(window.location.search).get('lang');
27+
const browserLang = navigator.language.split('-')[0];
28+
if (queryLang) {
29+
localStorage.setItem('lang', queryLang);
30+
}
31+
32+
const language = queryLang || savedLang || browserLang || 'en';
33+
2534
i18next
2635
.use(detector)
2736
.use(initReactI18next)
2837
.init({
2938
resources,
30-
lng: localStorage.getItem('i18nextLng') || navigator.language || 'en',
39+
lng: language,
3140
fallbackLng: 'en',
3241
interpolation: {
3342
escapeValue: false,

src/modules/settings/components/Language/useLanguage.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1-
import i18next from 'i18next';
21
import { useState } from 'react';
2+
import { useTranslation } from 'react-i18next';
33
import { supportedLanguages } from 'src/constants/constants';
44
import useSwitchLanguage from 'src/core/hooks/useSwitchLanguage';
55

66
export const useLanguage = () => {
7+
const { i18n } = useTranslation();
78
const { switchLanguage, selectedLanguage: initialLanguage } = useSwitchLanguage();
89
const getLanguageOption = lang => {
910
const languageMap = supportedLanguages.reduce((map, { value, label }) => {
@@ -22,7 +23,7 @@ export const useLanguage = () => {
2223
// Reset the selected language to the last saved state
2324
const onCancel = () => {
2425
setUnsavedValue(unsavedValue);
25-
i18next.changeLanguage(unsavedValue.value);
26+
i18n.changeLanguage(unsavedValue.value);
2627
};
2728

2829
return { onSave, onCancel, unsavedValue, setUnsavedValue };

0 commit comments

Comments
 (0)