>本教程基於對PHP INTL擴展的先前介紹,重點是本地化複雜數據(例如數字,日期和貨幣)。 讓我們潛入!
密鑰概念:
NumberFormatter
處理數字本地化,解決了小數分離器中的變化以及格式的不同地區的格式。 NumberFormatter
可以輕鬆實現貨幣格式,指定貨幣代碼並使用formatCurrency
> method。
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中文網其他相關文章!