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