首页 >后端开发 >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