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 相关文章推荐
PHP新手上路(九)
Oct 09 PHP
php $_SERVER当前完整url的写法
Nov 12 PHP
php高级编程-函数-郑阿奇
Jul 04 PHP
如何用PHP实现插入排序?
Apr 10 PHP
php获取表单中多个同名input元素的值
Mar 20 PHP
PHP判断是否有Get参数的方法
May 05 PHP
ThinkPHP登录功能的实现方法
Aug 20 PHP
phpmyadmin中禁止外网使用的方法
Nov 04 PHP
PHP文件操作方法汇总
Jul 01 PHP
PHP实现登陆表单提交CSRF及验证码
Jan 24 PHP
PHP+redis实现的购物车单例类示例
Feb 02 PHP
ThinkPHP5.1框架数据库链接和增删改查操作示例
Aug 03 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
phpMyAdmin出现无法载入 mcrypt 扩展,请检查PHP配置的解决方法
2012/03/26 PHP
给WordPress中的留言加上楼层号的PHP代码实例
2015/12/14 PHP
PHP中PDO事务处理操作示例
2018/05/02 PHP
PHP判断函数是否被定义的方法
2019/06/21 PHP
javascript实现动态增加删除表格行(兼容IE/FF)
2007/04/02 Javascript
自编jQuery插件实现模拟alert和confirm
2014/09/01 Javascript
js实现Select下拉框具有输入功能的方法
2015/02/06 Javascript
jQuery中noConflict()用法实例分析
2015/02/08 Javascript
EasyUI Combobox设置默认值 获取text的方法
2016/11/28 Javascript
简单理解Vue中的nextTick方法
2018/01/30 Javascript
Vue使用vux-ui自定义表单验证遇到的问题及解决方法
2018/05/10 Javascript
nodejs express配置自签名https服务器的方法
2018/05/22 NodeJs
微信小程序如何自定义table组件
2019/06/29 Javascript
JS使用正则表达式判断输入框失去焦点事件
2019/10/16 Javascript
JavaScript 作用域scope简单汇总
2019/10/23 Javascript
JS实现图片幻灯片效果代码实例
2020/05/21 Javascript
vuex存取值和映射函数使用说明
2020/07/24 Javascript
[01:25]DOTA2超级联赛专访iG 将调整状态找回自己
2013/06/05 DOTA
Python标准库与第三方库详解
2014/07/22 Python
NumPy 如何生成多维数组的方法
2018/02/05 Python
python定向爬取淘宝商品价格
2018/02/27 Python
ubuntu16.04制作vim和python3的开发环境
2018/09/23 Python
python得到qq句柄,并显示在前台的方法
2018/10/14 Python
Python爬虫动态ip代理防止被封的方法
2019/07/07 Python
使用pip安装python库的多种方式
2019/07/31 Python
python Django里CSRF 对应策略详解
2019/08/05 Python
Python如何给函数库增加日志功能
2020/08/04 Python
CSS去掉A标签(链接)虚线框的方法
2014/04/01 HTML / CSS
CSS3 真的会替代 SCSS 吗
2021/03/09 HTML / CSS
HTML5 Canvas实现放大镜效果示例
2020/03/25 HTML / CSS
联强国际笔试题面试题
2013/07/10 面试题
酒店前台接待岗位职责
2013/12/03 职场文书
四年的大学生生活自我评价
2013/12/09 职场文书
会议开场欢迎词
2014/01/15 职场文书
机械设备与数控技术专业求职信
2014/08/10 职场文书
建房合同协议书
2016/03/21 职场文书