UNPKG

@ibm-adw/skill-toolkit

Version:

Developing your own skills with IBM Automation Digital Worker Skill Toolkit

125 lines (108 loc) 4.69 kB
/* 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. */ 'use strict'; 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; } };