Laravel 如何分别转换所有碳实例而不是translatedFormat()

Laravel 如何分别转换所有碳实例而不是translatedFormat(),laravel,php-carbon,Laravel,Php Carbon,我在以用户首选语言输出日期时遇到问题。我有一个在内核中注册的中间件,它根据该用户的首选语言环境呈现应用程序 \App::setLocale($user->locale); setlocale(LC_ALL, config('app.locale')); Carbon::setLocale(config('app.locale')); 这并没有改变碳日期的语言(应用程序语言应该改变)。当我通过在

我在以用户首选语言输出日期时遇到问题。我有一个在内核中注册的中间件,它根据该用户的首选语言环境呈现应用程序

                \App::setLocale($user->locale);
                setlocale(LC_ALL, config('app.locale'));
                Carbon::setLocale(config('app.locale'));
这并没有改变碳日期的语言(应用程序语言应该改变)。当我通过在刀片视图上显示来检查设置时,应用程序正在正确设置碳的选定区域设置

但我只能用所选语言显示日期,如果我对特定实例使用
translatedFormat()
函数,我想我可能有100多个实例,对于一些实例,我使用访问器在模型中格式化输出。这是正常的行为吗?我必须单独做这件事吗?我以为我是在全球范围内设置语言环境


谢谢。

$user->locale
是用户首选的区域设置,但
config('app.locale')
不是(它是应用程序回退区域设置)

从理论上讲,
\App::setLocale
也已经改变了
Carbon
区域设置,
setLocale
仅在依赖操作系统翻译时使用(例如使用旧方法
Carbon::formatLocalized
),但您应该使用
isoFormat
calendar
diffForHumans
或依靠
Carbon
嵌入式翻译的方法,因此无需更改
LC\u ALL
设置。所以
\App::setLocale($user->locale)应该就足够了。但是,您需要使用实际翻译东西的方法,例如
format()
实际上是
DateTime::format
PHP本机方法,无论您的设置如何,这个方法都只有英文输出

\App::setLocale($user->locale);
setlocale(LC_ALL, $user->locale);
Carbon::setLocale($user->locale);