Skip to content

Commit b71fb87

Browse files
committed
enhancing local support
1 parent f66c930 commit b71fb87

6 files changed

Lines changed: 119 additions & 7 deletions

File tree

src/index-webpack.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import HDSModel from './HDSModel/HDSModel';
22
import appTemplates from './appTemplates/appTemplates';
33
import pryv from './patchedPryv';
4-
import { localizeText, setPreferredLocale } from './localizeText';
4+
import { localizeText, setPreferredLocales } from './localizeText';
55
import logger from './logger';
66
const l = localizeText;
77

@@ -13,7 +13,7 @@ export {
1313
appTemplates,
1414
pryv,
1515
localizeText,
16-
setPreferredLocale,
16+
setPreferredLocales,
1717
l,
1818
logger
1919
};

src/index.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
1-
const { localizeText, setPreferredLocale } = require('./localizeText');
1+
const { localizeText, setPreferredLocales } = require('./localizeText');
22

33
module.exports = {
4+
settings: require('./settings'),
45
HDSModel: require('./HDSModel/HDSModel'),
56
appTemplates: require('./appTemplates/appTemplates'),
67
pryv: require('./patchedPryv'),
78
localizeText,
8-
setPreferredLocale,
9+
setPreferredLocales,
910
l: localizeText,
1011
logger: require('./logger')
1112
};

src/localizeText.js

Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,37 @@ const { HDSLibError } = require('./errors');
66

77
module.exports = {
88
localizeText,
9-
setPreferredLocale
9+
setPreferredLocales,
10+
getPreferredLocales,
11+
getSupportedLocales,
12+
resetPreferredLocales
1013
};
1114

12-
let preferredLocales = ['en', 'fr', 'es'];
15+
const supportedLocales = ['en', 'fr', 'es'];
16+
Object.freeze(supportedLocales);
17+
let preferredLocales = [...supportedLocales];
18+
19+
/**
20+
* get the current preferred locales
21+
* @returns {Array<string>}
22+
*/
23+
function getPreferredLocales () {
24+
return [...preferredLocales];
25+
}
26+
/**
27+
* get the current supported locales
28+
* @returns {Array<string>}
29+
*/
30+
function getSupportedLocales () {
31+
return [...preferredLocales];
32+
}
33+
34+
/**
35+
* reset prefferedLocalesTo Original state
36+
*/
37+
function resetPreferredLocales () {
38+
setPreferredLocales(supportedLocales);
39+
}
1340

1441
/**
1542
* return the translation of this item considering the setting of preffered language
@@ -29,7 +56,16 @@ function localizeText (textItem) {
2956

3057
/**
3158
* Change prefferedLocal order
59+
* @param {Array<string>} arrayOfLocals of local codes
3260
*/
33-
function setPreferredLocale (arrayOfLocals) {
61+
function setPreferredLocales (arrayOfLocals) {
62+
if (!Array.isArray(arrayOfLocals)) {
63+
throw new HDSLibError('setPreferredLocales takes an array of language codes');
64+
}
65+
const unsupportedLocales = arrayOfLocals.filter(l => (supportedLocales.indexOf(l) < 0));
66+
if (unsupportedLocales.length > 0) {
67+
throw new HDSLibError(`locales "${unsupportedLocales.join(', ')}" are not supported`, arrayOfLocals);
68+
}
69+
3470
preferredLocales = [...new Set([...arrayOfLocals, ...preferredLocales])];
3571
}

src/settings.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
const { setPreferredLocales } = require('./localizeText');
2+
3+
module.exports = {
4+
setPreferredLocales
5+
};

tests/libSettings.test.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
/* eslint-env mocha */
2+
const assert = require('node:assert/strict');
3+
4+
const HDSLib = require('../src');
5+
6+
describe('[LISX] Lib settings', () => {
7+
before(async () => {
8+
9+
});
10+
11+
it('[LISL] settings.setPreferredLocales default Local', async () => {
12+
const text = {
13+
en: 'Hello',
14+
fr: 'Bonjour'
15+
};
16+
HDSLib.settings.setPreferredLocales(['en']);
17+
assert.equal(HDSLib.l(text), text.en);
18+
HDSLib.settings.setPreferredLocales(['fr']);
19+
assert.equal(HDSLib.l(text), text.fr);
20+
});
21+
});

tests/localizeText.test.js

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
/* eslint-env mocha */
2+
const assert = require('node:assert/strict');
3+
const { setPreferredLocales, localizeText } = require('../src');
4+
const { resetPreferredLocales, getPreferredLocales, getSupportedLocales } = require('../src/localizeText');
5+
6+
describe('[LOCX] Lib settings', () => {
7+
beforeEach(() => {
8+
resetPreferredLocales();
9+
});
10+
11+
it('[LOCD] getSupportedLocales', () => {
12+
const defaultLocales = getSupportedLocales();
13+
assert.deepEqual(defaultLocales, ['en', 'fr', 'es']);
14+
});
15+
16+
it('[LOCL] setPreferredLocales, resetPrefferedLocales', () => {
17+
const defaultLocales = getSupportedLocales();
18+
const text = {
19+
en: 'Hello',
20+
fr: 'Bonjour'
21+
};
22+
setPreferredLocales(['en']);
23+
assert.equal(localizeText(text), text.en);
24+
setPreferredLocales(['fr', 'es']);
25+
assert.equal(localizeText(text), text.fr);
26+
const prefferedLocales = getPreferredLocales();
27+
assert.deepEqual(prefferedLocales, ['fr', 'es', 'en']);
28+
resetPreferredLocales();
29+
assert.deepEqual(getPreferredLocales(), defaultLocales);
30+
});
31+
32+
it('[LOCE] setPreferredLocales throws error if language code unssuported', () => {
33+
try {
34+
setPreferredLocales(['ex', 'en', 'fr', 'ut']);
35+
throw new Error('Should throw error');
36+
} catch (e) {
37+
assert.equal(e.message, 'locales "ex, ut" are not supported');
38+
}
39+
});
40+
41+
it('[LOCE] setPreferredLocales throws error if not array', () => {
42+
try {
43+
setPreferredLocales('en');
44+
throw new Error('Should throw error');
45+
} catch (e) {
46+
assert.equal(e.message, 'setPreferredLocales takes an array of language codes');
47+
}
48+
});
49+
});

0 commit comments

Comments
 (0)