Maison >développement back-end >tutoriel php >Localisation des dates, de la monnaie et des nombres avec PHP-INTL
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:
<code class="language-php">$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) "১২,৩৪,৫৬,৭৮৯"</code>
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:
<code class="language-php">$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"</code>
Le comportement d'arrondi peut être contrôlé:
<code class="language-php">$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"</code>Les styles
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:
<code class="language-php">$nf = new NumberFormatter( 'en_US', NumberFormatter::CURRENCY ); var_dump( $nf->formatCurrency(1234.56789, "USD" ) ); // Output: string(9) ",234.57"</code>
La méthode getSymbol
simplifie la récupération du symbole de devise:
<code class="language-php">$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 €"</code>
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:
<code class="language-php">$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)</code>
La navigation de date est intuitive:
<code class="language-php">$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 // ...</code>
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!