|
|
import { useLanguage } from '@site/src/contexts/LanguageContext'; |
|
|
import React from 'react'; |
|
|
import ReactDOM from 'react-dom'; |
|
|
|
|
|
const LanguageToggleComponent = () => { |
|
|
const { currentLanguage, changeLanguage } = useLanguage(); |
|
|
|
|
|
const handleLanguageChange = (e) => { |
|
|
changeLanguage(e.target.value); |
|
|
}; |
|
|
|
|
|
return ( |
|
|
<select |
|
|
value={currentLanguage} |
|
|
onChange={handleLanguageChange} |
|
|
aria-label="Select language" |
|
|
style={{ |
|
|
backgroundColor: 'var(--ifm-navbar-link-color, #fff)', |
|
|
color: 'var(--ifm-navbar-background-color, #000)', |
|
|
border: '1px solid var(--ifm-navbar-link-color, #ccc)', |
|
|
borderRadius: '4px', |
|
|
padding: '0.25rem 0.5rem', |
|
|
fontSize: '0.8rem', |
|
|
cursor: 'pointer', |
|
|
marginLeft: '0.5rem' |
|
|
}} |
|
|
> |
|
|
<option value="en">EN</option> |
|
|
<option value="ur">UR</option> |
|
|
</select> |
|
|
); |
|
|
}; |
|
|
|
|
|
|
|
|
if (typeof window !== 'undefined') { |
|
|
|
|
|
if (document.readyState === 'loading') { |
|
|
document.addEventListener('DOMContentLoaded', () => { |
|
|
const placeholder = document.getElementById('language-toggle-placeholder'); |
|
|
if (placeholder) { |
|
|
|
|
|
const wrapper = document.createElement('div'); |
|
|
placeholder.appendChild(wrapper); |
|
|
|
|
|
|
|
|
|
|
|
ReactDOM.render( |
|
|
React.createElement(() => { |
|
|
const [currentLanguage, setCurrentLanguage] = React.useState('en'); |
|
|
|
|
|
React.useEffect(() => { |
|
|
const savedLanguage = localStorage.getItem('preferredLanguage') || 'en'; |
|
|
setCurrentLanguage(savedLanguage); |
|
|
}, []); |
|
|
|
|
|
const handleLanguageChange = (newLanguage) => { |
|
|
if (newLanguage !== currentLanguage) { |
|
|
setCurrentLanguage(newLanguage); |
|
|
localStorage.setItem('preferredLanguage', newLanguage); |
|
|
|
|
|
|
|
|
window.dispatchEvent(new CustomEvent('languageChange', { |
|
|
detail: { newLanguage } |
|
|
})); |
|
|
} |
|
|
}; |
|
|
|
|
|
return ( |
|
|
<select |
|
|
value={currentLanguage} |
|
|
onChange={(e) => handleLanguageChange(e.target.value)} |
|
|
aria-label="Select language" |
|
|
style={{ |
|
|
backgroundColor: 'var(--ifm-navbar-link-color, #fff)', |
|
|
color: 'var(--ifm-navbar-background-color, #000)', |
|
|
border: '1px solid var(--ifm-navbar-link-color, #ccc)', |
|
|
borderRadius: '4px', |
|
|
padding: '0.25rem 0.5rem', |
|
|
fontSize: '0.8rem', |
|
|
cursor: 'pointer', |
|
|
marginLeft: '0.5rem' |
|
|
}} |
|
|
> |
|
|
<option value="en">EN</option> |
|
|
<option value="ur">UR</option> |
|
|
</select> |
|
|
); |
|
|
}), |
|
|
wrapper |
|
|
); |
|
|
} |
|
|
}); |
|
|
} else { |
|
|
|
|
|
const placeholder = document.getElementById('language-toggle-placeholder'); |
|
|
if (placeholder) { |
|
|
const wrapper = document.createElement('div'); |
|
|
placeholder.appendChild(wrapper); |
|
|
|
|
|
ReactDOM.render( |
|
|
React.createElement(() => { |
|
|
const [currentLanguage, setCurrentLanguage] = React.useState('en'); |
|
|
|
|
|
React.useEffect(() => { |
|
|
const savedLanguage = localStorage.getItem('preferredLanguage') || 'en'; |
|
|
setCurrentLanguage(savedLanguage); |
|
|
}, []); |
|
|
|
|
|
const handleLanguageChange = (newLanguage) => { |
|
|
if (newLanguage !== currentLanguage) { |
|
|
setCurrentLanguage(newLanguage); |
|
|
localStorage.setItem('preferredLanguage', newLanguage); |
|
|
|
|
|
|
|
|
window.dispatchEvent(new CustomEvent('languageChange', { |
|
|
detail: { newLanguage } |
|
|
})); |
|
|
} |
|
|
}; |
|
|
|
|
|
return ( |
|
|
<select |
|
|
value={currentLanguage} |
|
|
onChange={(e) => handleLanguageChange(e.target.value)} |
|
|
aria-label="Select language" |
|
|
style={{ |
|
|
backgroundColor: 'var(--ifm-navbar-link-color, #fff)', |
|
|
color: 'var(--ifm-navbar-background-color, #000)', |
|
|
border: '1px solid var(--ifm-navbar-link-color, #ccc)', |
|
|
borderRadius: '4px', |
|
|
padding: '0.25rem 0.5rem', |
|
|
fontSize: '0.8rem', |
|
|
cursor: 'pointer', |
|
|
marginLeft: '0.5rem' |
|
|
}} |
|
|
> |
|
|
<option value="en">EN</option> |
|
|
<option value="ur">UR</option> |
|
|
</select> |
|
|
); |
|
|
}), |
|
|
wrapper |
|
|
); |
|
|
} |
|
|
} |
|
|
} |