language-picker.tsx 2.2 KB

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