我遇到了一个似乎无法解决的问题。我正在尝试使用在en.yml文件中定义的自定义格式来格式化日期:

en:
  hello: "Hello world"
  time:
      formats:
          history_table: "%m/%d/%Y %I:%M:%S %p %Z"


这是使用'l'助手来调用的:

l version.created_at, :format => :history_table


由于某种原因,这会以小写形式显示AM / PM,而不是像%p那样以大写形式显示。

我已经在控制台中玩了一下,似乎本地化功能和strftime在行为上有所不同:

ruby-1.9.2-p180 :043 > I18n.l user.updated_at, :format => "%m/%d/%Y %I:%M:%S %p %Z"
 => "03/23/2011 01:52:16 am UTC"
ruby-1.9.2-p180 :044 > user.updated_at.strftime("%m/%d/%Y %I:%M:%S %p %Z")
 => "03/23/2011 01:52:16 AM UTC"


难道我做错了什么?这是一个错误吗?由于我的额头因撞在墙上而感到疼痛,因此非常感谢任何指导。

编辑:
这已经解决了。
查看默认的activesupport本地化,%p和%P之间没有任何区别。
https://github.com/rails/rails/blob/master/activesupport/lib/active_support/locale/en.yml

我在本地en.yml文件中取代了本地化以使用大写字母。我真的很想看到Rails支持这两种选择。

最佳答案

在寻求积极支持的资源中,我发现以下英语本地化版本:

  time:
    formats:
      default: "%a, %d %b %Y %H:%M:%S %z"
      short: "%d %b %H:%M"
      long: "%B %d, %Y %H:%M"
    am: "am"
    pm: "pm"


换句话说,内置于本地化的%P和%p在strftime中没有区别。不幸的是,这意味着在单独的自定义格式中,无法在大写和小写表示之间进行选择,但是可以通过覆盖自己的en.yml文件中的默认格式来全局定义想要的格式。例如,这是我更新的en.yml文件,该文件现在导致输出大写AM / PM。

en:
  hello: "Hello world"
  time:
      formats:
          history_table: "%m/%d/%Y %I:%M:%S %p %Z"
      am: "AM"
      pm: "PM"

09-25 20:26