举个例子:
{{ $article->created_at->format('M') }}
返回Nov
。我需要将其本地化为我的语言,因此输出应为Kas
考虑做以下事情:
{{ trans("language.{$article->created_at->format('M')}") }}
app/lang/tr/language.php -> 'nov' => 'kas'
这看起来像重新发明轮子并且在程序上非常可怕。我确信有一些本地化标准。类似的东西:
{{ $article->created_at->format('M')->localiseTo('tr_TR') }}
实现这一目标的最佳方式是什么?
答案 0 :(得分:24)
将库用作Laravel-Date,您只需在Laravel应用程序配置文件中设置应用程序的语言,并使用其功能根据需要设置日期格式。
在/app/config/app.php中设置语言
'locale' => 'es',
我发现这个库非常实用且干净。要使用它,您可以在库自述文件中编写类似示例的内容。我把结果留给西班牙语。
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
这是存储库的链接:
要安装此库,您可以按照以下链接中的说明进行操作:
答案 1 :(得分: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
基本上,只需使用formatLocalized('M')
代替format('M')
答案 2 :(得分:4)
在使用Carbon日期实例时,最好为每个请求(例如,在filters.php中)设置全局区域设置。
App::before(function($request) {
setlocale(LC_TIME, 'sk_SK.utf8');
});
然后照常进行
$dt->formatLocalized('%b'); // $dt is carbon instance
答案 3 :(得分:1)
除了接受的答案之外,我还在寻找一种方法,使用created_at的Carbon实例在Blade中使用它。接受的答案中的类似乎不接受Carbon实例作为日期,而是从字符串中解析日期。
我写了一个小帮助函数来缩短刀片模板中的代码:
function localeDate($date, $format)
{
return Jenssegers\Date\Date::createFromFormat('d-m-Y H:i:s', $date->format('d-m-Y H:i:s'))->format($format);
}
在Blade中,您现在可以使用:
{{ localeDate($model->created_at, 'F') }}
这将返回config / app.php
中设置的语言环境中月份的完整书名如果有更好的方式(或我错过了代码中的内容),请告诉我。否则这可能对其他人有帮助。
答案 4 :(得分:0)
我想你应该咨询setlocale联机帮助页。虽然我不确定Laravel是否有任何包装。
答案 5 :(得分:0)
转到您的App-> Config-> app.php 放
'timezone' => 'Asia/Kolkata',
使用简单的{{$post->created_at->diffForHumans()}}