3

我有一个我似乎无法弄清楚的问题。我正在尝试使用我在 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 支持这两种选择。

4

1 回答 1

4

在寻找积极支持的源代码时,我在英文本地化下找到了以下内容:

  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"
于 2011-03-29T17:45:10.867 回答