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

何らかの理由で、%p の場合のように大文字ではなく、AM/PM が小文字で表示されます。

コンソールで少し遊んでみましたが、ローカリゼーション関数と 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"

私は何か間違ったことをしていますか?これはバグですか?壁にぶつけて額が痛いので、どんな指導も大歓迎です。

編集:これは解決されました(っぽい)。デフォルトのアクティブ サポート ローカリゼーションを見ると、%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"

つまり、strftime のように、ローカライズに組み込まれている %P と %p の間に区別はありません。残念ながら、個々のカスタム形式では大文字と小文字のどちらかを選択することはできませんが、独自の en.yml ファイルでデフォルトの形式をオーバーライドすることで、どちらをグローバルに使用するかを定義することは可能です。たとえば、大文字の AM/PM が出力されるようになった、更新された en.yml ファイルを次に示します。

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 に答える