在我们过去的 Laravel 项目中, 经常需要用到 time_ago 这样的字段, 并将其转换为我们熟悉的本地语言, 可以实现的方式有很多, 比如编写一个 time_ago 的辅助函数将其转换成本地, 或采用 carbon 的 diffForHumans 函数然后替换成本地语言来实现.
过去我们编写过的代码像这样:
这样
但是我们需要将其替换成中文、繁体中文、日本或是韩文时, 我们就需要编写多个类似的方法如:
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/