在Rails中使用带有%p的I18n.l时,AM / PM不是大写

时间:2011-03-23 02:22:51

标签: ruby-on-rails datetime internationalization strftime

我遇到了一个我似乎无法弄清楚的问题。我正在尝试使用我在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"

我做错了吗?这是一个错误吗?任何指导都非常感激,因为我的额头因撞到墙上而感到酸痛。

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

我过度使用本地en.yml文件中的本地化来使用大写。我真的很想看到Rails支持两种选择。

1 个答案:

答案 0 :(得分:3)

从源头寻求积极支持,我在英语本地化下找到了以下内容:

  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"

换句话说,在strftime中,%P和%p内置于本地化没有区别。遗憾的是,在单独的自定义格式中,不可能在大写和小写表示之间进行选择,但是可以通过在您自己的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"