什么是在Laravel上本地化日期的最佳方式?

Ari*_*ona 26 php laravel

举个例子:

{{ $article->created_at->format('M') }}
Run Code Online (Sandbox Code Playgroud)

它回来了Nov.我需要将它本地化为我的语言,所以输出应该是Kas

考虑做以下事情:

{{ trans("language.{$article->created_at->format('M')}") }}

app/lang/tr/language.php -> 'nov' => 'kas'
Run Code Online (Sandbox Code Playgroud)

这看起来像重新发明轮子和编程相当可怕.我确信有一些本地化标准.就像是:

{{ $article->created_at->format('M')->localiseTo('tr_TR') }}
Run Code Online (Sandbox Code Playgroud)

实现这一目标的最佳方法是什么?

Mar*_*ian 26

使用库作为Laravel-日期,你只需要设置在Laravel应用程序配置文件中的应用程序的语言,并使用其功能要格式化的日期.

在/app/config/app.php中设置语言

'locale' => 'es',
Run Code Online (Sandbox Code Playgroud)

我发现这个库非常有用和干净.要使用它,您可以在库自述文件中编写类似示例的内容.我把结果留给西班牙语.

echo Date::now()->format('l j F Y H:i:s'); // domingo 28 abril 2013 21:58:16

echo Date::parse('-1 day')->diffForHumans(); // 1 día atrás
Run Code Online (Sandbox Code Playgroud)

这是存储库的链接:

https://github.com/jenssegers/laravel-date

要安装此库,您可以按照以下链接中的说明进行操作:

https://github.com/jenssegers/laravel-date#installation

  • 请查看 Arthur Tavares 的答案,因为此解决方案已被弃用。您可以在没有包的情况下实现相同的目的(/sf/answers/4919433711/)。 (2认同)

Art*_*res 17

从carbon版本2.30.0开始,您可以使用translatedFormat函数

$date = Carbon::parse('2021-12-08 11:35')->locale('pt-BR');
echo $date->translatedFormat('d F Y'); //  08 dezembro 2021
Run Code Online (Sandbox Code Playgroud)


Bri*_*laz 11

当您在Laravel中从模型中检索日期时,您将获得一个Carbon对象:https: //github.com/briannesbitt/Carbon

如果您参考Carbon文档,它会告诉您如何获取区域设置格式化日期:

不幸的是,基类DateTime没有任何本地化支持.要开始本地化支持,添加了formatLocalized($ format)方法.该实现使用当前实例时间戳调用strftime.如果首先使用setlocale()设置当前语言环境,则返回的字符串将以正确的语言环境格式化.

setlocale(LC_TIME, 'German');                     
echo $dt->formatLocalized('%A %d %B %Y');          // Donnerstag 25 Dezember 1975
setlocale(LC_TIME, '');                           
echo $dt->formatLocalized('%A %d %B %Y');          // Thursday 25 December 1975
Run Code Online (Sandbox Code Playgroud)

所以基本上,只需使用formatLocalized('M')而不是format('M')


zub*_*b0r 5

使用Carbon日期实例时,最好为每个请求全局设置语言环境(例如,在filters.php中)。

App::before(function($request) {
    setlocale(LC_TIME, 'sk_SK.utf8');
});
Run Code Online (Sandbox Code Playgroud)

然后照常进行

$dt->formatLocalized('%b'); // $dt is carbon instance
Run Code Online (Sandbox Code Playgroud)

请参阅此处的格式选项和此处的语言环境列表。