diff --git a/awx/ui_next/src/RootProvider.jsx b/awx/ui_next/src/RootProvider.jsx index 48fdf3200c..92b3e83776 100644 --- a/awx/ui_next/src/RootProvider.jsx +++ b/awx/ui_next/src/RootProvider.jsx @@ -3,23 +3,16 @@ import { I18nProvider } from '@lingui/react'; import { HashRouter } from 'react-router-dom'; +import { getLanguageWithoutRegionCode } from '@util/language'; import ja from '../build/locales/ja/messages'; import en from '../build/locales/en/messages'; -export function getLanguage(nav) { - const language = - (nav.languages && nav.languages[0]) || nav.language || nav.userLanguage; - const languageWithoutRegionCode = language.toLowerCase().split(/[_-]+/)[0]; - - return languageWithoutRegionCode; -} - class RootProvider extends Component { render() { const { children } = this.props; const catalogs = { en, ja }; - const language = getLanguage(navigator); + const language = getLanguageWithoutRegionCode(navigator); return ( diff --git a/awx/ui_next/src/RootProvider.test.jsx b/awx/ui_next/src/RootProvider.test.jsx deleted file mode 100644 index 45b87782f6..0000000000 --- a/awx/ui_next/src/RootProvider.test.jsx +++ /dev/null @@ -1,18 +0,0 @@ -import { getLanguage } from './RootProvider'; - -describe('RootProvider.jsx', () => { - test('getLanguage returns the expected language code', () => { - expect(getLanguage({ languages: ['es-US'] })).toEqual('es'); - expect( - getLanguage({ - languages: ['es-US'], - language: 'fr-FR', - userLanguage: 'en-US', - }) - ).toEqual('es'); - expect(getLanguage({ language: 'fr-FR', userLanguage: 'en-US' })).toEqual( - 'fr' - ); - expect(getLanguage({ userLanguage: 'en-US' })).toEqual('en'); - }); -}); diff --git a/awx/ui_next/src/util/language.js b/awx/ui_next/src/util/language.js new file mode 100644 index 0000000000..1b2b31a8a4 --- /dev/null +++ b/awx/ui_next/src/util/language.js @@ -0,0 +1,15 @@ +export function getLanguage(nav) { + if (nav.languages && nav.languages[0]) { + return nav.languages[0]; + } + if (nav.language) { + return nav.language; + } + return nav.userLanguage; +} + +export function getLanguageWithoutRegionCode(nav) { + return getLanguage(nav) + .toLowerCase() + .split(/[_-]+/)[0]; +} diff --git a/awx/ui_next/src/util/language.test.jsx b/awx/ui_next/src/util/language.test.jsx new file mode 100644 index 0000000000..b6a64a302c --- /dev/null +++ b/awx/ui_next/src/util/language.test.jsx @@ -0,0 +1,39 @@ +import { getLanguage, getLanguageWithoutRegionCode } from './language'; + +describe('getLanguage', () => { + test('it returns the expected language code', () => { + expect(getLanguage({ languages: ['es-US'] })).toEqual('es-US'); + expect( + getLanguage({ + languages: ['es-US'], + language: 'fr-FR', + userLanguage: 'en-US', + }) + ).toEqual('es-US'); + expect(getLanguage({ language: 'fr-FR', userLanguage: 'en-US' })).toEqual( + 'fr-FR' + ); + expect(getLanguage({ userLanguage: 'en-US' })).toEqual('en-US'); + }); +}); + +describe('getLanguageWithoutRegionCode', () => { + test('it returns the expected (truncated) language code', () => { + expect(getLanguageWithoutRegionCode({ languages: ['es-US'] })).toEqual( + 'es' + ); + expect( + getLanguageWithoutRegionCode({ + languages: ['es-US'], + language: 'fr-FR', + userLanguage: 'en-US', + }) + ).toEqual('es'); + expect( + getLanguageWithoutRegionCode({ language: 'fr-FR', userLanguage: 'en-US' }) + ).toEqual('fr'); + expect(getLanguageWithoutRegionCode({ userLanguage: 'en-US' })).toEqual( + 'en' + ); + }); +});