Si te has preguntado como convertir un número a su cardinal , ordinal, etc se hace a través de la extensión php_intl.
Para instalarla en Ubuntu nada más sencillo que:
sudo apt install php_intl
para habilitarla en PHP:
sudo phpenmod intl
Y reaniciamos apache, que en caso de Ubuntu seria:
sudo service apache2 restart
Una vez instalada el código para realizar por ejemplo un cardinal en Català seria:
$nf = new \NumberFormatter('ca_ES', \NumberFormatter::SPELLOUT); $cardinal = $nf->format($total);
No en todos los casos queda perfecto, o a veces no encontrarás la traducción completa. Para ello podemos especificar un fichero con las formas correctas:
$pattern = file_get_contents('catalan.txt'); $nf = new \NumberFormatter('ca_ES', \NumberFormatter::PATTERN_RULEBASED, $pattern); $nf->setTextAttribute(\NumberFormatter::DEFAULT_RULESET, "%spellout-cardinal-masculine");
Y ya un pequeño trozo de código para que escriba bien los decimales en la forma por ejemplo de «diez coma cincuenta» en lugar de «diez cinco cero»:
$representado = explode(".", number_format($total, 2, ".", '')); if (count($representado)>0) { $cardinal = $nf->format($representado[0]) . ' coma ' . $nf->format($representado[1]); } else { $cardinal = $nf->format($representado[0]); }
Aquí tenéis el fichero con las traducciones, por si queréis crear uno nuevo: