Maison > développement back-end > tutoriel php > Localisation des dates, de la monnaie et des nombres avec PHP-INTL

Localisation des dates, de la monnaie et des nombres avec PHP-INTL

Joseph Gordon-Levitt
Libérer: 2025-02-15 12:32:12
original
261 Les gens l'ont consulté

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!

Localizing Dates, Currency, and Numbers with Php-Intl

Concepts clés:

  • L'extension PHP INTL exploite la bibliothèque des soins intensifs pour une manipulation robuste des données consciente des paramètres régionaux, essentiel pour les applications multilingues.
  • 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.
  • Le formatage des devises est facilement réalisé avec NumberFormatter, en spécifiant le code de la devise et en utilisant la méthode formatCurrency.
  • L'extension fournit une API de calendrier complète (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) "১২,৩৪,৫৬,৭৮৯"
Copier après la connexion

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"
Copier après la connexion

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"
Copier après la connexion
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:

$nf = new NumberFormatter( 'en_US', NumberFormatter::CURRENCY );
var_dump( $nf->formatCurrency(1234.56789, "USD" ) ); // Output: string(9) ",234.57"
Copier après la connexion

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 €"
Copier après la connexion

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)
Copier après la connexion

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
// ...
Copier après la connexion

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal