如何使用PHP中的国际化功能来查看货币及日期信息

做为一门在世界范围内广泛使用的编程语言,国际化能力往往是衡量一个编程语言是否能够大范围流行的重要内容。特别是对于php这种以web页面编程为主战场的语言来说,国际化能力更是重中之重。今天我们简单的学习一下与国际化相关的扩展及函数库。

如何使用PHP中的国际化功能来查看货币及日期信息

在 PHP 中,已经为我们准备好了很多国际化相关的扩展及函数库,今天我们先来简单的学习一下,后面在学习到具体的 国际化与字符编码支持 相关的函数库时再进行深入的讲解学习。

获取当前浏览器用户的所在地

首先,我们来获取当前访问用户的所在地信息,也就是我们常见的 zh-cn 、 en-us 这类的地区语言编码信息。

// $_SERVER['HTTP_ACCEPT_LANGUAGE'] = zh-CN,zh;q=0.9;$browserLocale = Locale::acceptFromHttp($_SERVER['HTTP_ACCEPT_LANGUAGE']);print_r($browserLocale);echo '
';// zh

登录后复制

浏览器传递的这类区域信息是 zh-CN,zh;q=0.9; 这种形式的,我们可以通过 Locale::acceptFromHttp() 获得具体的区域信息。不过需要注意的是,不管是 zh-cn 还是 zh-tw ,返回的都是 zh ,而英文则会返回具体的是 en-us 还是 en-gd 之类的内容,也就是说这个函数对于我们中文语言的结果获取是有问题的。

立即学习“PHP免费学习笔记(深入)”;

$locale = ['en', 'fr-FR', 'da, en-gb;q=0.8, en;q=0.7', 'zh-cn', 'zh-tw', 'en-us', 'en-ca', 'ja-jp'];foreach($locale as $code){    print_r(Locale::acceptFromHttp($code));    echo '
';}// en// fr_FR// da// zh// zh// en_US// en_CA// ja_JP

登录后复制

我们可以手动来指定区域信息,可以看出除了 zh 之外其它的都是可以获取到正常的具体区域信息的。这点是我们使用这个函数时需要注意的地方。

获取指定地区所在地的标准数字信息

对于我们中国人来,数字比较习惯的是百、千、万位,一般也不太需要区分,而西方国家则喜欢三位一个逗号的分隔开来,也就是对应他们的英文数字习惯,比如 10000,在西方表示中是 10,000 ,英语是 ten thousand , 10000000 表示为 10,000,000 ,英语是 ten million 。因此,在 PHP 中,也是有相对于这种情况的数字表示形式,也就是为普通数字加上逗号以表示西方数字标准格式。

$locale = ['en', 'fr-FR', 'en-gb', 'zh-cn','en-us', 'ko-kr', 'ja-jp'];$money = 1234567.89;foreach($locale as $code){    $numberformat = new NumberFormatter($code, NumberFormatter::DECIMAL);    echo $code, ":";    echo $numberformat->format($money), ', ';    echo $numberformat->parse($numberformat->format($money)), '
';}// en:1,234,567.89, 1234567.89// fr-FR:1 234 567,89, // en-gb:1,234,567.89, 1234567.89// zh-cn:1,234,567.89, 1234567.89// en-us:1,234,567.89, 1234567.89// ko-kr:1,234,567.89, 1234567.89// ja-jp:1,234,567.89, 1234567.89

登录后复制

我们直接使用 format() 方法,就可以获得指定地区的标准数字表示形式。可以看出亚洲地区的都是和欧美国家相同的,但法国则是使用空格进行分隔的。

获取指定地区所在地的货币符号信息

既然有数字格式的不同了,那么货币形式的区别就也是类似的形式了,只不过我们在使用 NumberFormatter 类的时候需要指定后面的数字类型常量为货币形式 NumberFormatter::PERCENT 。

oreach($locale as $code){    $numberformat = new NumberFormatter($code, NumberFormatter::PERCENT);    echo $code, ":";    echo $numberformat->format($money), '
';}// en:¤1,234,567.89// fr-FR:1 234 567,89 €// en-gb:£1,234,567.89// zh-cn:¥1,234,567.89// en-us:$1,234,567.89// ko-kr:₩1,234,568// ja-jp:¥1,234,568

登录后复制

看出来了吗,当指定了货币形式后,format() 出来的结果直接就带上了货币符号。第一个 en 的货币符号其实就是国际通用货币符号,而日元和我们人民币的符号是相同的,这也是一个有趣的历史知识,大家可以自行查询下。

获取指定地区所在地的完整日期

最后就是获取的各地的日期标准格式。其实现在大家通用的都是 yyyy-mm-dd 这种形式来表示日期,不过正式规范的日期标准格式各个地区还是有所不同的。

$date = '2020-09-25 11:05:22';foreach($locale as $code){    $l = new Locale($code);        $d = new IntlDateFormatter($code, IntlDateFormatter::FULL, IntlDateFormatter::FULL);    $c = IntlCalendar::createInstance(NULL, $code);    $c->set('2020', '09', '25', '11', '22', '33');    echo $code, ":";    echo $d->format($c), "
";}// en:Friday, September 25, 2020 at 2:48:12 PM China Standard Time// fr-FR:vendredi 25 septembre 2020 à 14:48:12 heure normale de la Chine// en-gb:Friday, 25 September 2020 at 14:48:12 China Standard Time// zh-cn:2020年9月25日星期五 中国标准时间 下午2:48:12// en-us:Friday, September 25, 2020 at 2:48:12 PM China Standard Time// ko-kr:2020년 9월 25일 금요일 오후 2시 48분 12초 중국 표준시// ja-jp:2020年9月25日金曜日 14時48分12秒 中国標準時

登录后复制

是不是很方便,直接就以当地的语言来表示指定地区的标准日期格式了。

总结

对于跨境项目来说,这些功能是非常重要的能力,能够帮助我们快捷地开发或切换相关的地区,等到深入学习的时候再进行详细的学习讲解,这次就全当是一次热身吧!

测试代码:

https://github.com/zhangyue0503/dev-blog/blob/master/php/202009/source/11.学习PHP中的国际化功能来查看货币及日期信息.php

登录后复制

推荐学习:php视频教程

以上就是如何使用PHP中的国际化功能来查看货币及日期信息的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2115791.html

(0)
上一篇 2025年2月24日 17:13:43
下一篇 2025年2月23日 09:37:08

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • PHP如何使用MySQLi中的MySQLI_result对象操作

    在之前我们就已经接触过mysqli_result相关的内容。它其实就是一个查询的结果集。不过在pdo中,一般通过query()或者pdostatement对象进行查询后就返回结果。但在mysqli中,会把查询到的结果也放入一个对象中,这就是…

    2025年2月24日
    200
  • php $_files怎么用

    在php中,“$_files”是一个预定义的数组,用来获取通过POST方法上传文件的相关信息,包括文件的原名称、文件的MIME类型、已上传文件的大小、文件被上传后在服务端储存的临时文件名、和该文件上传相关的错误代码。 本教程操作环境:win…

    2025年2月24日
    200
  • php怎么将字符串转为布尔类型

    转换方法:1、在转换变量前加上用括号括起来的目标类型“(bool)”或“(boolean)”;2、用boolval()函数,语法“boolval(字符串)”;3、用settype()函数,语法“settype(变量,”boole…

    2025年2月24日 编程技术
    200
  • php与nodejs的区别是什么

    区别:1、PHP是一种编程语言,Node.js是一个JavaScript运行环境。2、PHP应用程序可以在任何服务器上运行,且部署容易;Node.js需要具有SSH访问权限的虚拟服务器。3、PHP支持开发者开发的资源相比nodejs多。 本…

    2025年2月24日
    200
  • 浅谈PHP中的迭代器模式

    在之前的文章《深入浅析php中的观察者模式》中我们介绍了php中的观察者模式,下面本篇文章带大家了解一下php中的迭代器模式。 一说到这个模式,就不得不提循环语句。在《大话设计模式》中,作者说道这个模式现在的学习意义更大于实际意义,这是为什…

    2025年2月24日
    200
  • php创建图像具体步骤

    php创建图像具体步骤:1、设定标头,告诉浏览器要生成的MIME类型;2、创建一个画布;3、进行颜色管理;4、填充颜色;5、绘制图形和文字;6、输出图像;7、销毁图像。 本文操作环境:windows7系统、PHP7.1版,DELL G3电脑…

    2025年2月24日
    200
  • php怎么清除空格换行

    php清除空格换行的方法:1、通过“function clearHtml($str){…}”方法清除;2、通过“strip_tags()”函数去除;3、通过正则表达式清除。 本文操作环境:windows7系统、PHP7.1版,D…

    2025年2月24日
    200
  • php post传值乱码怎么办

    php post传值乱码的解决办法:1、在传递前进行编码 ,并在传递后解码;2、利用“iconv(‘UTF-8′,’GB18030′,$_GET[“name”])”来解码。 本文操作环境:windows7系统、PHP…

    2025年2月24日
    200
  • php date函数出错怎么办

    php date函数出错的解决办法:1、在php.ini里加上date.timezone项;2、在页面添加“date_default_timezone_set(“PRC”);”;3、在页头设置时区。 本文操作环境:w…

    2025年2月24日
    200
  • php弹出提示框中文乱码怎么办

    php弹出提示框中文乱码的解决办法就是在alert前面加一句编码输出语句为“header(“Content-Type:text/html;charset=utf-8”);”即可。 本文操作环境:windows7系统、…

    2025年2月24日
    200

发表回复

登录后才能评论