@senthiljruby/inwords
Version:
Multi-lingual Feathers Plugin to convert number to word (number system)
67 lines (57 loc) • 1.89 kB
JavaScript
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, ' ');
}