language-picker.tsx 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import React from 'react'
  2. import {
  3. Dropdown,
  4. DropdownItem,
  5. DropdownMenu,
  6. DropdownToggle,
  7. } from './dropdown-menu'
  8. import { useTranslation } from 'react-i18next'
  9. import getMeta from '@/utils/meta'
  10. import Icon from '@/shared/components/icon'
  11. function LanguagePicker() {
  12. const { t } = useTranslation()
  13. const currentLangCode = getMeta('ol-i18n').currentLangCode
  14. const translatedLanguages = getMeta('ol-footer').translatedLanguages
  15. const subdomainLang = getMeta('ol-footer').subdomainLang
  16. const currentUrlWithQueryParams = window.location.pathname
  17. return (
  18. <Dropdown drop="up">
  19. <DropdownToggle
  20. id="language-picker-toggle"
  21. aria-label={t('select_a_language')}
  22. data-bs-toggle="dropdown"
  23. className="btn-inline-link"
  24. variant="link"
  25. >
  26. <Icon
  27. type="language"
  28. className="fa fa-fw"
  29. accessibilityLabel={t('select_a_language')}
  30. />
  31. {translatedLanguages?.[currentLangCode]}
  32. </DropdownToggle>
  33. <DropdownMenu
  34. className="dropdown-menu-sm-width"
  35. aria-labelledby="language-picker-toggle"
  36. >
  37. {subdomainLang &&
  38. Object.entries(subdomainLang).map(([subdomain, subdomainDetails]) => {
  39. if (
  40. !subdomainDetails ||
  41. !subdomainDetails.lngCode ||
  42. subdomainDetails.hide
  43. )
  44. return null
  45. const isActive = subdomainDetails.lngCode === currentLangCode
  46. return (
  47. <li role="none" key={subdomain}>
  48. <DropdownItem
  49. href={`${subdomainDetails.url}${currentUrlWithQueryParams}`}
  50. active={isActive}
  51. aria-current={isActive ? 'true' : false}
  52. trailingIcon={isActive ? 'check' : null}
  53. >
  54. {translatedLanguages?.[subdomainDetails.lngCode]}
  55. </DropdownItem>
  56. </li>
  57. )
  58. })}
  59. </DropdownMenu>
  60. </Dropdown>
  61. )
  62. }
  63. export default LanguagePicker