@@ -5,11 +5,11 @@ import { withRouter } from 'react-router';
55import { Link } from 'react-router' ;
66import classNames from 'classnames' ;
77import { withTranslation } from 'react-i18next' ;
8- import i18next from 'i18next ' ;
8+ import { languageKeyToLabel } from '../i18n ' ;
99import * as IDEActions from '../modules/IDE/actions/ide' ;
1010import * as toastActions from '../modules/IDE/actions/toast' ;
1111import * as projectActions from '../modules/IDE/actions/project' ;
12- import { setAllAccessibleOutput } from '../modules/IDE/actions/preferences' ;
12+ import { setAllAccessibleOutput , setLanguage } from '../modules/IDE/actions/preferences' ;
1313import { logoutUser } from '../modules/User/actions' ;
1414
1515import getConfig from '../utils/getConfig' ;
@@ -72,7 +72,6 @@ class Nav extends React.PureComponent {
7272 document . removeEventListener ( 'mousedown' , this . handleClick , false ) ;
7373 document . removeEventListener ( 'keydown' , this . closeDropDown , false ) ;
7474 }
75-
7675 setDropdown ( dropdown ) {
7776 this . setState ( {
7877 dropdownOpen : dropdown
@@ -170,7 +169,7 @@ class Nav extends React.PureComponent {
170169 }
171170
172171 handleLangSelection ( event ) {
173- i18next . changeLanguage ( event . target . value ) ;
172+ this . props . setLanguage ( event . target . value ) ;
174173 this . props . showToast ( 1500 ) ;
175174 this . props . setToastText ( 'Toast.LangChange' ) ;
176175 this . setDropdown ( 'none' ) ;
@@ -550,7 +549,7 @@ class Nav extends React.PureComponent {
550549
551550 renderLanguageMenu ( navDropdownState ) {
552551 return (
553- < ul className = "nav__items-right" title = "user-menu" >
552+ < React . Fragment >
554553 < li className = { navDropdownState . lang } >
555554 < button
556555 onClick = { this . toggleDropdownForLang }
@@ -562,21 +561,11 @@ class Nav extends React.PureComponent {
562561 }
563562 } }
564563 >
565- < span className = "nav__item-header" > { this . props . t ( 'Nav.Lang' ) } </ span >
564+ < span className = "nav__item-header" > { languageKeyToLabel ( this . props . language ) } </ span >
566565 < TriangleIcon className = "nav__item-header-triangle" focusable = "false" aria-hidden = "true" />
567566 </ button >
568567 < ul className = "nav__dropdown" >
569568
570- < li className = "nav__dropdown-item" >
571- < button
572- onFocus = { this . handleFocusForLang }
573- onBlur = { this . handleBlur }
574- value = "it"
575- onClick = { e => this . handleLangSelection ( e ) }
576- >
577- Italian (Test Fallback)
578- </ button >
579- </ li >
580569 < li className = "nav__dropdown-item" >
581570 < button
582571 onFocus = { this . handleFocusForLang }
@@ -598,23 +587,24 @@ class Nav extends React.PureComponent {
598587 </ li >
599588 </ ul >
600589 </ li >
601- </ ul >
590+ </ React . Fragment >
602591 ) ;
603592 }
604593
605594
606595 renderUnauthenticatedUserMenu ( navDropdownState ) {
607596 return (
608597 < ul className = "nav__items-right" title = "user-menu" >
598+ { getConfig ( 'TRANSLATIONS_ENABLED' ) && this . renderLanguageMenu ( navDropdownState ) }
609599 < li className = "nav__item" >
610600 < Link to = "/login" className = "nav__auth-button" >
611- < span className = "nav__item-header" > { this . props . t ( 'Nav.Login.Login ' ) } </ span >
601+ < span className = "nav__item-header" > { this . props . t ( 'Nav.Login' ) } </ span >
612602 </ Link >
613603 </ li >
614- < span className = "nav__item-or" > { this . props . t ( 'Nav.Login. LoginOr' ) } </ span >
604+ < span className = "nav__item-or" > { this . props . t ( 'Nav.LoginOr' ) } </ span >
615605 < li className = "nav__item" >
616606 < Link to = "/signup" className = "nav__auth-button" >
617- < span className = "nav__item-header" > { this . props . t ( 'Nav.Login. SignUp' ) } </ span >
607+ < span className = "nav__item-header" > { this . props . t ( 'Nav.SignUp' ) } </ span >
618608 </ Link >
619609 </ li >
620610 </ ul >
@@ -624,10 +614,7 @@ class Nav extends React.PureComponent {
624614 renderAuthenticatedUserMenu ( navDropdownState ) {
625615 return (
626616 < ul className = "nav__items-right" title = "user-menu" >
627- < li className = "nav__item" >
628- < span > { this . props . t ( 'Nav.Auth.Hello' ) } , { this . props . user . username } !</ span >
629- </ li >
630- < span className = "nav__item-spacer" > |</ span >
617+ { getConfig ( 'TRANSLATIONS_ENABLED' ) && this . renderLanguageMenu ( navDropdownState ) }
631618 < li className = { navDropdownState . account } >
632619 < button
633620 className = "nav__item-header"
@@ -640,7 +627,7 @@ class Nav extends React.PureComponent {
640627 }
641628 } }
642629 >
643- { this . props . t ( 'Nav.Auth.MyAccount ' ) }
630+ < span > { this . props . t ( 'Nav.Auth.Hello ' ) } , { this . props . user . username } ! </ span >
644631 < TriangleIcon className = "nav__item-header-triangle" focusable = "false" aria-hidden = "true" />
645632 </ button >
646633 < ul className = "nav__dropdown" >
@@ -756,7 +743,6 @@ class Nav extends React.PureComponent {
756743 < header >
757744 < nav className = "nav" title = "main-navigation" ref = { ( node ) => { this . node = node ; } } >
758745 { this . renderLeftLayout ( navDropdownState ) }
759- { getConfig ( 'TRANSLATIONS_ENABLED' ) && this . renderLanguageMenu ( navDropdownState ) }
760746 { this . renderUserMenu ( navDropdownState ) }
761747 </ nav >
762748 </ header >
@@ -808,8 +794,9 @@ Nav.propTypes = {
808794 params : PropTypes . shape ( {
809795 username : PropTypes . string
810796 } ) ,
811- t : PropTypes . func . isRequired
812-
797+ t : PropTypes . func . isRequired ,
798+ setLanguage : PropTypes . func . isRequired ,
799+ language : PropTypes . string . isRequired ,
813800} ;
814801
815802Nav . defaultProps = {
@@ -830,7 +817,8 @@ function mapStateToProps(state) {
830817 project : state . project ,
831818 user : state . user ,
832819 unsavedChanges : state . ide . unsavedChanges ,
833- rootFile : state . files . filter ( file => file . name === 'root' ) [ 0 ]
820+ rootFile : state . files . filter ( file => file . name === 'root' ) [ 0 ] ,
821+ language : state . preferences . language
834822 } ;
835823}
836824
@@ -839,7 +827,8 @@ const mapDispatchToProps = {
839827 ...projectActions ,
840828 ...toastActions ,
841829 logoutUser,
842- setAllAccessibleOutput
830+ setAllAccessibleOutput,
831+ setLanguage
843832} ;
844833
845834export default withTranslation ( ) ( withRouter ( connect ( mapStateToProps , mapDispatchToProps ) ( Nav ) ) ) ;
0 commit comments