Improved language picker

This commit is contained in:
2026-08-16 21:35:52 +03:00
parent dd90d250c6
commit e535fadde2
3 changed files with 48 additions and 21 deletions

View File

@@ -7,17 +7,24 @@ export default function LanguagePicker() {
const [language, setLanguage] = useAtom(languageState); const [language, setLanguage] = useAtom(languageState);
const t = getTranslations(language); const t = getTranslations(language);
const toggleLanguage = () => {
setLanguage(language === 'en' ? 'fi' : 'en');
};
return ( return (
<div className={styles.picker}>
<button <button
className={styles.picker} className={styles.flag}
onClick={toggleLanguage} onClick={() => setLanguage('fi')}
aria-label={`Switch to ${language === 'en' ? t.languages.fi : t.languages.en}`} aria-label={`Switch to ${t.languages.fi}`}
aria-pressed={language === 'fi'}
> >
<span className={styles.label}>{language === 'en' ? 'FI' : 'EN'}</span> <span className={styles.flagIcon}>🇫🇮</span>
</button> </button>
<button
className={styles.flag}
onClick={() => setLanguage('en')}
aria-label={`Switch to ${t.languages.en}`}
aria-pressed={language === 'en'}
>
<span className={styles.flagIcon}>🇬🇧</span>
</button>
</div>
); );
} }

View File

@@ -6,4 +6,6 @@ export const activeSectionState = atom('home');
export const themeState = atom('dark'); export const themeState = atom('dark');
export const languageState = atom('en'); export const languageState = atom(
typeof navigator !== 'undefined' && navigator.language?.startsWith('fi') ? 'fi' : 'en'
);

View File

@@ -1,27 +1,45 @@
@use '../variables' as *; @use '../variables' as *;
.picker { .picker {
display: flex;
gap: 0.25rem;
background: transparent; background: transparent;
border: 1px solid var(--text-secondary); border: 1px solid var(--text-secondary);
border-radius: 4px; border-radius: 4px;
padding: 0.4rem 0.8rem; padding: 0.2rem;
color: var(--text-primary);
@media (max-width: 768px) {
padding: 0.15rem;
gap: 0.15rem;
}
}
.flag {
background: transparent;
border: none;
cursor: pointer; cursor: pointer;
font-size: 0.85rem; padding: 0.2rem;
font-weight: 500; border-radius: 2px;
transition: all 0.2s ease; transition: all 0.2s ease;
&[aria-pressed='false'] {
opacity: 0.6;
}
&:hover { &:hover {
border-color: var(--accent); opacity: 1;
color: var(--accent);
} }
@media (max-width: 768px) { @media (max-width: 768px) {
padding: 0.35rem 0.6rem; padding: 0.15rem;
font-size: 0.8rem;
} }
} }
.label { .flagIcon {
font-size: 1.1rem;
display: inline-block; display: inline-block;
@media (max-width: 768px) {
font-size: 1rem;
}
} }