index.jsx 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import { Icon, Menu, Dropdown } from 'ant-design-vue'
  2. import { i18nRender } from '@/locales'
  3. import './index.less'
  4. import i18nMixin from '@/store/i18n-mixin'
  5. const locales = ['zh-CN', 'zh-TW', 'en-US', 'pt-BR']
  6. const languageLabels = {
  7. 'zh-CN': '简体中文',
  8. 'zh-TW': '繁体中文',
  9. 'en-US': 'English',
  10. 'pt-BR': 'Português'
  11. }
  12. // eslint-disable-next-line
  13. const languageIcons = {
  14. 'zh-CN': '🇨🇳',
  15. 'zh-TW': '🇭🇰',
  16. 'en-US': '🇺🇸',
  17. 'pt-BR': '🇧🇷'
  18. }
  19. const SelectLang = {
  20. name: 'SelectLang',
  21. mixins: [i18nMixin],
  22. render () {
  23. const changeLang = ({ key }) => {
  24. this.setLang(key)
  25. }
  26. const langMenu = (
  27. <Menu class={['menu', 'drop-down']} selectedKeys={[this.currentLang]} onClick={changeLang}>
  28. {locales.map(locale => (
  29. <Menu.Item key={locale}>
  30. <span role="img" aria-label={languageLabels[locale]}>
  31. {languageIcons[locale]}
  32. </span>{' '}
  33. {languageLabels[locale]}
  34. </Menu.Item>
  35. ))}
  36. </Menu>
  37. )
  38. return (
  39. <Dropdown overlay={langMenu} placement="bottomRight">
  40. <span class={'.ant-pro-drop-down-lang'}>
  41. <Icon type="global" title={i18nRender('navBar.lang')} />
  42. </span>
  43. </Dropdown>
  44. )
  45. }
  46. }
  47. export default SelectLang