首页 > 后端开发 > php教程 > 与PHP-INTL的本地化日期,货币和数字

与PHP-INTL的本地化日期,货币和数字

Joseph Gordon-Levitt
发布: 2025-02-15 12:32:12
原创
261 人浏览过

>本教程基于对PHP INTL扩展的先前介绍,重点是本地化复杂数据(例如数字,日期和货币)。 让我们潜入!

Localizing Dates, Currency, and Numbers with Php-Intl

密钥概念:

  • php intl扩展程序利用ICU库进行鲁棒的环境意识数据处理,对于多语言应用程序至关重要。
  • NumberFormatter处理数字本地化,解决了小数分离器中的变化以及格式的不同地区的格式。
  • >使用NumberFormatter可以轻松实现货币格式,指定货币代码并使用formatCurrency> method。
  • 扩展程序为日期操作和比较提供了一个综合的日历API(
  • ),提供了与流行的日期/时间库相似的功能。IntlCalendar>

>十进制定位:

跨区域的小数分离器的不一致是一个普遍的挑战。

类优雅地解决了这一点:NumberFormatter>

$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) "১২,৩৪,৫৬,৭৮৯"
登录后复制
>语言环境代码(例如'de_de','en_us')指示格式化样式。 提供各种格式样式(十进制,货币,持续时间等)。

格式化样式和属性:

> 我们可以使用属性自定义数字格式:

可以控制

圆形行为:

$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"
登录后复制
前面介绍的

$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"
登录后复制
样式也在此处适用。 解析格式的字符串通过

方法支持SPELLOUT支持。 DURATION parse货币本地化:

格式数字作为货币很简单:>

方法简化了货币符号检索:
$nf = new NumberFormatter( 'en_US', NumberFormatter::CURRENCY );
var_dump( $nf->formatCurrency(1234.56789, "USD" ) ); // Output: string(9) ",234.57"
登录后复制

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 €"
登录后复制

> >管理时区,镜像

的功能。

为日历操作提供了丰富的API:IntlTimeZone DateTimeZone IntlCalendar日期导航是直观的:

$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)
登录后复制

结论:
$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
// ...
登录后复制
由ICU提供支持的PHP INTL扩展名提供了一种强大而全面的解决方案,用于将您的PHP应用程序国际化。 这个两部分系列涵盖了消息本地化,现在复杂的数据本地化。未来的文章将探讨INTL扩展中的其他功能。

以上是与PHP-INTL的本地化日期,货币和数字的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板