mirror of
https://github.com/ansible/awx.git
synced 2026-01-15 20:00:43 -03: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:
parent
d2214acd6d
commit
275765b8fc
@ -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 (
|
||||
<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'
|
||||
);
|
||||
});
|
||||
});
|
||||
Loading…
x
Reference in New Issue
Block a user