如何将toDayDateTimeString方法转换为其他语言?

7 php laravel php-carbon

我希望将显示日期翻译成"de"并采用以下格式:

 Thu, Mar 8, 2018 - 6:30
Run Code Online (Sandbox Code Playgroud)

我有"app.php":

'locale' => 'de',
Run Code Online (Sandbox Code Playgroud)

然后在视图中Im使用:

{{$post->date->toDayDateTimeString()}}
Run Code Online (Sandbox Code Playgroud)

但结果仍然出现在"en"中:

 Thu, Mar 8, 2018 6:30 AM
Run Code Online (Sandbox Code Playgroud)

但是例如使用其他碳方法:{$post->date->diffForHumans()}}结果出现在"de"中,但我不想要那种格式,我想要toDayDateTimeString()格式.

你知道怎么也有这种格式toDayDateTimeString()翻译另一种语言?那么可以用另一种语言显示"Thu,Mar 8,2018 - 6:30"之类的日期吗?

Que*_*cia 4

为了将日期翻译为德语,您必须在使用之前设置适当的区域Carbon设置。

在您看来,作为一个测试,这应该足够了:

<?php setlocale(LC_TIME, 'de_DE'); ?>

{{ $post->date->formatLocalized('%a, %b %d, %Y %H:%M') }}
Run Code Online (Sandbox Code Playgroud)

对于其他格式选项,请参阅strftime()函数手册。

您必须确保系统中启用了所需的区域设置。

我假设您处于 Linux 环境中,因此您必须编辑该locale.gen文件(Arch Linux 和 Ubuntu 将其放在 中/etc/locale.gen,其他发行版可能在其他地方),并取消注释相应的行:

# de_DE ISO-8859-1
# de_DE.UTF-8 UTF-8
Run Code Online (Sandbox Code Playgroud)

必须改为

de_DE ISO-8859-1
de_DE.UTF-8 UTF-8
Run Code Online (Sandbox Code Playgroud)

更新locale.gen文件后,您需要运行locale-gen,以便您刚刚取消注释的那些新语言环境可以从 PHP 中使用。

$ locale-gen

现在确认新的区域设置可用:

$ locale -a

现在,返回浏览器,您将成功看到翻译的日期/时间。

编辑: 正如我们后来发现的,类toDayDateTimeString()中的方法Carbon不适用于本地化,因此formatLocalized()必须使用。