Rumah > pembangunan bahagian belakang > tutorial php > Tarikh, Mata Wang, dan Nombor Lokalisasi dengan PHP-INTL

Tarikh, Mata Wang, dan Nombor Lokalisasi dengan PHP-INTL

Joseph Gordon-Levitt
Lepaskan: 2025-02-15 12:32:12
asal
261 orang telah melayarinya

Tutorial ini membina pengenalan sebelumnya kepada lanjutan PHP INTL, yang memberi tumpuan kepada penyetempatan data kompleks seperti nombor, tarikh, dan mata wang. Mari kita menyelam!

Localizing Dates, Currency, and Numbers with Php-Intl

Konsep Utama:

    Pelanjutan INTL PHP memanfaatkan perpustakaan ICU untuk pengendalian data yang tegas, penting untuk aplikasi berbilang bahasa.
  • mengendalikan penyetempatan nombor, menangani variasi dalam pemisah perpuluhan dan gaya pemformatan di seluruh kawasan yang berbeza.
  • NumberFormatter pemformatan mata wang mudah dicapai dengan
  • , menyatakan kod mata wang dan menggunakan kaedah
  • . NumberFormatter formatCurrency Pelanjutan menyediakan API Kalendar Komprehensif (
  • ) untuk manipulasi dan perbandingan tarikh, menawarkan fungsi yang serupa dengan perpustakaan tarikh/masa popular.
  • IntlCalendar
Penyetempatan perpuluhan:

ketidakkonsistenan dalam pemisah perpuluhan di seluruh wilayah adalah cabaran yang sama. Kelas

dengan elegan menyelesaikan ini:

NumberFormatter

Kod locale (mis., 'De_de', 'en_us') menentukan gaya pemformatan. Pelbagai gaya pemformatan (perpuluhan, mata wang, tempoh, dan lain -lain) boleh didapati.
$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) "১২,৩৪,৫৬,৭৮৯"
Salin selepas log masuk

gaya format dan atribut:

kita boleh menyesuaikan pemformatan nombor menggunakan atribut:

tingkah laku pembulatan dapat dikawal:
$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"
Salin selepas log masuk

$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"
Salin selepas log masuk
dan

gaya, diperkenalkan sebelum ini, juga memohon di sini. Parsing Strings Formats kembali ke nombor disokong melalui kaedah SPELLOUT. DURATION parse

Penyetempatan mata wang:

nombor pemformatan sebagai mata wang adalah mudah:

kaedah
$nf = new NumberFormatter( 'en_US', NumberFormatter::CURRENCY );
var_dump( $nf->formatCurrency(1234.56789, "USD" ) ); // Output: string(9) ",234.57"
Salin selepas log masuk
memudahkan pengambilan simbol mata wang:

getSymbol

$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 €"
Salin selepas log masuk
zon waktu dan kalendar:

Menguruskan zon waktu, mencerminkan fungsi

. IntlTimeZone menyediakan API yang kaya untuk operasi kalendar: DateTimeZone IntlCalendar

navigasi tarikh intuitif:
$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)
Salin selepas log masuk

$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
// ...
Salin selepas log masuk
Kesimpulan:

PHP INTL Extension, yang dikuasakan oleh ICU, menawarkan penyelesaian yang kuat dan komprehensif untuk mengantaraikan aplikasi PHP anda. Siri dua bahagian ini telah meliputi penyetempatan mesej dan kini penyetempatan data yang kompleks. Artikel masa depan akan meneroka fungsi tambahan dalam lanjutan INTL.

Atas ialah kandungan terperinci Tarikh, Mata Wang, dan Nombor Lokalisasi dengan PHP-INTL. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan