Using the I18N_Number Class
This class localizes numbers. It formats a given number using either a default or defined format. The
format function has the following prototype:
- string format(mixed $number, [mixed $format = null]): Returns the formatted $number according to the format specified by the $format argument, which takes one of the values: I18N_NUMBER_FLOAT, I18N_NUMBER_INTEGER or a custom format created using the setFormat method described next. If the $format argument is missing then the default value is I18N_NUMBER_FLOAT.
The class inherits its next two functions from the I18N_Format class:
- int setFormat(string $format): Define a custom format given by the $format argument.
- void getFormat(): Returns a format identifier that can be passed to the format method for specifying the number's format type.
The following example sets a custom format and returns the formatted number and the associated format identifier:
<?php
require_once 'I18N/Number.php';
//Create an instance of the I18N_Number class
$number = new I18N_Number( 'en_US' );
//Print in the float format the pi value
print( 'float --> '. $number->format( 999999,1 ) ).'<br />';
//Print in a custom format the pi value
print( 'custom --> '.$number->format(
999999,$number->setFormat(
array(5,'$','#'))) ).'<br />';
//Print the custom format id
print ( 'custom format id --> '.$number->getFormat() ).'<br />';
//Print in the integer format the pi value
print( 'integer --> '.$number->format( 999999,2 ) ).'<br />';
?>
The result is:
float --> 999,999.000
custom --> 999#999$00000
custom format id --> 100
integer --> 999,999
Listing 1 shows a longer example that formats a given number for different languages. The listing sets up a simple input page where users can enter a number. It then formats the number appropriately for a range of different language codes.
Figure 1 shows a screenshot of the simple interface.
 | |
Figure 1. Simple Numeric-Entry Interface: When a user enters a numeric value and clicks Send, the application displays the entered value in a variety of locale-specific formats. |
For example, if a user entered 123456, the program would produce results like these:
Float format:
es_ES --> 123.456,000
nl_NL --> 123 456,000
de_DE --> 123.456,000
fr_FR --> 123 456,000
it_IT --> 123.456,000
en_US --> 123,456.000
The float format id is : 1
Integer format:
es_ES --> 123.456
nl_NL --> 123 456
de_DE --> 123.456
fr_FR --> 123 456
it_IT --> 123.456
en_US --> 123,456
The integer format id is : 2
Custom format:
es_ES --> 123*456&00
nl_NL --> 123*456&00
de_DE --> 123*456&00
fr_FR --> 123*456&00
it_IT --> 123*456&00
en_US --> 123*456&00
The custom format id is : 100
Using the I18N_Currency class
You use the I18N_Currency class to localize currency values and format specified amounts using a default or defined format. The
format function has the next prototype:
- void format(mixed $amount, [mixed $format = I18N_CURRENCY_LOCAL]): Returns the $amount formatted according to the specified format, which can be either I18N_CURRENCY_LOCAL, or I18N_CURRENCY_INTERNATIONAL, or can take a custom format created using the setFormat method described next. If the $format argument is missing, the default value is I18N_CURRENCY_LOCAL.
The I18N_Currency class inherits the
setFormat and
getFormat methods from the I18N_Format class (see the preceding section, "Using the I18N_Number Class").
Here's a short sample application that formats a given amount for different languages. This example uses a simple data-entry interface identical to the previous example (see
Figure 1), and formats the user's entry appropriately for several different locales. You can
download the complete code; the example below shows only the pertinent PHP code in the page:
<?php
require_once 'I18N/Currency.php';
if(isset($_GET['currency']))
{
$get_sum = $_GET['currency'];
$languages = array('es_ES','nl_NL','de_DE','fr_FR','it_IT','en_US');
print '<font face style="Arial" color="000076">';
print '<h4><u>Currency format</u></h4>';
foreach( $languages as $lang )
{
//Create an instance of the I18N_Currency class
$currency = new I18N_Currency( $lang );
print '<font face style="Arial" color="000076"
size="3"><b>'.$lang.'</b><br />';
//Print the $currency variable into the currency local format
print 'Currency Local --> '.$currency->format($get_sum).'<br />';
//Print the $currency variable into the currency international format
print 'Currency International --> '.$currency->format(
$get_sum,2).'<br /><br />';
}
}
?>
The output of this example is:
Currency format
es_ES
Currency Local --> 123.456,00 €
Currency International --> 123.456,00 Eur
nl_NL
Currency Local --> 123.456,00 €
Currency International --> 123.456,00 Eur
de_DE
Currency Local --> 123.456,00 €
Currency International --> 123.456,00 Eur
fr_FR
Currency Local --> 123.456,00 €
Currency International --> 123.456,00 Eur
it_IT
Currency Local --> 123.456,00 €
Currency International --> 123.456,00 Eur
en_US
Currency Local --> $123,456.00
Currency International --> $US 123,456.00