代码之家  ›  专栏  ›  技术社区  ›  Sebastien D

Laravel:如何使用复写在视图中本地化日期

  •  7
  • Sebastien D  · 技术社区  · 6 年前

    我正在尝试本地化 在不同语言的视图中显示日期,但迄今为止尚未成功。

    我从模型中检索日期并将其发送到视图:

    Route::get('/tables/setup', function(){
         $now=  Date::now('Europe/Paris');
    
         $active_tasks = GanttTask::whereDate('start_date', '<',  $now)
            ->whereDate('end_date', '>', $now)
            ->get();
    
         return view('my_view', compact('active_tasks'));
    
       });
    

    并且可以在“my\u view”中轻松显示它们:

      @foreach($active_tasks as $active_task)
    
         {{$active_task->start_date->format('l j F Y H:i:s')}}  //Friday 26 January 2018 09:19:54
    
         @endforeach
    

    但我无法用所需的语言呈现它们。

    我尝试添加 Carbon::setLocale('it'); 在路线或视图中没有影响。

    编辑: 我的blade调用中有轻微错误 {{$active_task->start_date->format('l j F Y H:i:s')}} 而不是 {{$active_task->format('l j F Y H:i:s')}}

    2 回复  |  直到 6 年前
        1
  •  10
  •   user320487 user320487    6 年前

    您需要使用php函数 setlocale 在设置碳纤维本地化格式之前。

    遗憾的是,基类DateTime没有任何本地化支持。为了开始本地化支持,添加了formatLocalized($format)方法。实现使用当前实例时间戳调用strftime。如果首先使用PHP函数setlocale()设置当前区域设置,则返回的字符串将在正确的区域设置中格式化。

    文档示例:

    setlocale(LC_TIME, 'German');
    echo $dt->formatLocalized('%A %d %B %Y');          // Mittwoch 21 Mai 1975
    setlocale(LC_TIME, '');
    echo $dt->formatLocalized('%A %d %B %Y');          // Wednesday 21 May 1975
    
        2
  •  2
  •   Sebastien D    6 年前

    好的,一切都修好了。

    在视图顶部:

    setlocale(LC_TIME, 'IT_it');
    

    然后刀片调用:

    {{$active_task->start_date->formatLocalized('%A %d %B %Y')}}
    

    所有学分到@Btl