首頁 >後端開發 >php教程 >與PHP-INTL的本地化日期,貨幣和數字

與PHP-INTL的本地化日期,貨幣和數字

Joseph Gordon-Levitt
Joseph Gordon-Levitt原創
2025-02-15 12:32:12263瀏覽

>本教程基於對PHP INTL擴展的先前介紹,重點是本地化複雜數據(例如數字,日期和貨幣)。 讓我們潛入!

Localizing Dates, Currency, and Numbers with Php-Intl

密鑰概念:

  • php intl擴展程序利用ICU庫進行魯棒的環境意識數據處理,對於多語言應用程序至關重要。
  • NumberFormatter處理數字本地化,解決了小數分離器中的變化以及格式的不同地區的格式。
  • >使用NumberFormatter可以輕鬆實現貨幣格式,指定貨幣代碼並使用formatCurrency> method。
  • 擴展程序為日期操作和比較提供了一個綜合的日曆API(
  • ),提供了與流行的日期/時間庫相似的功能。 IntlCalendar>

>十進制定位:

跨區域的小數分離器的不一致是一個普遍的挑戰。

類優雅地解決了這一點:NumberFormatter>

<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>
>語言環境代碼(例如'de_de','en_us')指示格式化樣式。 提供各種格式樣式(十進制,貨幣,持續時間等)。

格式化樣式和屬性:

> 我們可以使用屬性自定義數字格式:

可以控制

圓形行為:

<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>
前面介紹的

<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>
樣式也在此處適用。 解析格式的字符串通過

方法支持SPELLOUT支持。 DURATION parse貨幣本地化:

格式數字作為貨幣很簡單:>

方法簡化了貨幣符號檢索:
<code class="language-php">$nf = new NumberFormatter( 'en_US', NumberFormatter::CURRENCY );
var_dump( $nf->formatCurrency(1234.56789, "USD" ) ); // Output: string(9) ",234.57"</code>

getSymbol

>時區和日曆:
<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>

> >管理時區,鏡像

的功能。

為日曆操作提供了豐富的API:IntlTimeZone DateTimeZone IntlCalendar日期導航是直觀的:

<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>

結論:
<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>
由ICU提供支持的PHP INTL擴展名提供了一種強大而全面的解決方案,用於將您的PHP應用程序國際化。 這個兩部分系列涵蓋了消息本地化,現在復雜的數據本地化。未來的文章將探討INTL擴展中的其他功能。

以上是與PHP-INTL的本地化日期,貨幣和數字的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn