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:
