Ce tutoriel s'appuie sur l'introduction précédente à l'extension PHP INTL, en se concentrant sur la localisation des données complexes comme les nombres, les dates et les devises. Plongeons-nous!
Concepts clés:
NumberFormatter
gère la localisation du nombre, la lutte contre les variations dans les séparateurs décimaux et les styles de formatage dans différents lieux. NumberFormatter
, en spécifiant le code de la devise et en utilisant la méthode formatCurrency
. IntlCalendar
) pour la manipulation et la comparaison de la date, offrant des fonctionnalités similaires aux bibliothèques de date / heure populaires. Localisation décimale:
Les incohérences dans les séparateurs décimaux dans toutes les régions sont un défi commun. La classe NumberFormatter
résout de manière élégamment:
$numberFormatter = new NumberFormatter( 'de_DE', NumberFormatter::DECIMAL ); var_dump( $numberFormatter->format(123456789) ); // Output: string(11) "123.456.789" $numberFormatter = new NumberFormatter( 'en_US', NumberFormatter::DECIMAL ); var_dump( $numberFormatter->format(123456789) ); // Output: string(11) "123,456,789" $numberFormatter = new NumberFormatter( 'ar', NumberFormatter::DECIMAL ); var_dump( $numberFormatter->format(123456789) ); // Output: string(22) "١٢٣٬٤٥٦٬٧٨٩" $numberFormatter = new NumberFormatter( 'bn', NumberFormatter::DECIMAL ); var_dump( $numberFormatter->format(123456789) ); // Output: string(30) "১২,৩৪,৫৬,৭৮৯"
Le code des paramètres régionaux (par exemple, 'DE_DE', 'EN_US') dicte le style de formatage. Divers styles de formatage (décimal, devise, durée, etc.) sont disponibles.
Styles et attributs de formatage:
Nous pouvons personnaliser le formatage des nombres à l'aide d'attributs:
$nf = new NumberFormatter( 'en_US', NumberFormatter::DECIMAL ); $nf->setAttribute(NumberFormatter::FRACTION_DIGITS, 2); var_dump( $nf->format(1234.56789) ); // Output: string(8) "1,234.57" var_dump( $nf->format(1234) ); // Output: string(8) "1,234.00"
Le comportement d'arrondi peut être contrôlé:
$nf = new NumberFormatter( 'en_US', NumberFormatter::DECIMAL ); $nf->setAttribute(NumberFormatter::MAX_FRACTION_DIGITS, 2); $nf->setAttribute(NumberFormatter::ROUNDING_MODE, NumberFormatter::ROUND_CEILING); var_dump($nf->format(1234.5678) ); // Output: string(8) "1,234.57" $nf->setAttribute(NumberFormatter::ROUNDING_MODE, NumberFormatter::ROUND_DOWN); var_dump($nf->format(1234.5678) ); // Output: string(8) "1,234.56"
SPELLOUT
et DURATION
, introduits précédemment, s'appliquent également ici. Les chaînes formatées d'analyse dans les nombres sont prises en charge via la méthode parse
.
Localisation des devises:
Formatage des nombres en tant que monnaies est simple:
$nf = new NumberFormatter( 'en_US', NumberFormatter::CURRENCY ); var_dump( $nf->formatCurrency(1234.56789, "USD" ) ); // Output: string(9) ",234.57"
La méthode getSymbol
simplifie la récupération du symbole de devise:
$nf = new NumberFormatter( 'en_US', NumberFormatter::CURRENCY ); var_dump( $nf->formatCurrency(1234.56789, $nf->getSymbol(NumberFormatter::INTL_CURRENCY_SYMBOL)) ); // Output: string(9) ",234.57" $nf = new NumberFormatter( 'fr_FR', NumberFormatter::CURRENCY ); var_dump( $nf->formatCurrency(1234.56789, $nf->getSymbol(NumberFormatter::INTL_CURRENCY_SYMBOL)) ); // Output: string(14) "1 234,57 €"
fuseaux horaires et calendriers:
IntlTimeZone
gère les fuseaux horaires, reflétant les fonctionnalités de DateTimeZone
. IntlCalendar
fournit une API riche pour les opérations du calendrier:
$calendar = IntlCalendar::createInstance(); var_dump($calendar->getTimeZone()->getId()); // Output: Time zone ID (e.g., "UTC") $calendar = IntlCalendar::fromDateTime(new DateTime()); // Create from DateTime object // Comparisons $calendar1 = IntlCalendar::fromDateTime( DateTime::createFromFormat('j-M-Y', '11-Apr-2016') ); $calendar2 = IntlCalendar::createInstance(); $diff = $calendar1->fieldDifference($calendar2->getTime(), IntlCalendar::FIELD_MILLISECOND); // ... (comparison and date navigation examples as before)
La navigation de date est intuitive:
$calendar = IntlCalendar::createInstance(); $calendar->add(IntlCalendar::FIELD_MONTH, 1); // Add a month $calendar->add(IntlCalendar::FIELD_DAY_OF_WEEK, 1); // Add a day of the week // ...
Conclusion:
L'extension PHP INTL, alimentée par les soins intensifs, offre une solution puissante et complète pour internationaliser vos applications PHP. Cette série en deux parties a couvert la localisation des messages et maintenant une localisation de données complexes. Les futurs articles exploreront des fonctionnalités supplémentaires au sein de l'extension INTL.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!