乐趣区

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

在我们过去的 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/

退出移动版