【问题标题】:Laravel APP_LOCALE in spanishLaravel APP_LOCALE 西班牙语
【发布时间】:2017-10-11 22:54:54
【问题描述】:

在 Laravel 5.4 中,.env 我有:

APP_LOCALE=es
APP_FALLBACK_LOCALE=en
APP_LOCALE_PHP=es_US

config/app.php:

'locale' => env('APP_LOCALE', 'es'),
'fallback_locale' => env('APP_FALLBACK_LOCALE', 'en'),
'locale_php' => env('APP_LOCALE_PHP', 'en_US'),

但我想设置为西班牙语。例如,在控制器中我有:

$mydate = date('d F Y', strtotime($data->created));

$data->created 是来自数据库的字符串,来自created_at 列。这样它显示为:

14 August 2017

英语,所以 ¿我怎样才能得到西班牙语?

我用es测试APP_LOCALES,什么也没发生。我在 $mydate 之前尝试了setlocale(LC_TIME, "es");,结果是一样的。顺便说一句,我正在保存更改并执行php artisan config:cache

【问题讨论】:

  • date() 不知道语言环境。 Laravel 必须有一些内置的方法来本地化日期。
  • stackoverflow.com/a/30291265/463205。这并不是一个真正的 Laravel 特定问题,只是 date() 不尊重语言环境,而 strftime() 确实如此。
  • 看看Carbon,它也处理语言环境,并且被 Laravel 广泛支持。
  • 我没有找到使用 Laravel 的人,然后他们求助于 datestrftime。你为什么要使用 10 年前的今天已经过时的东西?无论如何,你在 Laravel 中获得了 Carbon,使用它。 date 将假定服务器的默认时区。您很幸运能够在您自己的时区拥有您的服务器,并且您正在为您所在国家/地区的人们这样做。了解如何使用 Carbon 并永远忘记日期、时区或夏令时。使用起来也超级简单。
  • @Mjh 当然你不能得到它,因为你不知道问题的整个上下文:重用 MB 代码,来自不同语言和框架的多个服务,一个团队,而不仅仅是我摸了摸代码等等,这样的东西没必要评论。

标签: php laravel setlocale


【解决方案1】:

我建议你使用 Carbon,它为 DateTime 操作提供了方便的原语,并且 Laravel 开箱即用地完全支持它(因此没有额外的包或 composer require 操作)。要格式化本地化日期,您只需要几行代码:

use \Carbon\Carbon;

...

setlocale(LC_TIME, 'es_ES.UTF-8');
Carbon::setLocale('es');
$mydate = Carbon::parse($data->created)->formatLocalized('%d %B %Y');

如果您想跳过Carbon 步骤,只需使用setlocale 设置时间区域设置即可。要获取 UNIX 机器中已安装语言环境的列表,请运行以下命令

$ locale -a

在您的终端中,或者如果您需要向您的机器添加语言环境,请取消注释 /etc/locale.gen(例如 es_ES.UTF8)中与您的语言环境相对应的行,然后在您的终端中运行以下命令以生成语言环境

$ sudo locale-gen es_ES.UTF-8

然后在您的机器输入中更新语言环境列表

$ sudo update-locale

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 2017-01-05
    • 1970-01-01
    • 1970-01-01
    • 2013-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多