-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathLanguageSwitcher.js
146 lines (116 loc) · 4.29 KB
/
LanguageSwitcher.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
"use client";
import React, { useEffect } from 'react';
import i18next from './i18n'; // Adjust the path accordingly
import { useRouter } from 'next/router';
const LanguageSwitcher = () => {
const router = useRouter();
const changeLanguage = (lang) => {
// Change the language in i18next
i18next.changeLanguage(lang);
// Save the language preference in localStorage
localStorage.setItem('lang', lang);
// Update the router with the new language without navigating to a new page
router.push({ pathname: router.pathname, query: { lang } });
};
// Use useEffect to set the initial language in i18next
useEffect(() => {
// Get the language from localStorage or use 'en' as the default
const lang = localStorage.getItem('lang') || 'en';
// Set the initial language in i18next
i18next.changeLanguage(lang);
}, []);
return (
<div>
<select onChange={(e) => changeLanguage(e.target.value)} className='block w-full px-2 border rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm">'>
{/* <select onChange={(e) => changeLanguage(e.target.value)} className='block w-full px-2 py-2 border rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm">'> */}
<option value="en">English</option>
<option value="fr">French</option>
</select>
</div>
);
};
export default LanguageSwitcher;
/* import React, { useEffect } from 'react';
import i18next from './i18n'; // Adjust the path accordingly
import { useRouter } from 'next/navigation';
const LanguageSwitcher = () => {
const router = useRouter();
const changeLanguage = (lang) => {
i18next.changeLanguage(lang);
localStorage.setItem('lang', lang);
router.push(`/${lang}`)
};
// Use useEffect to set the initial language in the URL
useEffect(() => {
const lang = localStorage.getItem('lang') || 'en';
// Check if router is available before calling push
router.push(`/${lang}`)
}, [router]);
return (
<div>
<select onChange={(e) => changeLanguage(e.target.value)}>
<option value="en">English</option>
<option value="fr">French</option>
</select>
</div>
);
};
export default LanguageSwitcher; */
/* "use client";
// Import the necessary modules
import React, { useEffect } from 'react';
import i18next from './i18n'; // Adjust the path accordingly
import { useRouter,usePathname } from 'next/navigation';
// Define the LanguageSwitcher component
const LanguageSwitcher = () => {
const pathname = usePathname();
//console.log(pathname) ;
// Access the router object
const router = useRouter();
const currentUrl = router.asPath ? router.asPath : '/';
//const currentUrl = window.location.href;
// Define the function to change the language
const changeLanguage = (lang) => {
console.log("switched");
// Check if router is available
if (router) {
console.log("router");
// Check if router.asPath is defined
if (router.asPath) {
console.log("router.asPath");
// Split the pathname using '/' as the delimiter
const segments = pathname.split('/');
// Find the index of the language code
const languageIndex = segments.indexOf(segments[1]);
// Extract the part after the language code
const afterLanguage = segments.slice(languageIndex + 1).join('/');
console.log("afterlang"+afterLanguage);
// Use the replace option to update only the language part of the URL
router.replace(`/${lang}/${afterLanguage}`);
localStorage.setItem('lang', lang);
}
}
};
// Use useEffect to set the initial language in the URL
useEffect(() => {
// Get the language from localStorage or use 'en' as the default
const lang = localStorage.getItem('lang') || 'en';
// Check if router is available before calling push
if (router) {
router.push(`/${lang}`);
console.log("router.push");
}
}, [router]);
// Return the component JSX
return (
<div>
<select onChange={(e) => changeLanguage(e.target.value)}>
<option value="en">English</option>
<option value="fr">French</option>
</select>
</div>
);
};
// Export the LanguageSwitcher component
export default LanguageSwitcher;
*/