| 6 | import "./language-picker.css" |
| 7 | |
| 8 | export function LanguagePicker(props: { align?: "left" | "right" } = {}) { |
| 9 | const language = useLanguage() |
| 10 | const navigate = useNavigate() |
| 11 | const location = useLocation() |
| 12 | const [open, setOpen] = createSignal(false) |
| 13 | |
| 14 | return ( |
| 15 | <div data-component="language-picker"> |
| 16 | <Dropdown |
| 17 | trigger={language.label(language.locale())} |
| 18 | align={props.align ?? "left"} |
| 19 | open={open()} |
| 20 | onOpenChange={setOpen} |
| 21 | > |
| 22 | <For each={language.locales}> |
| 23 | {(locale) => ( |
| 24 | <DropdownItem |
| 25 | selected={locale === language.locale()} |
| 26 | onClick={() => { |
| 27 | language.setLocale(locale) |
| 28 | const href = `${route(locale, strip(location.pathname))}${location.search}${location.hash}` |
| 29 | if (href !== `${location.pathname}${location.search}${location.hash}`) navigate(href) |
| 30 | setOpen(false) |
| 31 | }} |
| 32 | > |
| 33 | {language.label(locale)} |
| 34 | </DropdownItem> |
| 35 | )} |
| 36 | </For> |
| 37 | </Dropdown> |
| 38 | </div> |
| 39 | ) |
| 40 | } |