index.js 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import React, { PureComponent } from 'react';
  2. import { formatMessage, setLocale, getLocale } from 'umi/locale';
  3. import { Menu, Icon } from 'antd';
  4. import classNames from 'classnames';
  5. import HeaderDropdown from '../HeaderDropdown';
  6. import styles from './index.less';
  7. export default class SelectLang extends PureComponent {
  8. changeLang = ({ key }) => {
  9. setLocale(key);
  10. };
  11. render() {
  12. const { className } = this.props;
  13. const selectedLang = getLocale();
  14. const locales = ['zh-CN', 'zh-TW', 'en-US', 'pt-BR'];
  15. const languageLabels = {
  16. 'zh-CN': '简体中文',
  17. 'zh-TW': '繁体中文',
  18. 'en-US': 'English',
  19. 'pt-BR': 'Português',
  20. };
  21. const languageIcons = {
  22. 'zh-CN': '🇨🇳',
  23. 'zh-TW': '🇭🇰',
  24. 'en-US': '🇬🇧',
  25. 'pt-BR': '🇧🇷',
  26. };
  27. const langMenu = (
  28. <Menu className={styles.menu} selectedKeys={[selectedLang]} onClick={this.changeLang}>
  29. {locales.map(locale => (
  30. <Menu.Item key={locale}>
  31. <span role="img" aria-label={languageLabels[locale]}>
  32. {languageIcons[locale]}
  33. </span>{' '}
  34. {languageLabels[locale]}
  35. </Menu.Item>
  36. ))}
  37. </Menu>
  38. );
  39. return (
  40. <HeaderDropdown overlay={langMenu} placement="bottomRight">
  41. <span className={classNames(styles.dropDown, className)}>
  42. <Icon type="global" title={formatMessage({ id: 'navBar.lang' })} />
  43. </span>
  44. </HeaderDropdown>
  45. );
  46. }
  47. }