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

时间:2013-11-18 20:41:38

标签: php laravel

举个例子:

{{ $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') }}

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

6 个答案:

答案 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

这是存储库的链接:

  

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

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

  

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

答案 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

请参阅格式选项here和区域设置列表here

答案 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()}}