@@ -6,6 +6,8 @@ import classes from "./header.module.css";
6
6
import Image from "next/image" ;
7
7
import Link from "next/link" ;
8
8
import { usePathname } from "next/navigation" ;
9
+ import { LanguageSwitcher } from "next-export-i18n" ;
10
+ import React , { useState , useEffect } from "react" ;
9
11
10
12
const links = [
11
13
{ link : "/" , label : "About Ruffle" } ,
@@ -21,8 +23,45 @@ const links = [
21
23
target : "_blank" ,
22
24
} ,
23
25
] ;
26
+ const languages : Record < string , string > = {
27
+ en : "English" ,
28
+ es : "Español" ,
29
+ } ;
24
30
25
31
export function Header ( ) {
32
+ const [ selectedLang , setSelectedLang ] = useState ( "en" ) ;
33
+ useEffect ( ( ) => {
34
+ if ( typeof window !== "undefined" ) {
35
+ const browserLang =
36
+ window . navigator . language || window . navigator . languages
37
+ ? ( window . navigator . language || window . navigator . languages [ 0 ] )
38
+ . split ( "-" ) [ 0 ]
39
+ . toLowerCase ( )
40
+ : "en" ;
41
+ setSelectedLang ( browserLang ) ;
42
+ const selectedLang = window . localStorage
43
+ ? window . localStorage . getItem ( "next-export-i18n-lang" )
44
+ : null ;
45
+ if ( selectedLang ) {
46
+ setSelectedLang ( selectedLang ) ;
47
+ }
48
+ }
49
+ } , [ ] ) ;
50
+
51
+ const handleLanguageChange = (
52
+ event : React . ChangeEvent < HTMLSelectElement > ,
53
+ ) => {
54
+ const newLang = event . target . value ;
55
+ setSelectedLang ( newLang ) ;
56
+ // Trigger the LanguageSwitcher programmatically
57
+ const languageSwitcher = document . querySelector (
58
+ `[data-language-switcher][aria-label='set language to ${ newLang } ']` ,
59
+ ) as HTMLElement ;
60
+ if ( languageSwitcher ) {
61
+ languageSwitcher . click ( ) ;
62
+ }
63
+ } ;
64
+
26
65
const [ opened , { toggle, close } ] = useDisclosure ( false ) ;
27
66
const pathname = usePathname ( ) ;
28
67
@@ -43,7 +82,7 @@ export function Header() {
43
82
44
83
return (
45
84
< header className = { classes . header } >
46
- < Container size = "md " className = { classes . inner } >
85
+ < Container size = "lg " className = { classes . inner } >
47
86
< Link href = "/" >
48
87
< Image
49
88
src = "/logo.svg"
@@ -55,7 +94,19 @@ export function Header() {
55
94
</ Link >
56
95
< Group gap = { 5 } visibleFrom = "md" >
57
96
{ items }
97
+ < select value = { selectedLang } onChange = { handleLanguageChange } >
98
+ { Object . entries ( languages ) . map ( ( [ langCode , langName ] ) => (
99
+ < option key = { langCode } value = { langCode } >
100
+ { langName }
101
+ </ option >
102
+ ) ) }
103
+ </ select >
58
104
</ Group > { " " }
105
+ { Object . keys ( languages ) . map ( ( langCode ) => (
106
+ < LanguageSwitcher key = { langCode } lang = { langCode } >
107
+ { languages [ langCode ] }
108
+ </ LanguageSwitcher >
109
+ ) ) }
59
110
< Drawer
60
111
opened = { opened }
61
112
onClose = { close }
@@ -69,6 +120,17 @@ export function Header() {
69
120
>
70
121
{ items }
71
122
</ Drawer >
123
+ < select
124
+ className = { classes . hiddenOnDesktop }
125
+ value = { selectedLang }
126
+ onChange = { handleLanguageChange }
127
+ >
128
+ { Object . entries ( languages ) . map ( ( [ langCode , langName ] ) => (
129
+ < option key = { langCode } value = { langCode } >
130
+ { langName }
131
+ </ option >
132
+ ) ) }
133
+ </ select >
72
134
< Burger
73
135
opened = { opened }
74
136
onClick = { toggle }
0 commit comments