21.2 Numbers_Words 

Besprochene Version: 0.11.0 | Lizenz: PHP-Lizenz |
Klassendatei(en): Numbers/Words.php |
Eine Zahl in eine Text-Darstellung zu bringen, also z. B. die Zahl 13 in »dreizehn« zu konvertieren, ist recht aufwändig zu programmieren. Genau dieses Problems nimmt sich Numbers_Words an und bietet sogar eine Unterstützung für mehrere Sprachen. Das Paket besteht aus zwei Methoden, die statisch aufgerufen werden können. Es handelt sich um toCurrency() und toWords(). Bevor ich auf die Methoden eingehe, ein Wort zur allgemeinen Funktionsweise. Zur Lokalisierung nutzt das Paket Dateien, die für jede Sprache eine entsprechende Übersetzung enthalten. Diese Dateien sind von unterschiedlichen Personen implementiert worden, so dass nicht für jede Sprache derselbe Funktionsumfang zur Verfügung steht.
Momentan werden die in Tabelle 21.1 dargestellten Sprachen unterstützt.
Die Bezeichner, die hier Verwendung finden, sind leider nicht ganz mit den üblichen Locales identisch. Üblicherweise müsste sonst de_DE für Deutschland genutzt werden. Diese eigene Kreation hat historische Gründe, und vor allem gibt es keine ISO-Vorgabe für eine Zahlenangabe nach Donald Knuth. Bei einer Angabe nach Knuth wird die Zahl 1102 nicht als one thousand one hundred two, sondern als eleven hundred two ausgegeben.
Der Code, den Sie angeben, wird direkt zum Einbinden der dazugehörigen Sprachdatei genutzt, so dass die korrekte Groß- und Kleinschreibung wichtig ist.
Die Methode toWords() wandelt einen ganzzahligen Wert in seine textuelle Darstellung um und bekommt demzufolge eine Zahl als Parameter übergeben. Da das Paket auch Zahlen konvertieren kann, die deutlich größer als das sind, was der Integer-Datentyp abdeckt, können Sie die Zahl auch als String übergeben. Der zweite Parameter ist optional und definiert die Sprache, in der die Ausgabe erfolgen soll. Geben Sie ihn nicht an, wird die Ausgabe in amerikanischem Englisch gehalten.
require_once("PEAR.php"); require_once("Numbers/Words.php"); $res = Numbers_Words::toWords("1102","de"); if (true==PEAR::isError($res)) { die($res->getMessage()); } echo $res; // gibt "eintausendeinhundertzwei" aus
Listing 21.4 Konvertieren einer Zahl in eine textuelle Darstellung
Wie Sie in dem Listing erkennen können, gibt das Paket im Fehlerfall ein PEAR_Error-Objekt zurück. Da die Klasse PEAR aber leider nur im Fehlerfall eingebunden wird, sollten Sie das selbst erledigen, um unnötige Fehlermeldungen zu vermeiden.
Die zweite Methode im Paket ist toCurrency(). Sie dient dazu, eine monetäre Zahl in eine Text-Darstellung zu überführen. Auch hier wird wieder die zu konvertierende Zahl als erster Parameter angegeben. Natürlich muss es sich in diesem Fall nicht um einen ganzzahligen Wert handeln, und auch ein String wird akzeptiert. Wichtig dabei ist, dass der ganzzahlige Anteil von dem Nachkomma-Anteil durch einen Dezimalpunkt und nicht durch ein Komma abgetrennt werden muss. Auch diese Methode bekommt erst die eigentliche Zahl übergeben und akzeptiert einen zweiten Parameter, um die Sprache zu definieren. In Tabelle 21.1 finden Sie die Sprachen, die momentan toCurrency() unterstützen. Da das Paket recht schnell weiterentwickelt wird, sollten Sie aber auf jeden Fall prüfen, ob die Sprache, die Sie benötigen, inzwischen nicht auch von toCurrency() unterstützt wird, falls das nicht schon der Fall sein sollte. Des Weiteren können Sie einen dritten Parameter angeben, um festzulegen, welche Währung bei der Ausgabe genutzt werden soll. Die Angabe der Währung erfolgt in den international üblichen 3-Buchstaben-Codes, die in ISO-4217 [Die ISO-4217 finden Sie unter http://de.wikipedia.org/wiki/ISO_4217. ] definiert sind.
require_once("PEAR.php"); require_once("Numbers/Words.php"); $res = Numbers_Words::toCurrency("10.20","en_US","USD"); if (PEAR::isError($res)) { die($res->getMessage()); } echo $res; // Gibt 'ten dollars twenty cents' aus $res = Numbers_Words::toCurrency("10.20","dk","DKK"); if (PEAR::isError($res)) { die($res->getMessage()); } echo "<br />"; echo $res; // Gibt 'ti kroner og tyve řre' aus
Listing 21.5 Konvertierung einer monetären Angabe in einen Text