Skip to content

Commit

Permalink
A package of AWESOME: Lambda localize, batteries included
Browse files Browse the repository at this point in the history
  • Loading branch information
yaroslav authored and Sven Fuchs committed May 2, 2009
1 parent ff75776 commit e277711
Show file tree
Hide file tree
Showing 2 changed files with 58 additions and 5 deletions.
12 changes: 7 additions & 5 deletions lib/i18n/backend/simple.rb
Original file line number Diff line number Diff line change
Expand Up @@ -52,11 +52,13 @@ def localize(locale, object, format = :default, options={})

# TODO only translate these if the format string is actually present
# TODO check which format strings are present, then bulk translate them, then replace them
format.gsub!(/%a/, translate(locale, :"date.abbr_day_names")[object.wday])
format.gsub!(/%A/, translate(locale, :"date.day_names")[object.wday])
format.gsub!(/%b/, translate(locale, :"date.abbr_month_names")[object.mon])
format.gsub!(/%B/, translate(locale, :"date.month_names")[object.mon])
format.gsub!(/%p/, translate(locale, :"time.#{object.hour < 12 ? :am : :pm}")) if object.respond_to?(:hour)

format.gsub!(/%a/, translate(locale, :"date.abbr_day_names", :format => format)[object.wday])
format.gsub!(/%A/, translate(locale, :"date.day_names", :format => format)[object.wday])
format.gsub!(/%b/, translate(locale, :"date.abbr_month_names", :format => format)[object.mon])
format.gsub!(/%B/, translate(locale, :"date.month_names", :format => format)[object.mon])
format.gsub!(/%p/, translate(locale, :"time.#{object.hour < 12 ? :am : :pm}", :format => format)) if object.respond_to?(:hour)

object.strftime(format)
end

Expand Down
51 changes: 51 additions & 0 deletions test/backend/simple/localize_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -188,3 +188,54 @@ def test_localize_given_an_unknown_format_it_does_not_fail
assert_nothing_raised{ @backend.localize 'de', @morning, '%x' }
end
end

class I18nSimpleBackendLocalizeLambdaTest < Test::Unit::TestCase
$KCODE = 'u'

include I18nSimpleBackendTestSetup

def setup
@backend = I18n::Backend::Simple.new
@time = Time.parse '2008-03-01 6:00 UTC'

@backend.store_translations 'ru', {
:date => {
:'day_names' => lambda { |key, options|
(options[:format] =~ /^%A/) ?
%w(Воскресенье Понедельник Вторник Среда Четверг Пятница Суббота) :
%w(воскресенье понедельник вторник среда четверг пятница суббота)
},
:'abbr_day_names' => %w(Вс Пн Вт Ср Чт Пт Сб),
:'month_names' => lambda { |key, options|
(options[:format] =~ /(%d|%e)(\s*)?(%B)/) ?
%w(января февраля марта апреля мая июня июля августа сентября октября ноября декабря).unshift(nil) :
%w(Январь Февраль Март Апрель Май Июнь Июль Август Сентябрь Октябрь Ноябрь Декабрь).unshift(nil)
},
:'abbr_month_names' => lambda { |key, options|
(options[:format] =~ /(%d|%e)(\s*)(%b)/) ?
%w(янв. февр. марта апр. мая июня июля авг. сент. окт. нояб. дек.).unshift(nil) :
%w(янв. февр. март апр. май июнь июль авг. сент. окт. нояб. дек.).unshift(nil)
},
},
:time => {
:am => "утра",
:pm => "вечера"
}
}
end

def test_localize_uses_lambda_day_names
assert_match /Суббота/, @backend.localize('ru', @time, "%A, %d %B")
assert_match /суббота/, @backend.localize('ru', @time, "%d %B (%A)")
end

def test_localize_uses_lambda_month_names
assert_match /марта/, @backend.localize('ru', @time, "%d %B %Y")
assert_match /Март/, @backend.localize('ru', @time, "%B %Y")
end

def test_localize_uses_lambda_abbr_day_names
assert_match /марта/, @backend.localize('ru', @time, "%d %b %Y")
assert_match /март/, @backend.localize('ru', @time, "%b %Y")
end
end

0 comments on commit e277711

Please sign in to comment.