【问题标题】:Laravel strftime with Homestead ain't workingLaravel strftime 与 Homestead 不起作用
【发布时间】:2014-08-29 12:09:49
【问题描述】:

我在使用 Laravel 和 Homestead 本地化设置日期时遇到了很多麻烦(我不知道 homestead 是否有任何使其无法正常工作的服务器配置,但这是我的问题)。我想互联网上的任何人都在为同样的问题而苦苦挣扎。我一直在寻找答案几个小时,却没有找到更接近解决方案的地方。这是我的代码。

public function formated_start()
{
    setlocale(LC_ALL, 'sv_SE');
    return strftime('%A %H:%M', strtotime($this->start));
}

我也尝试过使用 laravel 特定

public function formated_start()
{
    App::setLocale('sv_SE')
    return strftime('%A %H:%M', strtotime($this->start));
}

仍然是相同的结果,没有任何变化,在这种情况下瑞典语中应该是星期几的 %A 仍然是英语。

【问题讨论】:

    标签: php laravel localization laravel-4 strftime


    【解决方案1】:

    如果您的问题是一般性的,您可以尝试使用 Laravel4-lang,而不是专门使用 strftime,它是通过 composer 安装的。 添加到composer.json 文件:

    "require": { "laravel/framework": "4.2.*", "caouecs/laravel4-lang": "dev-master" },

    然后更新包:

    composer update caouecs/laravel4-lang

    更新

    这也很有效: https://github.com/jenssegers/laravel-date

    【讨论】:

      【解决方案2】:

      Homestead 提供了一个 Ubuntu 系统。因此,首先使用locale -a 检查您的系统上哪些语言环境可用。也许瑞典语言环境被命名为sv_SE.iso88591sv_SE.utf8。如果没有安装,你可以安装它:

      sudo locale-gen sv_SE sv_SE.utf8
      

      使用setlocale(); 安装您的第一个解决方案后应该可以工作。这将是生成日期的 PHP 方式

      在安装描述的语言环境后不要忘记重新启动服务器

      sudo nginx restart
      

      Laravel 方式

      对于 Laravel 方式,您需要自己生成本地人。首先在/app/lang/sv/days.php 中添加一个语言环境文件:

      <?php
      
      return array(
          'Monday' => 'måndag',
          'Tuesday' => 'tisdag',
          'Wednesday' => '..',
          'Thursday' => '..',
          'Friday' => '..',
          'Saturday' => 'lördag',
          'Sunday' => '..',
      );
      

      现在您可以将App::setLocale()Lang::get() 一起使用:

      App::setLocale('sv');
      echo Lang::get(sprintf('days.%s', date('l')));
      

      这要复杂得多,但如果您将 Laravel 托管在无法生成语言环境的共享托管环境中,这可能是一种可行的方法。

      【讨论】:

      • 我会试试这个,非常感谢您的时间。只是评论这不是对我的问题的 100% 回答,因为这并不能解决 strftime 的问题,这是 strftime 的某种偷偷摸摸的方式。因此,使用此解决方案,我需要在返回值之前将小时和分钟添加到字符串中,您能否将您的答案编辑为 strftime 的答案,我可能会在尝试此操作后将您的答案标记为已接受。
      • 这段代码 (laravel.io/bin/wG1O0) 可以产生正确的输出,但仍然不能使用 strftime,我认为如果我能让这个该死的语言环境工作,我个人认为 strftime 是一个更好的函数。您对它为什么不起作用有任何想法吗?
      • 我发现我错过了您告诉我添加的语言环境。但仍然不能使用 PHP 方式可以这么说
      • 使用sudo locale-gen sv_SElocale -a的输出告诉你什么?
      • 在我这样做之后添加了:sv_SE sv_SE.iso88591 sv_SE.utf8
      【解决方案3】:

      这似乎至少在 Windows 中对我有用。

      setlocale(LC_ALL, 'sv_SE', 'Swedish', 'swedish');
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-12-14
        • 2014-11-01
        • 2012-09-15
        • 2017-10-14
        • 2015-06-26
        • 1970-01-01
        • 2016-11-18
        相关资源
        最近更新 更多