Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
A
ai-box
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
青山
ai-box
Commits
29925017
Commit
29925017
authored
Sep 12, 2024
by
fisherdaddy
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
chore: update language selector
parent
515af0dc
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
85 additions
and
10 deletions
+85
-10
LanguageSelector.jsx
src/components/LanguageSelector.jsx
+39
-10
main.css
src/styles/main.css
+46
-0
No files found.
src/components/LanguageSelector.jsx
View file @
29925017
import
React
from
'react'
;
import
React
,
{
useState
,
useRef
,
useEffect
}
from
'react'
;
import
{
useTranslation
}
from
'../js/i18n'
;
function
LanguageSelector
()
{
const
{
lang
,
setLanguage
}
=
useTranslation
();
const
[
isOpen
,
setIsOpen
]
=
useState
(
false
);
const
dropdownRef
=
useRef
(
null
);
const
handleLanguageChange
=
(
e
)
=>
{
setLanguage
(
e
.
target
.
value
);
const
languages
=
{
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
(
<
div
id=
"language-selector"
>
<
select
id=
"lang-select"
value=
{
lang
}
onChange=
{
handleLanguageChange
}
>
<
option
value=
"zh"
>
中文
</
option
>
<
option
value=
"en"
>
English
</
option
>
<
option
value=
"ja"
>
日本語
</
option
>
<
option
value=
"ko"
>
한국어
</
option
>
</
select
>
<
div
className=
"language-selector"
>
<
button
onClick=
{
()
=>
setIsOpen
(
!
isOpen
)
}
className=
"language-button"
>
{
languages
[
lang
]
}
</
button
>
{
isOpen
&&
(
<
ul
className=
"language-dropdown"
ref=
{
dropdownRef
}
>
{
Object
.
entries
(
languages
).
map
(([
code
,
name
])
=>
(
<
li
key=
{
code
}
onClick=
{
()
=>
handleLanguageChange
(
code
)
}
>
{
name
}
</
li
>
))
}
</
ul
>
)
}
</
div
>
);
}
...
...
src/styles/main.css
View file @
29925017
...
...
@@ -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
;
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment