UNPKG

@senthiljruby/inwords

Version:

Multi-lingual Feathers Plugin to convert number to word (number system)

67 lines (57 loc) 1.89 kB
const util = require('./utils'); let langObj; module.exports = function () { return function (app) { app.mixins.push(function (service) { service.inWords = function (number, language = 'en') { const _language = ['en', 'in']; if (_language.indexOf(language) > -1) { langObj = require('../i18n/' + language + '.json'); } else { throw new Error('Language not found'); } if (!util.isNumber(number)) { throw new Error('Input is not a number'); } number = Math.floor(number); const returnResp = numberToText(number, langObj); return returnResp; }; }); }; }; function radialBaseConveration (number) { const str = number.toString(); const radPows = langObj.radials || [0, 2, 3, 6, 9]; const radialBase = []; for (let i = 0; i < radPows.length; i++) { const _from = i < radPows.length - 1 ? -1 * radPows[i + 1] : 0; const _to = -1 * radPows[i] || undefined; radialBase.push(str.slice(_from, _to)); } return radialBase; } function numberToText (number, langObj) { if (langObj.ones[number]) { return langObj.ones[number]; } if (number <= 99) { const str = number.toString(); let returnResp = langObj.tens[str[0]]; if (str[1] !== '0') { returnResp = langObj.reverseOnes ? langObj.ones[str[1]] + ' ' + returnResp : returnResp + ' ' + langObj.ones[str[1]]; } return util.trim(returnResp, ' '); } const groups = radialBaseConveration(number); let output = ''; for (let i = 0; i < groups.length; i++) { const num = parseInt(groups[i], 10); if (num > 0) { const sep = output ? ' ' : ''; const groupName = num > 1 ? numberToText(num, langObj) + ' ' + langObj.pluralNames[i] : langObj.singularNames[i]; output = groupName + sep + output; } } return util.trim(output, ' '); }