ruby-on-rails i18n教學 - 如何讓Rails 3本地化我的日期格式?




3 Answers

顯示日期時,您可以使用I18n.l

所以你會這樣做:

I18n.l @entry.created_at

如果你想改變它的格式:

I18n.l @entry.created_at, :format => :short

國際化鐵路指南正在記錄這一點。

i18n中文 i18n使用

我正在開發一個Rails 3項目,在該項目中,表單中有日期輸入的位置。 帶有日期的文本字段使用日期選擇器,因此不會擔心以錯誤的格式輸入日期,但是日期以:db格式顯示(例如2010-01-21)。

(注意:這特別是在表單字段中 - 例如<%= f.text_field :publish_date %> ,它應該自動使用:默認格式,並且不需要提供值)

我嘗試添加具有以下日期配置的自定義區域設置:

date:
    formats:
      # Use the strftime parameters for formats.
      # When no format has been given, it uses default.
      # You can provide other formats here if you like!
      default: "%d/%m/%Y"
      short: "%b %d"
      long: "%B %d, %Y"

然後將我的語言環境設置為此( config.i18n.default_locale = "en-AU" ),但這似乎沒有採取,它變得非常令人沮喪。

該應用程序最終將支持許多語言環境,因此在應用程序啟動時設置初始化程序以覆蓋日期格式並不合適,我知道這應該可行 - 我猜我在這裡錯過了一些東西。

語言環境文件是: config/locales/en-AU.yml ,在我的application.rb中我包括:

config.i18n.load_path += Dir[Rails.root.join("config", "locales", "*.yml").to_s]
config.i18n.default_locale = "en-AU"

在我的application.rb文件中。




我發現最好的解決方案是:

  • 我像你一樣在我的語言環境文件中本地化日期格式
  • 在我的表單中,我通過直接設置值來本地化日期

<%= f.text_field :publish_date, :value => (@model.publish_date.nil? ? nil : l(@model.publish_date)) %>

這不是完美的遺憾,但至少這樣我可以將我的表單用於新記錄和現有記錄。 與使用初始化程序更改默認格式相比,該應用程序將與多個區域設置保持兼容。 如果您完全想要遵守DRY,您可以隨時編寫自定義幫助程序。




您可以為:publish_date屬性覆蓋getter。

即在你的模型中:

def date( *format)
    self[:publish_date].strftime(format.first || default)
end

在你看來你也可以做到

@income.date("%d/%m/%Y")

要么

@income.date

這將導致strftime使用傳遞的格式字符串,除非它是nil,在這種情況下它將回退到您的默認字符串。

注意:我使用splat運算符來添加對沒有參數的日期的支持。 可能有一種更清潔的方法來做到這一點。




Related

ruby-on-rails localization internationalization ruby-on-rails-3