【问题标题】:Carbon setLocale not working LaravelCarbon setLocale 不工作 Laravel
【发布时间】:2022-01-12 13:51:48
【问题描述】:

我已经阅读了几个关于设置语言环境的 stackoverflows。我在终端中测试了 locale -a 以查看我的语言环境是否在其中,并且确实存在。在appServiceProvider中添加如下代码规则:

public function boot()
{
    Carbon::setLocale($this->app->getLocale());
}

$this->app->getLocale() 返回“nl”

有人知道为什么 Carbon 仍然显示星期日而不是 Zondag 吗?

【问题讨论】:

    标签: php laravel php-carbon


    【解决方案1】:

    使用全球本地化格式翻译碳日期

    测试于:Laravel 5.8、Laravel 6、Laravel 8


    在 config/app.php 中

    'locale' => 'id', // The default is 'en', but this time I want localize them to Indonesian (ID)
    

    然后,要使语言环境输出执行以下操作:

    // WITHOUT LOCALE
    Carbon\Carbon::parse('2019-03-01')->format('d F Y'); //Output: "01 March 2019"
    now()->subMinute(5)->diffForHumans(); // Output: "5 minutes ago"
    
    // WITH LOCALE
    Carbon\Carbon::parse('2019-03-01')->translatedFormat('d F Y'); // Output: "01 Maret 2019"
    now()->subMinute(5)->diffForHumans(); // Output: "5 menit yang lalu"
    

    有关转换本地化日期的更多信息,您可以在下面的链接中查看 https://carbon.nesbot.com/docs/#api-localization

    【讨论】:

    • 这应该用于 Laravel 8
    • 注意,如果你使用 Laravel 5.5+,locale 会根据当前最后一次 App:setLocale 执行自动设置。所以diffForHumansisoFormattranslatedFormat->dayName->monthName 等本地化属性将被透明地本地化。
    【解决方案2】:

    您可能想在应用程序的开头使用setLocale(LC_TIME, $this->app->getLocale())

    然后,如果您希望使用本地名称的本地化日期格式,请使用 formatLocalized 函数

    Carbon::now()->formatLocalized('%d %B %Y');
    

    格式参数见http://php.net/manual/en/function.strftime.php

    【讨论】:

    • {{$var->start_at->formatLocalized('d-m-Y')}} 这似乎不起作用,它只是将 d-m-y 回显为字符串
    • 您是否在运行该模板之前添加了 LC_TIME 设置?
    • 它在我的 appserviceprovider 中,所以是的,该命令应该在应用启动时运行
    • 哦,等等,formatLocalized 使用了不同的格式。试试%d %B %Y
    • 看来问题出在 Carbon::setLocale,当我使用 setLocale 时,它​​起作用了,谢谢!正在阅读您的帖子中的内容
    【解决方案3】:

    试试这个:setLocale(LC_TIME, app()->getLocale());

    【讨论】:

    • 正确答案是几个月前给出的。无需重复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-28
    • 1970-01-01
    • 2014-07-01
    • 2011-06-12
    相关资源
    最近更新 更多