javascript pluralize plural

Javascript pluralizar una cadena



pluralize (7)

En PHP, uso la clase de Kuwamoto para pluralizar nombres en mis cadenas. No encontré algo tan bueno como este script en javascript, excepto por algunos complementos. Entonces, sería genial tener una función javascript basada en la clase de Kuwamoto.

http://kuwamoto.org/2007/12/17/improved-pluralizing-in-php-actionscript-and-ror/



Entonces, respondo a mi propia pregunta compartiendo mi traducción en javascript de la clase de PHP de Kuwamoto.

String.prototype.plural = function(revert){ var plural = { ''(quiz)$'' : "$1zes", ''^(ox)$'' : "$1en", ''([m|l])ouse$'' : "$1ice", ''(matr|vert|ind)ix|ex$'' : "$1ices", ''(x|ch|ss|sh)$'' : "$1es", ''([^aeiouy]|qu)y$'' : "$1ies", ''(hive)$'' : "$1s", ''(?:([^f])fe|([lr])f)$'' : "$1$2ves", ''(shea|lea|loa|thie)f$'' : "$1ves", ''sis$'' : "ses", ''([ti])um$'' : "$1a", ''(tomat|potat|ech|her|vet)o$'': "$1oes", ''(bu)s$'' : "$1ses", ''(alias)$'' : "$1es", ''(octop)us$'' : "$1i", ''(ax|test)is$'' : "$1es", ''(us)$'' : "$1es", ''([^s]+)$'' : "$1s" }; var singular = { ''(quiz)zes$'' : "$1", ''(matr)ices$'' : "$1ix", ''(vert|ind)ices$'' : "$1ex", ''^(ox)en$'' : "$1", ''(alias)es$'' : "$1", ''(octop|vir)i$'' : "$1us", ''(cris|ax|test)es$'' : "$1is", ''(shoe)s$'' : "$1", ''(o)es$'' : "$1", ''(bus)es$'' : "$1", ''([m|l])ice$'' : "$1ouse", ''(x|ch|ss|sh)es$'' : "$1", ''(m)ovies$'' : "$1ovie", ''(s)eries$'' : "$1eries", ''([^aeiouy]|qu)ies$'' : "$1y", ''([lr])ves$'' : "$1f", ''(tive)s$'' : "$1", ''(hive)s$'' : "$1", ''(li|wi|kni)ves$'' : "$1fe", ''(shea|loa|lea|thie)ves$'': "$1f", ''(^analy)ses$'' : "$1sis", ''((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$'': "$1$2sis", ''([ti])a$'' : "$1um", ''(n)ews$'' : "$1ews", ''(h|bl)ouses$'' : "$1ouse", ''(corpse)s$'' : "$1", ''(us)es$'' : "$1", ''s$'' : "" }; var irregular = { ''move'' : ''moves'', ''foot'' : ''feet'', ''goose'' : ''geese'', ''sex'' : ''sexes'', ''child'' : ''children'', ''man'' : ''men'', ''tooth'' : ''teeth'', ''person'' : ''people'' }; var uncountable = [ ''sheep'', ''fish'', ''deer'', ''moose'', ''series'', ''species'', ''money'', ''rice'', ''information'', ''equipment'' ]; // save some time in the case that singular and plural are the same if(uncountable.indexOf(this.toLowerCase()) >= 0) return this; // check for irregular forms for(word in irregular){ if(revert){ var pattern = new RegExp(irregular[word]+''$'', ''i''); var replace = word; } else{ var pattern = new RegExp(word+''$'', ''i''); var replace = irregular[word]; } if(pattern.test(this)) return this.replace(pattern, replace); } if(revert) var array = singular; else var array = plural; // check for matches using regular expressions for(reg in array){ var pattern = new RegExp(reg, ''i''); if(pattern.test(this)) return this.replace(pattern, array[reg]); } return this; }

Fácil de usar:

alert("page".plural()); // return plural form => pages alert("mouse".plural()); // return plural form => mice alert("women".plural(true)); // return singular form => woman

DEMO


He creado una biblioteca muy simple que se puede utilizar para la pluralización de palabras en JavaScript. Utiliza de forma transparente la base de datos CLDR para múltiples configuraciones regionales, por lo que admite casi cualquier idioma que le gustaría usar. Su API es muy minimalista y la integración es extremadamente simple. Se llama Numerous .

También le escribí un pequeño artículo de introducción: « ¿Cómo pluralizar cualquier palabra en diferentes idiomas usando JavaScript? ».

Siéntete libre de usarlo en tu proyecto. También estaré encantado por sus comentarios al respecto.



Tomado de mi blog: https://sergiotapia.me/pluralizing-strings-in-javascript-es6-b5d4d651d403

Puedes usar la librería github.com/blakeembrey/pluralize para esto.

NPM: npm install pluralize --save Yarn: yarn add pluralize

Donde quiera que quiera usar la biblioteca, puede requerirla fácilmente.

var pluralize = require(''pluralize'')

Me gusta agregarlo al objeto de la ventana para poder invocar pluralize () donde sea que lo necesite. Dentro de mi archivo raíz de application.js:

window.pluralize = require(''pluralize'')

Luego, solo puede usarlo en cualquier parte, React componentes o simplemente Javascript:

<span className="pull-left"> {`${item.score} ${pluralize(''point'', item.score)}`} </span> console.log(pluralize(''point'', item.score))


Versión simple (ES6):

const maybePluralize = (count, noun, suffix = ''s'') => `${count} ${noun}${count !== 1 ? suffix : ''''}`;

Uso:

maybePluralize(0, ''turtle''); // 0 turtles maybePluralize(1, ''turtle''); // 1 turtle maybePluralize(2, ''turtle''); // 2 turtles maybePluralize(3, ''fox'', ''es''); // 3 foxes

Esto obviamente no es compatible con todos los casos de borde en inglés, pero es adecuado para la mayoría de los propósitos


function pluralize( /* n, [ n2, n3, ... ] str */ ) { var n = Array.prototype.slice.call( arguments ) ; var str = n.pop(), iMax = n.length - 1, i = -1, j ; str = str.replace( //$/$|/$(/d+)/g, function( m, p1 ) { return m == ''$$'' ? ''$'' : n[+p1-1] } ) ; return str.replace( /[(](.*?)([+-])(/d*)(?:,([^,)]*))?(?:,([^)]*))?[)]/g, function( match, one, sign, abs, not1, zero ) { // if abs, use indicated element in the array of numbers // instead of using the next element in sequence abs ? ( j = +abs - 1 ) : ( i < iMax && i++, j = i ) ; if ( zero != undefined && n[j] == 0 ) return zero ; return ( n[j] != 1 ) == ( sign == ''+'' ) ? ( not1 || ''s'' ) : one ; } ) ; } console.log( pluralize( 1, ''the cat(+) live(-) outside'' ) ) ; // the cat lives outside console.log( pluralize( 2, ''the child(+,ren) (is+,are) inside'' ) ) ; // the children are inside console.log( pluralize( 0, ''$1 dog(+), ($1+,$1,no) dog(+), ($1+,$1,no) dog(+,,)'' ) ) ; // 0 dogs, no dogs, no dog console.log( pluralize( 100, 1, ''$1 penn(y+,ies) make(-1) $$$2'' ) ) ; // 100 pennies make $1 console.log( pluralize( 1, 0.01, ''$1 penn(y+,ies) make(-1) $$$2'' ) ) ; // 1 penny makes $0.01