Skip to content

Commit 3e66c73

Browse files
oruburoscatarak
andauthored
Language UI Dropdown new location (#1582)
* New language selector design * Adjust authenticated nav to consolidate Account dropdown * Adding language in NavTest Co-authored-by: Cassie Tarakajian <ctarakajian@gmail.com>
1 parent 67ef2d3 commit 3e66c73

File tree

3 files changed

+20
-12
lines changed

3 files changed

+20
-12
lines changed

client/components/Nav.jsx

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { withRouter } from 'react-router';
55
import { Link } from 'react-router';
66
import classNames from 'classnames';
77
import { withTranslation } from 'react-i18next';
8-
import i18next from 'i18next';
8+
import { languageKeyToLabel } from '../i18n';
99
import * as IDEActions from '../modules/IDE/actions/ide';
1010
import * as toastActions from '../modules/IDE/actions/toast';
1111
import * as projectActions from '../modules/IDE/actions/project';
@@ -549,7 +549,7 @@ class Nav extends React.PureComponent {
549549

550550
renderLanguageMenu(navDropdownState) {
551551
return (
552-
<ul className="nav__items-right" title="user-menu">
552+
<React.Fragment>
553553
<li className={navDropdownState.lang}>
554554
<button
555555
onClick={this.toggleDropdownForLang}
@@ -561,7 +561,7 @@ class Nav extends React.PureComponent {
561561
}
562562
}}
563563
>
564-
<span className="nav__item-header"> {this.props.t('Nav.Lang')}</span>
564+
<span className="nav__item-header"> {languageKeyToLabel(this.props.language)}</span>
565565
<TriangleIcon className="nav__item-header-triangle" focusable="false" aria-hidden="true" />
566566
</button>
567567
<ul className="nav__dropdown">
@@ -597,14 +597,15 @@ class Nav extends React.PureComponent {
597597
</li>
598598
</ul>
599599
</li>
600-
</ul>
600+
</React.Fragment>
601601
);
602602
}
603603

604604

605605
renderUnauthenticatedUserMenu(navDropdownState) {
606606
return (
607607
<ul className="nav__items-right" title="user-menu">
608+
{getConfig('TRANSLATIONS_ENABLED') && this.renderLanguageMenu(navDropdownState)}
608609
<li className="nav__item">
609610
<Link to="/login" className="nav__auth-button">
610611
<span className="nav__item-header">{this.props.t('Nav.Login')}</span>
@@ -623,10 +624,7 @@ class Nav extends React.PureComponent {
623624
renderAuthenticatedUserMenu(navDropdownState) {
624625
return (
625626
<ul className="nav__items-right" title="user-menu">
626-
<li className="nav__item">
627-
<span>{this.props.t('Nav.Auth.Hello')}, {this.props.user.username}!</span>
628-
</li>
629-
<span className="nav__item-spacer">|</span>
627+
{getConfig('TRANSLATIONS_ENABLED') && this.renderLanguageMenu(navDropdownState)}
630628
<li className={navDropdownState.account}>
631629
<button
632630
className="nav__item-header"
@@ -639,7 +637,7 @@ class Nav extends React.PureComponent {
639637
}
640638
}}
641639
>
642-
{this.props.t('Nav.Auth.MyAccount')}
640+
<span>{this.props.t('Nav.Auth.Hello')}, {this.props.user.username}!</span>
643641
<TriangleIcon className="nav__item-header-triangle" focusable="false" aria-hidden="true" />
644642
</button>
645643
<ul className="nav__dropdown">
@@ -755,7 +753,6 @@ class Nav extends React.PureComponent {
755753
<header>
756754
<nav className="nav" title="main-navigation" ref={(node) => { this.node = node; }}>
757755
{this.renderLeftLayout(navDropdownState)}
758-
{getConfig('TRANSLATIONS_ENABLED') && this.renderLanguageMenu(navDropdownState)}
759756
{this.renderUserMenu(navDropdownState)}
760757
</nav>
761758
</header>
@@ -809,6 +806,7 @@ Nav.propTypes = {
809806
}),
810807
t: PropTypes.func.isRequired,
811808
setLanguage: PropTypes.func.isRequired,
809+
language: PropTypes.string.isRequired,
812810
};
813811

814812
Nav.defaultProps = {
@@ -829,7 +827,8 @@ function mapStateToProps(state) {
829827
project: state.project,
830828
user: state.user,
831829
unsavedChanges: state.ide.unsavedChanges,
832-
rootFile: state.files.filter(file => file.name === 'root')[0]
830+
rootFile: state.files.filter(file => file.name === 'root')[0],
831+
language: state.preferences.language
833832
};
834833
}
835834

client/components/__test__/Nav.test.jsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,8 @@ describe('Nav', () => {
4646
id: 'root-file'
4747
},
4848
t: jest.fn(),
49-
setLanguage: jest.fn()
49+
setLanguage: jest.fn(),
50+
language: 'en-US'
5051
};
5152

5253
it('renders correctly', () => {

client/i18n.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,14 @@ import Backend from 'i18next-http-backend';
66
const fallbackLng = ['en-US'];
77
const availableLanguages = ['en-US', 'es-419'];
88

9+
export function languageKeyToLabel(lang) {
10+
const languageMap = {
11+
'en-US': 'English',
12+
'es-419': 'Español'
13+
};
14+
return languageMap[lang];
15+
}
16+
917
const options = {
1018
loadPath: '/locales/{{lng}}/translations.json',
1119
requestOptions: { // used for fetch, can also be a function (payload) => ({ method: 'GET' })

0 commit comments

Comments
 (0)