mirror of
https://github.com/ansible/awx.git
synced 2026-05-08 09:57:35 -02:30
Refactor language utility
Move the language helper out of RootProvider and into a utilities module so that it can be more easiliy reused where needed. In some cases we want the full language code so that logic has been moved into a separate function.
This commit is contained in:
@@ -3,23 +3,16 @@ import { I18nProvider } from '@lingui/react';
|
|||||||
|
|
||||||
import { HashRouter } from 'react-router-dom';
|
import { HashRouter } from 'react-router-dom';
|
||||||
|
|
||||||
|
import { getLanguageWithoutRegionCode } from '@util/language';
|
||||||
import ja from '../build/locales/ja/messages';
|
import ja from '../build/locales/ja/messages';
|
||||||
import en from '../build/locales/en/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 {
|
class RootProvider extends Component {
|
||||||
render() {
|
render() {
|
||||||
const { children } = this.props;
|
const { children } = this.props;
|
||||||
|
|
||||||
const catalogs = { en, ja };
|
const catalogs = { en, ja };
|
||||||
const language = getLanguage(navigator);
|
const language = getLanguageWithoutRegionCode(navigator);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<HashRouter>
|
<HashRouter>
|
||||||
|
|||||||
@@ -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');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
15
awx/ui_next/src/util/language.js
Normal file
15
awx/ui_next/src/util/language.js
Normal file
@@ -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];
|
||||||
|
}
|
||||||
39
awx/ui_next/src/util/language.test.jsx
Normal file
39
awx/ui_next/src/util/language.test.jsx
Normal file
@@ -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'
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user