Commit 29925017 authored by fisherdaddy's avatar fisherdaddy

chore: update language selector

parent 515af0dc
import React from 'react'; import React, { useState, useRef, useEffect } from 'react';
import { useTranslation } from '../js/i18n'; import { useTranslation } from '../js/i18n';
function LanguageSelector() { function LanguageSelector() {
const { lang, setLanguage } = useTranslation(); const { lang, setLanguage } = useTranslation();
const [isOpen, setIsOpen] = useState(false);
const dropdownRef = useRef(null);
const handleLanguageChange = (e) => { const languages = {
setLanguage(e.target.value); en: 'English',
zh: '中文',
ja: '日本語',
ko: '한국어'
}; };
const handleLanguageChange = (newLang) => {
setLanguage(newLang);
setIsOpen(false);
};
useEffect(() => {
const handleClickOutside = (event) => {
if (dropdownRef.current && !dropdownRef.current.contains(event.target)) {
setIsOpen(false);
}
};
document.addEventListener('mousedown', handleClickOutside);
return () => {
document.removeEventListener('mousedown', handleClickOutside);
};
}, []);
return ( return (
<div id="language-selector"> <div className="language-selector">
<select id="lang-select" value={lang} onChange={handleLanguageChange}> <button onClick={() => setIsOpen(!isOpen)} className="language-button">
<option value="zh">中文</option> {languages[lang]}
<option value="en">English</option> </button>
<option value="ja">日本語</option> {isOpen && (
<option value="ko">한국어</option> <ul className="language-dropdown" ref={dropdownRef}>
</select> {Object.entries(languages).map(([code, name]) => (
<li key={code} onClick={() => handleLanguageChange(code)}>
{name}
</li>
))}
</ul>
)}
</div> </div>
); );
} }
......
...@@ -155,3 +155,49 @@ footer { ...@@ -155,3 +155,49 @@ footer {
} }
} }
.language-selector {
position: relative;
display: inline-block;
}
.language-button {
background: none;
border: none;
padding: 8px 12px;
font-size: 14px;
cursor: pointer;
color: #333;
}
.language-dropdown {
position: absolute;
top: 100%;
right: 0;
background-color: white;
border-radius: 4px;
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
list-style-type: none;
padding: 0;
margin: 4px 0 0;
z-index: 1000;
max-height: 200px;
overflow-y: auto;
min-width: 120px;
}
.language-dropdown li {
padding: 8px 16px;
cursor: pointer;
}
.language-dropdown li:hover {
background-color: #f5f5f5;
}
@media (max-width: 768px) {
.language-dropdown {
right: auto;
left: 0;
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment