Laravel项目中timeAgo字段语言转换的改善方法示例


Posted in PHP onSeptember 16, 2019

前言

在我们过去的Laravel项目中,经常需要用到time_ago这样的字段,并将其转换为我们熟悉的本地语言,可以实现的方式有很多,比如编写一个time_ago的辅助函数将其转换成本地,或采用carbon的diffForHumans函数然后替换成本地语言来实现.

过去我们编写过的代码像这样:

Laravel项目中timeAgo字段语言转换的改善方法示例

这样

Laravel项目中timeAgo字段语言转换的改善方法示例

但是我们需要将其替换成中文、繁体中文、日本或是韩文时,我们就需要编写多个类似的方法如:

time_ago_CN //简体中文
time_ago_HK //繁体中文
time_ago_JP //日文
time_ago_KO //韩文

当项目变得国际化,或者需要支持更多语言时,就显得不太方便.但是最近翻阅carbon的官方文档时,发现carbon是支持多语言的,也就是上面的事情,carbon都实现过了...(这为我们的技术债又添上了一笔)

如果我们想支持中文的话,我们可以为模型上添加以上方法

public function createdAt($locale = 'zh')
{
  Carbon::setLocale($locale);
  return $this->created_at->diffForHumans();
}

然后调用方式如下:

//中文
$user->createdAt(); //9个月前
//简繁体
$user->createdAt('zh_HK'); //9??月前
//日文
$user->createdAt('ja_JP'); //9ヶ月前

如果你想让他变得更通用化,建议封装成辅助函数

function time_ago($time, $locale = 'zh')
{
  $time = $time instanceof Carbon ? $time : Carbon::parse($time);
  Carbon::setLocale($locale);
  return $time->diffForHumans();
}

carbon语言支持:https://carbon.nesbot.com/contribute/translate/

carbon2.0默认在laravel5.8开始支持,如果是低于该版本的话,可以通过以下方式来使用carbon2.0,如laravel5.6

在composer.json中添加以下选项

{
  "require": {
    "nesbot/carbon": "2.24.0 as 1.39.0",
    "kylekatarnls/laravel-carbon-2": "^1.0.0"
  }
}

然后执行composer update来更新我们的依赖项

composer update

最后送上carbon官方文档地址:https://carbon.nesbot.com/

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

PHP 相关文章推荐
人大复印资料处理程序_查询篇
Oct 09 PHP
Yii框架登录流程分析
Dec 03 PHP
PHP设计模式之迭代器模式
Jun 17 PHP
Thinkphp事务操作实例(推荐)
Apr 01 PHP
PHP下 Mongodb 连接远程数据库的实例代码
Aug 30 PHP
Laravel构建即时应用的一种实现方法详解
Aug 31 PHP
PHP如何实现阿里云短信sdk灵活应用在项目中的方法
Jun 14 PHP
php判断目录存在的简单方法
Sep 26 PHP
在Laravel的Model层做数据缓存的实现
Sep 26 PHP
php伪静态验证码不显示的解决方案
Sep 26 PHP
PHP使用PDO实现mysql防注入功能详解
Dec 20 PHP
Centos7安装swoole扩展操作示例
Mar 26 PHP
php解决crontab定时任务不能写入文件问题的方法分析
Sep 16 #PHP
PHP实现一个限制实例化次数的类示例
Sep 16 #PHP
thinkPHP5框架路由常用知识点汇总
Sep 15 #PHP
php项目中类的自动加载实例讲解
Sep 12 #PHP
php+jQuery ajax实现的实时刷新显示数据功能示例
Sep 12 #PHP
php创建多级目录与级联删除文件的方法示例
Sep 12 #PHP
PHP实现的文件浏览器功能简单示例
Sep 12 #PHP
You might like
FastCGI 进程意外退出造成500错误
2015/07/26 PHP
php数组冒泡排序算法实例
2016/05/06 PHP
浅谈Laravel队列实现原理解决问题记录
2017/08/19 PHP
php mysql PDO 查询操作的实例详解
2017/09/23 PHP
PHP实现网站访问量计数器
2017/10/27 PHP
BOOM vs RR BO3 第一场2.13
2021/03/10 DOTA
JavaScript中null与undefined分析
2009/07/25 Javascript
JavaScript 三种不同位置代码的写法
2009/10/25 Javascript
快速解决FusionCharts联动的中文乱码问题
2013/12/04 Javascript
JavaScript中的Math.LN2属性用法详解
2015/06/12 Javascript
基于jQuery Ajax实现上传文件
2016/03/24 Javascript
Javascript 正则表达式校验数字的简单实例
2016/11/02 Javascript
JS异步文件上传(兼容IE8+)
2017/04/02 Javascript
页面间固定参数,通过cookie传值的实现方法
2017/05/31 Javascript
详谈innerHTML innerText的使用和区别
2017/08/18 Javascript
jQury Ajax使用Token验证身份实例代码
2017/09/22 Javascript
iframe高度自适应及隐藏滚动条的实例详解
2017/09/29 Javascript
Angular5.1新功能分享
2017/12/21 Javascript
详解vue静态资源打包中的坑与解决方案
2018/02/05 Javascript
解决LayUI表单获取不到data的问题
2018/08/20 Javascript
python在windows命令行下输出彩色文字的方法
2015/03/19 Python
Python文档生成工具pydoc使用介绍
2015/06/02 Python
放弃 Python 转向 Go语言有人给出了 9 大理由
2017/10/20 Python
python3对接mysql数据库实例详解
2019/04/30 Python
使用python写的opencv实时监测和解析二维码和条形码
2019/08/14 Python
python实现视频读取和转化图片
2019/12/10 Python
详细分析Python垃圾回收机制
2020/07/01 Python
HTML5实现Notification API桌面通知功能
2016/03/02 HTML / CSS
全球最大的游戏市场:G2A
2018/07/05 全球购物
高中自我评价分享
2013/12/05 职场文书
公司财务自我评价分享
2013/12/17 职场文书
《小熊住山洞》教学反思
2014/02/21 职场文书
天猫某品牌专卖店运营计划书
2014/03/21 职场文书
保护环境倡议书300字
2014/05/19 职场文书
法院授权委托书范文
2014/08/02 职场文书
2014最新房贷收入证明范本
2014/09/12 职场文书