From 54ab0e9862b83c757879c5a079a4946da17f9418 Mon Sep 17 00:00:00 2001 From: joostdecock Date: Fri, 7 Apr 2023 17:33:45 +0200 Subject: [PATCH] wip(org): New modal language picker --- sites/org/components/header/index.mjs | 14 ++++-- .../components/locale-picker/locales.en.yaml | 1 + .../shared/components/modal/locale-picker.mjs | 49 +++++++++++++++++++ 3 files changed, 60 insertions(+), 4 deletions(-) create mode 100644 sites/shared/components/modal/locale-picker.mjs diff --git a/sites/org/components/header/index.mjs b/sites/org/components/header/index.mjs index c4b1b5be3aa..abbb3171d3d 100644 --- a/sites/org/components/header/index.mjs +++ b/sites/org/components/header/index.mjs @@ -24,6 +24,8 @@ import { WordMark } from 'shared/components/wordmark.mjs' import Link from 'next/link' import { useTranslation } from 'next-i18next' import { ModalThemePicker } from 'shared/components/modal/theme-picker.mjs' +import { ModalLocalePicker } from 'shared/components/modal/locale-picker.mjs' +import { Search, ns as searchNs } from 'site/components/search.mjs' export const ns = [...new Set(['header', ...themeNs, ...localeNs])] @@ -52,7 +54,7 @@ const NavSpacer = () => (
|
) -const NavIcons = ({ app }) => { +const NavIcons = ({ app, setSearch }) => { const { t } = useTranslation(['header']) const iconSize = 'h-6 w-6 lg:h-12 lg:w-12' @@ -95,7 +97,11 @@ const NavIcons = ({ app }) => { > - + app.setModal()} + label={t('header:language')} + color="indigo" + > setSearch(true)} label={t('header:search')} color="violet"> @@ -147,12 +153,12 @@ export const Header = ({ app, setSearch }) => {
{/* Non-mobile content */}
- +
{/* Mobile content */}
- +
diff --git a/sites/shared/components/locale-picker/locales.en.yaml b/sites/shared/components/locale-picker/locales.en.yaml index f66de4caa96..d30e4e3a479 100644 --- a/sites/shared/components/locale-picker/locales.en.yaml +++ b/sites/shared/components/locale-picker/locales.en.yaml @@ -3,3 +3,4 @@ en: English es: Spanish fr: French nl: Dutch +chooseYourLanguage: Choose your language diff --git a/sites/shared/components/modal/locale-picker.mjs b/sites/shared/components/modal/locale-picker.mjs new file mode 100644 index 00000000000..00d74d30bd9 --- /dev/null +++ b/sites/shared/components/modal/locale-picker.mjs @@ -0,0 +1,49 @@ +// Dependencies +import { Fragment } from 'react' +import { useRouter } from 'next/router' +import { useTranslation } from 'next-i18next' +import { Popover, Transition } from '@headlessui/react' +import Link from 'next/link' +// Components +import { I18nIcon, DownIcon } from 'shared/components/icons.mjs' +// Languages +import en from 'site/public/locales/en/locales.json' +import es from 'site/public/locales/es/locales.json' +import de from 'site/public/locales/de/locales.json' +import fr from 'site/public/locales/fr/locales.json' +import nl from 'site/public/locales/nl/locales.json' + +export const ns = ['locales'] + +const translations = { + en: en.en, + es: es.es, + nl: nl.nl, + de: de.de, + fr: fr.fr, +} + +export const ModalLocalePicker = ({ iconOnly = false, bottom = false }) => { + const { t } = useTranslation(ns) + const router = useRouter() + + return ( +
+

{t('locales:chooseYourLanguage')}

+ {router.locales.map((locale) => ( + + {t(locale)} + + {translations[locale]} + + ))} +
+ ) +}