Skip to content

Commit

Permalink
Support new Rails i18n style for loading/storing translation (YAML an…
Browse files Browse the repository at this point in the history
…d newly structured rb files).
  • Loading branch information
Clemens Kofler committed Aug 30, 2008
1 parent ebe96a6 commit b26d4ec
Show file tree
Hide file tree
Showing 9 changed files with 34 additions and 70 deletions.
5 changes: 3 additions & 2 deletions init.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,9 @@

# load all locales from config/locales
locales_dir = File.join(RAILS_ROOT, 'config', 'locales')
Dir["#{locales_dir}/*.rb"].uniq.each do |locale|
require locale
Dir["#{locales_dir}/*.{rb,yml}"].uniq.each do |locale_file|
puts "** [localized_dates] loading file #{locale_file}"
I18n.load_translations(locale_file)
end

puts '** [localized_dates] locales loaded from config/locales.'
Expand Down
2 changes: 1 addition & 1 deletion install.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
Dir.mkdir(locales_dir) unless File.directory?(locales_dir)

locales_template_dir = File.join(File.dirname(__FILE__), 'lib', 'templates', 'locales')
['en-US.rb', 'de-AT.rb'].each do |locale|
['en-US.rb', 'en-US.yml', 'de-AT.yml'].each do |locale|
FileUtils.cp(File.join(locales_template_dir, locale), File.join(locales_dir, locale))
end

Expand Down
2 changes: 1 addition & 1 deletion lib/core_ext/date.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ def to_formatted_s(format = :default)
formatter = formats[format]

unless formatter
formatters = I18n.translate(:'date.formats') || {}
formatters = I18n.translate(:'date.formats', :raise => true) rescue {}
formatter = formatters[format]
end

Expand Down
3 changes: 2 additions & 1 deletion lib/core_ext/datetime.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@ def to_formatted_s(format = :default)
formatter = formats[format]

unless formatter
default_formatters, datetime_formatters = I18n.translate([:'time.formats', :'time.datetime.formats']) || [{},{}]
default_formatters = I18n.translate(:'time.formats', :raise => true) rescue {}
datetime_formatters = I18n.translate(:'time.datetime.formats', :raise => true) rescue {}
formatters = default_formatters.merge(datetime_formatters)
formatter = formatters[format]
end
Expand Down
2 changes: 1 addition & 1 deletion lib/core_ext/time.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ def to_formatted_s(format = :default)
formatter = formats[format]

unless formatter
formatters = I18n.translate(:'time.formats') || {}
formatters = I18n.translate(:'time.formats', :raise => true) rescue {}
formatter = formatters[format]
end

Expand Down
3 changes: 2 additions & 1 deletion lib/core_ext/time_with_zone.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@ def to_s(format = :default)
formatter = formats[format]

unless formatter
default_formatters, twz_formatters = I18n.translate([:'time.formats', :'time.time_with_zone.formats']) || [{},{}]
default_formatters = I18n.translate(:'time.formats', :raise => true) rescue {}
twz_formatters = I18n.translate(:'time.time_with_zone.formats', :raise => true) rescue {}
formatters = default_formatters.merge(twz_formatters)
formatter = formatters[format]
end
Expand Down
24 changes: 0 additions & 24 deletions lib/templates/locales/de-AT.rb

This file was deleted.

41 changes: 12 additions & 29 deletions lib/templates/locales/en-US.rb
Original file line number Diff line number Diff line change
@@ -1,36 +1,19 @@
I18n.backend.store_translations :'en-US', {
:date => {
:formats => {
:default => "%Y-%m-%d",
:short => "%e %b",
:long => "%B %e, %Y",
:long_ordinal => lambda { |date| "%B #{date.day.ordinalize}, %Y" }
},
:day_names => Date::DAYNAMES,
:abbr_day_names => Date::ABBR_DAYNAMES,
:month_names => Date::MONTHNAMES,
:abbr_month_names => Date::ABBR_MONTHNAMES,
:order => [:year, :month, :day]
},
:time => {
:formats => {
:default => "%a %b %d %H:%M:%S %Z %Y",
:time => "%H:%M",
:short => "%d %b %H:%M",
:long => "%B %d, %Y %H:%M",
:long_ordinal => lambda { |time| "%B #{time.day.ordinalize}, %Y %H:%M" }
},
:datetime => {
{
:'en-US' => {
:date => {
:formats => {
:default => "%Y-%m-%dT%H:%M:%S%Z"
:long_ordinal => lambda { |date| "%B #{date.day.ordinalize}, %Y" }
}
},
:time_with_zone => {
:time => {
:formats => {
:default => lambda { |time| "%Y-%m-%d %H:%M:%S #{time.formatted_offset(false, 'UTC')}" }
:long_ordinal => lambda { |time| "%B #{time.day.ordinalize}, %Y %H:%M" }
},
:time_with_zone => {
:formats => {
:default => lambda { |time| "%Y-%m-%d %H:%M:%S #{time.formatted_offset(false, 'UTC')}" }
}
}
},
:am => 'am',
:pm => 'pm'
}
}
}
22 changes: 12 additions & 10 deletions spec/localized_dates_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,12 @@

describe "Date and Time localization" do
before(:each) do
# load locale files
locales_dir = File.dirname(__FILE__) + "/../lib/templates/locales"
I18n.load_translations("#{locales_dir}/en-US.rb")
I18n.load_translations("#{locales_dir}/en-US.yml")

# set up defaults
@date_defaults = { :default => "%Y-%m-%d",
:short => "%e %b",
:long => "%B %e, %Y",
Expand All @@ -15,38 +21,34 @@
@time_with_zone_defaults = {
:default => lambda { |time| "%Y-%m-%d %H:%M:%S #{time.formatted_offset(false, 'UTC')}" }
}

I18n.backend.store_translations 'en-US', :date => { :formats => @date_defaults },
:time => { :formats => @time_defaults, :datetime => { :formats => @datetime_defaults },
:time_with_zone => { :formats => @time_with_zone_defaults } }
end

describe Date do
it "should translate format when to_s is called" do
I18n.should_receive(:translate).with(:'date.formats').and_return(@date_defaults)
I18n.should_receive(:translate).with(:'date.formats', :raise => true).and_return(@date_defaults)
Date.today.to_s(:short)
end
end

describe Time do
it "should translate format when to_s is called" do
I18n.should_receive(:translate).with(:'time.formats').and_return(@time_defaults)
I18n.should_receive(:translate).with(:'time.formats', :raise => true).and_return(@time_defaults)
Time.now.to_s(:short)
end
end

describe DateTime do
it "should translate format when to_s is called" do
I18n.should_receive(:translate).with([:'time.formats', :'time.datetime.formats']).
and_return([@time_defaults, @datetime_defaults])
I18n.should_receive(:translate).with(:'time.formats', :raise => true).and_return(@time_defaults)
I18n.should_receive(:translate).with(:'time.datetime.formats', :raise => true).and_return(@datetime_defaults)
DateTime.now.to_s(:short)
end
end

describe ActiveSupport::TimeWithZone do
it "should translate format when to_s is called" do
I18n.should_receive(:translate).with([:'time.formats', :'time.time_with_zone.formats']).
and_return([@time_defaults, @time_with_zone_defaults])
I18n.should_receive(:translate).with(:'time.formats', :raise => true).and_return(@time_defaults)
I18n.should_receive(:translate).with(:'time.time_with_zone.formats', :raise => true).and_return(@time_with_zone_defaults)

t, z = Time.utc(2000, 1, 1, 0), ActiveSupport::TimeZone['UTC']
ActiveSupport::TimeWithZone.new(t, z).to_s(:short)
Expand Down

0 comments on commit b26d4ec

Please sign in to comment.