@ibm-adw/skill-toolkit
Version:
Developing your own skills with IBM Automation Digital Worker Skill Toolkit
125 lines (108 loc) • 4.69 kB
JavaScript
/*
Licensed Materials - Property of IBM
5737-I23
Copyright IBM Corp. 2019, 2020. All Rights Reserved.
U.S. Government Users Restricted Rights:
Use, duplication or disclosure restricted by GSA ADP Schedule
Contract with IBM Corp.
*/
;
const bcp47 = require('bcp47');
module.exports = {
getLocales: (locales, supportedLocales, defaultLocale) => {
console.log('\n----LOCALES----');
// Supported locales
if (supportedLocales === undefined) {
console.log('Supported locales are undefined.');
console.log('locales is set to: ', defaultLocale);
return defaultLocale;
}
// locales accepted
if (locales === undefined) {
console.log('Locales are undefined.');
console.log('locales is set to supported locales: ', supportedLocales);
locales = supportedLocales;
}
// locales accepted
console.log('Initial locales: ', locales);
// locales supported by the client side of baiw-studio
console.log('Supported locales: ', supportedLocales);
// Split locales in array
let localesArray = locales.split(',').map(item => item.trim());
const deleteItemLocalesArray = (localesArray, item) => {
const index = localesArray.indexOf(item);
if (index > -1) {
localesArray.splice(index, 1);
}
return localesArray;
};
// Extract tags from locales
const extractTagUpdateArray = (locales) => {
return locales.split(',').map((item) => {
const components = item.replace(/\s+/, '').split(';');
if (bcp47.parse(components[0]) === null) {
console.log('Tag:', components[0], ' is invalid.');
console.log('Tag:', components[0], ' is therefore ignored.');
localesArray = deleteItemLocalesArray(localesArray, item);
}
else {
return {
tag: components[0]
};
}
}).filter(function (el) {
return el !== undefined;
});
};
const tags = extractTagUpdateArray(locales);
//locales not properly defined
if (tags.length === 0) {
let supportedLocalesArray = supportedLocales.split(',').map(item => item.trim());
supportedLocales.split(',').map((item) => {
const components = item.replace(/\s+/, '').split(';');
if (bcp47.parse(components[0]) === null) {
console.log('Tag:', components[0], ' is invalid.');
console.log('Tag:', components[0], ' is therefore ignored.');
supportedLocalesArray = deleteItemLocalesArray(supportedLocalesArray, item);
}
});
console.log('Locales is not properly defined so we set it to supportedLocales');
return supportedLocalesArray.join();
}
// Filter unsupported languages
const filterUnSupportedLanguages = (tags, localesArray, defaultLocale) => {
const notSupportedLanguages = [];
for (let i = tags.length - 1; i > -1 ; i--) {
const languageObj = bcp47.parse(tags[i].tag).langtag;
const language = languageObj.language.language;
const region = languageObj.region;
if ( !(supportedLocales.includes(language)) ) {
localesArray.splice(i,1);
if (region) {
language.concat('-',region);
}
notSupportedLanguages.push(language);
}
}
if (localesArray.length === 0) {
console.log('--> No languages are supported so default language is set.');
localesArray = Array.of(defaultLocale);
}
else {
if (notSupportedLanguages.length > 0) {
console.log('--> Some languages (', notSupportedLanguages.join(', '), ') are not supported.');
}
else {
console.log('--> All languages are supported.');
}
}
return localesArray;
};
localesArray = filterUnSupportedLanguages(tags, localesArray, defaultLocale);
//join to be match a locales string
locales = localesArray.join();
console.log('Final locales: ', locales);
console.log('----END LOCALES----');
return locales;
}
};