i18n date formatting rails 2.2.2

Hello everyone,

I'm trying to get Rails (v2.2.2) to print dates in Dutch but it won't pick up the formats I specify. :frowning:

I tried the following:

1) created a 'nl.yml' file under 'config/locales' 2) copied over the English defaults for dates from activesupport/.../ en.yml 3) added Dutch activerecord error messages and number and currency formats (euro sign) 4) changed the default locale in 'environment.rb'

The AR error messages are shown in Dutch just fine so Rails is loading the translation file and setting the locale correctly but when I do Date.today.to_s I always get the English versions, no matter what format I pass to the to_s() method. Also numbers and currencies are working fine. I just can't get dates to behave!

Been hunting down documentation and blog posts on the subject for hours now and I'm going crazy. Any ideas?

Ronald

They didn't worke for me either, so I rewrote the to_s method for dates and times:

Date.class_eval do

  def to_s( format_name = :default )     format = case format_name     when String       self.strftime( format )     when Symbol       I18n.localize( self, :format => format_name)     end   end

end

Time.class_eval do

  def to_s( format_name = :default )     format = case format_name     when String       self.strftime( format )     when Symbol       I18n.localize( self, :format => format_name)     end   end

end

I did also search for reasons why it doesn't work (from the I18N docs it seemed that it should work), but this method at the Date object shows that it has no idea about I18N:

        def to_formatted_s(format = :default)           if formatter = DATE_FORMATS[format]             if formatter.respond_to?(:call)               formatter.call(self).to_s             else               strftime(formatter)             end           else             to_default_s           end         end

They didn't worke for me either, so I rewrote the to_s method for dates and times:

Date.class_eval do

def to_s( format_name = :default ) format = case format_name when String self.strftime( format ) when Symbol I18n.localize( self, :format => format_name) end end

end

Time.class_eval do

def to_s( format_name = :default ) format = case format_name when String self.strftime( format ) when Symbol I18n.localize( self, :format => format_name) end end

end

Great! Thanks, this works for me. (Small bug: parameter to strftime should be format_name, not format).

I did also search for reasons why it doesn't work (from the I18N docs it seemed that it should work), but this method at the Date object shows that it has no idea about I18N:

    def to\_formatted\_s\(format = :default\)
      if formatter = DATE\_FORMATS\[format\]
        if formatter\.respond\_to?\(:call\)
          formatter\.call\(self\)\.to\_s
        else
          strftime\(formatter\)
        end
      else
        to\_default\_s
      end
    end

Yeah I dug up this piece of source code as well. Guess I was too tired to compare this with for instance number_to_currency's source and come to this conclusion myself :wink: Anyway, thanks again!

Ronald