Permalink
Browse files

A package of AWESOME: Lambda localize, batteries included

  • Loading branch information...
1 parent ff75776 commit e277711b3c844fe7589b8d3f9af0f7d1b969a273 @yaroslav yaroslav committed with Sven Fuchs May 2, 2009
Showing with 58 additions and 5 deletions.
  1. +7 −5 lib/i18n/backend/simple.rb
  2. +51 −0 test/backend/simple/localize_test.rb
@@ -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
@@ -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.