【问题标题】:Rails not picking up custom date & time formats in en.ymlRails 没有在 en.yml 中选择自定义日期和时间格式
【发布时间】:2012-08-22 23:15:56
【问题描述】:

我对 Rails 中的 I18N 不太熟悉,所以请耐心等待。尝试设置自定义日期和时间格式:

#config/locales/en.yml
en:
  date:
    formats:
      long_dateweek: "%A, %B %d, %Y"
  time:
    formats:
      very_short: "%H:%M"

但是当我尝试使用它们时,我只会得到默认格式:

1.9.3p194 :001 > Time.now.to_date.to_s(:long_dateweek)
 => "2012-08-22" 
1.9.3p194 :002 > Time.now.to_time.to_s(:very_short)
 => "2012-08-22 16:12:47 -0700" 

尝试重新启动控制台(甚至服务器)无济于事... 我错过了什么?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 internationalization formatting date-format


    【解决方案1】:

    你需要使用I18n.l方法如下:

    1.9.3p194 :001 > I18n.l Time.now.to_date, :format => :long_dateweek
     => "Wednesday, August 22, 2012" 
    1.9.3p194 :002 > I18n.l Time.now, :format => :very_short
     => "23:03"
    

    您还可以在视图中使用l 辅助方法。查看此rails guide 了解更多信息。

    【讨论】:

    • 太棒了,谢谢!比我预期的要“麻烦”一点……但足够简单……
    • 在进一步检查您提供的方法I18n.l 后,似乎以UTC 格式返回时间,而不是为应用程序配置的本地PDT。知道如何在本地区域获得响应吗?试过I18n.l Time.now.to_time(:local), :format => :very_short,除其他外,无济于事......
    • 在我看来,使用Time.now 使用的是运行应用程序的服务器的本地时区。如果要使用配置文件中设置的时区,则需要使用Time.zone.now
    【解决方案2】:

    @alexsanford1 有正确的答案。我在下面修改了我的以在视图中工作。

    <%= l Time.now, :format => :very_short %>
    

    【讨论】:

    • 这让我ArgumentError: wrong number of arguments(1 for 0)Time.now.to_time.to_s(:format =&gt; :very_short) 让我得到与以前相同的默认格式:"2012-08-22 18:49:22 -0700"
    猜你喜欢
    • 2011-07-19
    • 2016-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-30
    相关资源
    最近更新 更多