Zend_Locale_Format
is a internal component used by Zend_Locale. All locale aware classes use
Zend_Locale_Format
for normalization and localization of numbers and dates. Normalization involves
parsing input from a variety of data respresentations, like dates, into a standardized, structured
representation, such as a PHP array with year, month, and day elements.
The exact same string containing a number or a date might mean different things to people with different customs
and conventions. Disambiguation of numbers and dates requires rules about how to interpret these strings and
normalize the values into a standardized data structure. Thus, all methods in Zend_Locale_Format
require a locale in order to parse the input data.
![]() |
Default "root" Locale |
---|---|
If no locale is specified, then normalization and localization will use the standard "root" locale, which might yield unexpected behavior, if the input originated in a different locale, or output for a specific locale was expected. |
There are many
number systems
different from the common
decimal system
(e.g. "3.14"). Numbers can be normalized with the getNumber()
function to obtain the standard
decimal representation. For all number-related discussions in this manual,
Arabic/European numerals (0,1,2,3,4,5,6,7,8,9)
are implied, unless explicitly stated otherwise.
Exemple 15.15. Number normalization
<?php require_once 'Zend/Locale.php'; $locale = new Zend_Locale('de_AT'); $number = Zend_Locale_Format::getNumber('13.524,678', false, $locale); print $number; // will return 13524.678 ?>
Since getNumber()
can normalize extremely large numbers, check the result carefully before
using finite precision calculations, such as ordinary PHP math operations. For example, if
((string)int_val($number) != $number) { use
BCMath
or
GMP
. Most PHP installations support the BCMath extension.
Also, the precision of the resulting decimal representation can be truncated to a desired length with
getNumber()
. If no precision is given, no truncation occurs. Use only PHP integers to
specify the precision. The result will not be rounded. So "1.6" will return "1", not "2", if the
precision is zero.
toNumber()
can localize numbers to the
supported locales
. This function will return a localized string of the given number in a conventional format for a specific
locale.
Exemple 15.17. Number localization
<?php require_once 'Zend/Locale.php'; $locale = new Zend_Locale('de_AT'); $number = Zend_Locale_Format::toNumber(13547.36, $locale); // will return 13.547,36 print $number; ?>
![]() |
Unlimited length |
---|---|
|
The same way as within getNumber()
, toNumber()
handles precision. If no precision
is given, the complete localized number will be returned.
Exemple 15.18. Number localization with precision
<?php require_once 'Zend/Locale.php'; $locale = new Zend_Locale('de_AT'); $number = Zend_Locale_Format::toNumber(13547.3678, 2, $locale); // will return 13.547,36 print $number; ?>
![]() |
Be aware |
---|---|
|
isNumber()
checks if a given string is a number and returns true or false.
Floating point values can be parsed with the getFloat()
function. A floating point value will
be returned.
toFloat()
can localize floating point values. This function will return a localized string of
the given number.
Exemple 15.21. Floating point value localization
<?php require_once 'Zend/Locale.php'; $locale = new Zend_Locale('de_AT'); $number = Zend_Locale_Format::toFloat(13547.3655, 1, $locale); // will return 13.547,3 print $number; ?>
![]() |
Be aware |
---|---|
|
isFloat()
checks if a given string is a floating point value and returns true or false.
Integer values can be parsed with the getInteger()
function. A integer value will be returned.
toInteger()
can localize integer values. This function will return a localized string of the
given number.
isInteger()
checks if a given string is a integer value and returns true or false.
Zend_Locale_Format::toNumberSystem()
converts digits between different
numeral systems
, including the standard Arabic/European numeral system (0,1,2,3,4,5,6,7,8,9), not to be confused with
Eastern Arabic numerals
sometimes used with the Arabic language to express numerals. Attempts to use an unsupported numeral system
will result in an exception, to avoid accidentally performing an incorrect conversion due to a spelling
error. All characters in the input, which are not numerals for the selected numeral system, are copied to
the output -i.e. no conversion of decimal format characters.
Suppose a web form collected a numeric input expressed using arabic digits "١٠٠". Most software and
PHP functions expect input using Arabic numerals. Fortunately, converting this input to it's equivalent
Arabic numerals "100" requires little effort using toNumberSystem($input, $sourceNumeralSystem,
$destNumeralSystem)
, which returns the $input
with numerals in
$sourceNumeralSystem
converted to $destNumeralSystem
.
Exemple 15.26. Converting numerals to Arabic/European
<?php require_once 'Zend/Locale.php'; $string = "١٠٠"; // Arabic for 100 $normal = Zend_Locale_Format::toNumberSystem($string, 'Arab', 'Euro'); print "\nOriginal: ".$string; print "\nNormalized:".$normal; ?>
Similarly, any of the supported numeral systems may be converted to any other supported numeral system.
Exemple 15.27. Converting numerals from Arabic/European
<?php require_once 'Zend/Locale.php'; $string = '123'; $local = Zend_Locale_Format::toNumberSystem($string, 'Euro', 'Arab'); print "\nOriginal: ".$string; print "\nLocalize:".$local; ?>
Tableau 15.1. List of supported numeral systems
Notation Name | Script |
---|---|
Arabic | Arab |
Balinese | Bali |
Bengali | Beng |
Devanagari | Deva |
Gujarati | Gujr |
Gurmukhi | Guru |
Kannada | Knda |
Khmer | Khmr |
Lao | Laoo |
Limbu | Limb |
Malayalam | Mlym |
Mongolian | Mong |
Myanmar | Mymr |
New_Tai_Lue | Talu |
Nko | Nkoo |
Oriya | Orya |
Tamil | Taml |
Telugu | Telu |
Thai | Tale |
Tibetan | Tibt |