2011-03-23 17 views
3

我遇到了一個我似乎無法解決的問題。我想用我在我的en.yml文件中定義的自定義格式格式化日期:當在軌道中使用帶有%p的I18n.l時,AM/PM不會大寫

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支持這兩個選項。

回答

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" 

換句話說,存在%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"