From ae8a35d8f6d5db6ae9a1877918d45c15d21e24fe Mon Sep 17 00:00:00 2001 From: Iain Hecker Date: Sat, 16 Aug 2008 20:01:42 +0200 Subject: [PATCH 1/9] Added Base.human_name method --- activerecord/lib/active_record/base.rb | 13 ++++++++ activerecord/test/cases/i18n_test.rb | 46 ++++++++++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 activerecord/test/cases/i18n_test.rb diff --git a/activerecord/lib/active_record/base.rb b/activerecord/lib/active_record/base.rb index 02a0ca7e44..edab017d26 100644 --- a/activerecord/lib/active_record/base.rb +++ b/activerecord/lib/active_record/base.rb @@ -1249,6 +1249,19 @@ module ActiveRecord #:nodoc: options[:count] ||= 1 I18n.translate(defaults.shift, options.merge(:default => defaults, :scope => [:activerecord, :attributes])) end + + # Transform the modelname into a more humane format, using I18n. + # Defaults to the basic humanize method. + # Default scope of the translation is activerecord.models + # Specify +options+ with additional translating options. + def human_name(options = {}) + defaults = self_and_descendents_from_active_record.map do |klass| + :"#{klass.name.underscore}" + end + defaults << self.name.humanize + I18n.translate(defaults.shift, {:scope => [:activerecord, :models], :count => 1, :default => defaults}.merge(options)) + end + # True if this isn't a concrete subclass needing a STI type condition. def descends_from_active_record? if superclass.abstract_class? diff --git a/activerecord/test/cases/i18n_test.rb b/activerecord/test/cases/i18n_test.rb new file mode 100644 index 0000000000..3527644f0d --- /dev/null +++ b/activerecord/test/cases/i18n_test.rb @@ -0,0 +1,46 @@ +require "cases/helper" +require 'models/topic' +require 'models/reply' + +class ActiveRecordI18nTests < Test::Unit::TestCase + + def setup + reset_translations + end + + def test_translated_model_attributes + I18n.store_translations 'en-US', :activerecord => {:attributes => {:topic => {:title => 'topic title attribute'} } } + assert_equal 'topic title attribute', Topic.human_attribute_name('title') + end + + def test_translated_model_attributes_with_sti + I18n.store_translations 'en-US', :activerecord => {:attributes => {:reply => {:title => 'reply title attribute'} } } + assert_equal 'reply title attribute', Reply.human_attribute_name('title') + end + + def test_translated_model_attributes_with_sti_fallback + I18n.store_translations 'en-US', :activerecord => {:attributes => {:topic => {:title => 'topic title attribute'} } } + assert_equal 'topic title attribute', Reply.human_attribute_name('title') + end + + def test_translated_model_names + I18n.store_translations 'en-US', :activerecord => {:models => {:topic => 'topic model'} } + assert_equal 'topic model', Topic.human_name + end + + def test_translated_model_names_with_sti + I18n.store_translations 'en-US', :activerecord => {:models => {:reply => 'reply model'} } + assert_equal 'reply model', Reply.human_name + end + + def test_translated_model_names_with_sti_fallback + I18n.store_translations 'en-US', :activerecord => {:models => {:topic => 'topic model'} } + assert_equal 'topic model', Reply.human_name + end + + private + def reset_translations + I18n.backend.send(:class_variable_set, :@@translations, {}) + end +end + From c531248938302477c5e52138d59a6c3d1527d963 Mon Sep 17 00:00:00 2001 From: Iain Hecker Date: Sat, 16 Aug 2008 20:22:40 +0200 Subject: [PATCH 2/9] Introduced AR::Base.human_name to validations --- activerecord/lib/active_record/validations.rb | 2 +- activerecord/test/cases/validations_i18n_test.rb | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/activerecord/lib/active_record/validations.rb b/activerecord/lib/active_record/validations.rb index 92b3e9a597..040681a09c 100644 --- a/activerecord/lib/active_record/validations.rb +++ b/activerecord/lib/active_record/validations.rb @@ -100,7 +100,7 @@ module ActiveRecord options.merge!({ :default => defaults, - :model => I18n.translate(model_name.underscore, :default => model_name.humanize, :scope => [:activerecord, :models], :count => 1), + :model => @base.class.human_name, :attribute => @base.class.human_attribute_name(attribute.to_s), :scope => [:activerecord, :errors, :messages] }) diff --git a/activerecord/test/cases/validations_i18n_test.rb b/activerecord/test/cases/validations_i18n_test.rb index e110595437..96f86fbe0e 100644 --- a/activerecord/test/cases/validations_i18n_test.rb +++ b/activerecord/test/cases/validations_i18n_test.rb @@ -46,7 +46,7 @@ class ActiveRecordValidationsI18nTests < Test::Unit::TestCase global_scope = [:activerecord, :errors, :messages] custom_scope = global_scope + [:custom, 'topic', :title] - I18n.expects(:translate).with('topic', {:count => 1, :default => 'Topic', :scope => [:activerecord, :models]}).returns('Topic') + I18n.expects(:translate).with(:topic, {:count => 1, :default => ['Topic'], :scope => [:activerecord, :models]}).returns('Topic') I18n.expects(:translate).with(:'topic.title', {:count => 1, :default => ['Title'], :scope => [:activerecord, :attributes]}).returns('Title') I18n.expects(:translate).with(:"custom.topic.title.invalid", :scope => global_scope, :default => [:"custom.topic.invalid", 'default from class def error 1', :invalid], :attribute => "Title", :model => "Topic").returns('default from class def error 1') @topic.errors.generate_message :title, :invalid, :default => 'default from class def error 1' @@ -54,7 +54,7 @@ class ActiveRecordValidationsI18nTests < Test::Unit::TestCase def test_errors_generate_message_translates_custom_model_attribute_keys_with_sti custom_scope = [:activerecord, :errors, :custom, 'topic', :title] - I18n.expects(:translate).with('reply', {:count => 1, :default => 'Reply', :scope => [:activerecord, :models]}).returns('Reply') + I18n.expects(:translate).with(:reply, {:count => 1, :default => [:topic, 'Reply'], :scope => [:activerecord, :models]}).returns('Reply') I18n.expects(:translate).with(:'reply.title', {:count => 1, :default => [:'topic.title', 'Title'], :scope => [:activerecord, :attributes]}).returns('Title') I18n.expects(:translate).with(:"custom.reply.title.invalid", :scope => [:activerecord, :errors, :messages], :default => [:"custom.reply.invalid", :"custom.topic.title.invalid", :"custom.topic.invalid", 'default from class def', :invalid], :model => 'Reply', :attribute => 'Title').returns("default from class def") Reply.new.errors.generate_message :title, :invalid, :default => 'default from class def' From e2b191681e1c8c8b4344f1fc755e48fccdd1d603 Mon Sep 17 00:00:00 2001 From: Iain Hecker Date: Sat, 16 Aug 2008 21:45:23 +0200 Subject: [PATCH 3/9] Added :value as interpolation variable available to error messages --- activerecord/lib/active_record/validations.rb | 16 +++++++++------- activerecord/test/cases/validations_i18n_test.rb | 4 ++-- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/activerecord/lib/active_record/validations.rb b/activerecord/lib/active_record/validations.rb index 040681a09c..a442d008a9 100644 --- a/activerecord/lib/active_record/validations.rb +++ b/activerecord/lib/active_record/validations.rb @@ -92,17 +92,19 @@ module ActiveRecord :"custom.#{klass.name.underscore}.#{message}" ] end - defaults << options[:default] if options[:default] - defaults.flatten! << message + defaults << options.delete(:default) + defaults = defaults.compact.flatten << message model_name = @base.class.name key = defaults.shift + value = @base.send(attribute) if @base.respond_to?(attribute) - options.merge!({ - :default => defaults, - :model => @base.class.human_name, - :attribute => @base.class.human_attribute_name(attribute.to_s), - :scope => [:activerecord, :errors, :messages] }) + options = { :default => defaults, + :model => @base.class.human_name, + :attribute => @base.class.human_attribute_name(attribute.to_s), + :value => value, + :scope => [:activerecord, :errors, :messages] + }.merge(options) I18n.translate(key, options) end diff --git a/activerecord/test/cases/validations_i18n_test.rb b/activerecord/test/cases/validations_i18n_test.rb index 96f86fbe0e..469e9d6c03 100644 --- a/activerecord/test/cases/validations_i18n_test.rb +++ b/activerecord/test/cases/validations_i18n_test.rb @@ -48,7 +48,7 @@ class ActiveRecordValidationsI18nTests < Test::Unit::TestCase I18n.expects(:translate).with(:topic, {:count => 1, :default => ['Topic'], :scope => [:activerecord, :models]}).returns('Topic') I18n.expects(:translate).with(:'topic.title', {:count => 1, :default => ['Title'], :scope => [:activerecord, :attributes]}).returns('Title') - I18n.expects(:translate).with(:"custom.topic.title.invalid", :scope => global_scope, :default => [:"custom.topic.invalid", 'default from class def error 1', :invalid], :attribute => "Title", :model => "Topic").returns('default from class def error 1') + I18n.expects(:translate).with(:"custom.topic.title.invalid", :value => nil, :scope => global_scope, :default => [:"custom.topic.invalid", 'default from class def error 1', :invalid], :attribute => "Title", :model => "Topic").returns('default from class def error 1') @topic.errors.generate_message :title, :invalid, :default => 'default from class def error 1' end @@ -56,7 +56,7 @@ class ActiveRecordValidationsI18nTests < Test::Unit::TestCase custom_scope = [:activerecord, :errors, :custom, 'topic', :title] I18n.expects(:translate).with(:reply, {:count => 1, :default => [:topic, 'Reply'], :scope => [:activerecord, :models]}).returns('Reply') I18n.expects(:translate).with(:'reply.title', {:count => 1, :default => [:'topic.title', 'Title'], :scope => [:activerecord, :attributes]}).returns('Title') - I18n.expects(:translate).with(:"custom.reply.title.invalid", :scope => [:activerecord, :errors, :messages], :default => [:"custom.reply.invalid", :"custom.topic.title.invalid", :"custom.topic.invalid", 'default from class def', :invalid], :model => 'Reply', :attribute => 'Title').returns("default from class def") + I18n.expects(:translate).with(:"custom.reply.title.invalid", :value => nil, :scope => [:activerecord, :errors, :messages], :default => [:"custom.reply.invalid", :"custom.topic.title.invalid", :"custom.topic.invalid", 'default from class def', :invalid], :model => 'Reply', :attribute => 'Title').returns("default from class def") Reply.new.errors.generate_message :title, :invalid, :default => 'default from class def' end From a6a62004c93d792c230d80f8a65da0bb45cb369f Mon Sep 17 00:00:00 2001 From: Sven Fuchs Date: Wed, 20 Aug 2008 17:51:42 +0200 Subject: [PATCH 4/9] add human_name and value to ar validation #generate_message --- activerecord/test/cases/i18n_test.rb | 6 +++--- activesupport/lib/active_support/vendor/i18n-0.0.1/i18n.rb | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/activerecord/test/cases/i18n_test.rb b/activerecord/test/cases/i18n_test.rb index 3527644f0d..06036733f5 100644 --- a/activerecord/test/cases/i18n_test.rb +++ b/activerecord/test/cases/i18n_test.rb @@ -39,8 +39,8 @@ class ActiveRecordI18nTests < Test::Unit::TestCase end private - def reset_translations - I18n.backend.send(:class_variable_set, :@@translations, {}) - end + def reset_translations + I18n.backend = I18n::Backend::Simple.new + end end diff --git a/activesupport/lib/active_support/vendor/i18n-0.0.1/i18n.rb b/activesupport/lib/active_support/vendor/i18n-0.0.1/i18n.rb index 145840aa36..0e2a2d7051 100755 --- a/activesupport/lib/active_support/vendor/i18n-0.0.1/i18n.rb +++ b/activesupport/lib/active_support/vendor/i18n-0.0.1/i18n.rb @@ -63,7 +63,7 @@ module I18n # files which are either named *.rb and contain plain Ruby Hashes or are # named *.yml and contain YAML data.) def load_translations(*args) - backend.load_translations *args + backend.load_translations(*args) end # Stores translations for the given locale in the backend. From febe2ea9775c863cb9744c6343291e550e4628b8 Mon Sep 17 00:00:00 2001 From: Iain Hecker Date: Tue, 19 Aug 2008 23:19:57 +0200 Subject: [PATCH 5/9] Locale file changed to yaml --- activerecord/lib/active_record.rb | 2 +- .../lib/active_record/locale/en-US.yml | 33 +++++++++++++++++++ .../test/cases/validations_i18n_test.rb | 2 +- 3 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 activerecord/lib/active_record/locale/en-US.yml diff --git a/activerecord/lib/active_record.rb b/activerecord/lib/active_record.rb index 08b6b19f7f..bc27d17ccd 100644 --- a/activerecord/lib/active_record.rb +++ b/activerecord/lib/active_record.rb @@ -82,6 +82,6 @@ require 'active_record/connection_adapters/abstract_adapter' require 'active_record/schema_dumper' I18n.backend.populate do - I18n.load_translations File.dirname(__FILE__) + '/active_record/locale/en-US.rb' + I18n.load_translations File.dirname(__FILE__) + '/active_record/locale/en-US.yml' end diff --git a/activerecord/lib/active_record/locale/en-US.yml b/activerecord/lib/active_record/locale/en-US.yml new file mode 100644 index 0000000000..8148f31a81 --- /dev/null +++ b/activerecord/lib/active_record/locale/en-US.yml @@ -0,0 +1,33 @@ +en-US: + activerecord: + errors: + # The values :model, :attribute and :value are always available for interpolation + # The value :count is available when applicable. Can be used for pluralization. + messages: + inclusion: "is not included in the list" + exclusion: "is reserved" + invalid: "is invalid" + confirmation: "doesn't match confirmation" + accepted: "must be accepted" + empty: "can't be empty" + blank: "can't be blank" + too_long: "is too long (maximum is {{count}} characters)" + too_short: "is too short (minimum is {{count}} characters)" + wrong_length: "is the wrong length (should be {{count}} characters)" + taken: "has already been taken" + not_a_number: "is not a number" + greater_than: "must be greater than {{count}}" + greater_than_or_equal_to: "must be greater than or equal to {{count}}" + equal_to: "must be equal to {{count}}" + less_than: "must be less than {{count}}" + less_than_or_equal_to: "must be less than or equal to {{count}}" + odd: "must be odd" + even: "must be even" + # Append your own errors here or at the model/attributes scope. + + models: + # Overrides default messages + + attributes: + # Overrides model and default messages. + diff --git a/activerecord/test/cases/validations_i18n_test.rb b/activerecord/test/cases/validations_i18n_test.rb index 469e9d6c03..96af3b17a6 100644 --- a/activerecord/test/cases/validations_i18n_test.rb +++ b/activerecord/test/cases/validations_i18n_test.rb @@ -11,7 +11,7 @@ class ActiveRecordValidationsI18nTests < Test::Unit::TestCase def teardown reset_callbacks Topic - I18n.load_translations File.dirname(__FILE__) + '/../../lib/active_record/locale/en-US.rb' + I18n.load_translations File.dirname(__FILE__) + '/../../lib/active_record/locale/en-US.yml' end def unique_topic From c1e0d8aa48c2f9139af42b3cf79e42bb5e0f1f03 Mon Sep 17 00:00:00 2001 From: Iain Hecker Date: Tue, 19 Aug 2008 23:21:32 +0200 Subject: [PATCH 6/9] Locale file changed to yaml --- activesupport/lib/active_support.rb | 2 +- .../lib/active_support/locale/en-US.rb | 29 ----------------- .../lib/active_support/locale/en-US.yml | 31 +++++++++++++++++++ 3 files changed, 32 insertions(+), 30 deletions(-) delete mode 100644 activesupport/lib/active_support/locale/en-US.rb create mode 100644 activesupport/lib/active_support/locale/en-US.yml diff --git a/activesupport/lib/active_support.rb b/activesupport/lib/active_support.rb index 6056067efd..46ca9f93df 100644 --- a/activesupport/lib/active_support.rb +++ b/activesupport/lib/active_support.rb @@ -59,7 +59,7 @@ require 'active_support/base64' require 'active_support/time_with_zone' I18n.populate do - I18n.load_translations File.dirname(__FILE__) + '/active_support/locale/en-US.rb' + I18n.load_translations File.dirname(__FILE__) + '/active_support/locale/en-US.yml' end Inflector = ActiveSupport::Deprecation::DeprecatedConstantProxy.new('Inflector', 'ActiveSupport::Inflector') diff --git a/activesupport/lib/active_support/locale/en-US.rb b/activesupport/lib/active_support/locale/en-US.rb deleted file mode 100644 index ed457d6f4f..0000000000 --- a/activesupport/lib/active_support/locale/en-US.rb +++ /dev/null @@ -1,29 +0,0 @@ -{ :'en-US' => { - :support => { - :array => { - :sentence_connector => 'and' - } - }, - :date => { - :formats => { - :default => "%Y-%m-%d", - :short => "%b %d", - :long => "%B %d, %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, %d %b %Y %H:%M:%S %z", - :short => "%d %b %H:%M", - :long => "%B %d, %Y %H:%M", - }, - :am => 'am', - :pm => 'pm' - } - } -} \ No newline at end of file diff --git a/activesupport/lib/active_support/locale/en-US.yml b/activesupport/lib/active_support/locale/en-US.yml new file mode 100644 index 0000000000..60ecb1d42a --- /dev/null +++ b/activesupport/lib/active_support/locale/en-US.yml @@ -0,0 +1,31 @@ +en-US: + date: + formats: + # Use the strftime parameters for formats. + # When no format has been given, it uses default. + # You can provide other formats here if you like! + default: "%Y-%m-%d" + short: "%b %d" + long: "%B %d, %Y" + + day_names: [Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday] + abbr_day_names: [Sun, Mon, Tue, Wed, Thu, Fri, Sat] + + # Don't forget the nil at the beginning; there's no such thing as a 0th month + month_names: [~, January, February, March, April, May, June, July, August, September, October, November, December] + abbr_month_names: [~, Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec] + # Used in date_select and datime_select. + order: [ :year, :month, :day ] + + time: + formats: + default: "%a, %d %b %Y %H:%M:%S %z" + short: "%d %b %H:%M" + long: "%B %d, %Y %H:%M" + am: "am" + pm: "pm" + +# Used in array.to_sentence. + support: + array: + sentence_connector: "and" From 72366398b28cec2f8b9809f463e0b1271e3d5ba0 Mon Sep 17 00:00:00 2001 From: Iain Hecker Date: Tue, 19 Aug 2008 23:22:59 +0200 Subject: [PATCH 7/9] Removed en-US ruby locale in favor of yaml --- .../lib/active_record/locale/en-US.rb | 28 ------------------- 1 file changed, 28 deletions(-) delete mode 100644 activerecord/lib/active_record/locale/en-US.rb diff --git a/activerecord/lib/active_record/locale/en-US.rb b/activerecord/lib/active_record/locale/en-US.rb deleted file mode 100644 index 89a5baba06..0000000000 --- a/activerecord/lib/active_record/locale/en-US.rb +++ /dev/null @@ -1,28 +0,0 @@ -{ :'en-US' => { - :activerecord => { - :errors => { - :messages => { - :inclusion => "is not included in the list", - :exclusion => "is reserved", - :invalid => "is invalid", - :confirmation => "doesn't match confirmation", - :accepted => "must be accepted", - :empty => "can't be empty", - :blank => "can't be blank", - :too_long => "is too long (maximum is {{count}} characters)", - :too_short => "is too short (minimum is {{count}} characters)", - :wrong_length => "is the wrong length (should be {{count}} characters)", - :taken => "has already been taken", - :not_a_number => "is not a number", - :greater_than => "must be greater than {{count}}", - :greater_than_or_equal_to => "must be greater than or equal to {{count}}", - :equal_to => "must be equal to {{count}}", - :less_than => "must be less than {{count}}", - :less_than_or_equal_to => "must be less than or equal to {{count}}", - :odd => "must be odd", - :even => "must be even" - } - } - } - } -} From 7ee01c8c5415579a68fe4bf073f69cf5796bf7c9 Mon Sep 17 00:00:00 2001 From: Iain Hecker Date: Tue, 19 Aug 2008 23:33:39 +0200 Subject: [PATCH 8/9] Changed locale file to yml for actionpack, but still broken --- actionpack/lib/action_view.rb | 2 +- actionpack/lib/action_view/locale/en-US.rb | 89 --------------------- actionpack/lib/action_view/locale/en-US.yml | 89 +++++++++++++++++++++ 3 files changed, 90 insertions(+), 90 deletions(-) delete mode 100644 actionpack/lib/action_view/locale/en-US.rb create mode 100644 actionpack/lib/action_view/locale/en-US.yml diff --git a/actionpack/lib/action_view.rb b/actionpack/lib/action_view.rb index 7e9ae9432d..f13324a9d0 100644 --- a/actionpack/lib/action_view.rb +++ b/actionpack/lib/action_view.rb @@ -35,7 +35,7 @@ require 'action_view/partials' require 'action_view/template_error' I18n.backend.populate do - I18n.load_translations File.dirname(__FILE__) + '/action_view/locale/en-US.rb' + I18n.load_translations File.dirname(__FILE__) + '/action_view/locale/en-US.yml' end ActionView::Base.class_eval do diff --git a/actionpack/lib/action_view/locale/en-US.rb b/actionpack/lib/action_view/locale/en-US.rb deleted file mode 100644 index d4647b5a48..0000000000 --- a/actionpack/lib/action_view/locale/en-US.rb +++ /dev/null @@ -1,89 +0,0 @@ -{ :'en-US' => { - :datetime => { - :distance_in_words => { - :half_a_minute => 'half a minute', - :less_than_x_seconds => { - :one => 'less than 1 second', - :many => 'less than {{count}} seconds' - }, - :x_seconds => { - :one => '1 second', - :many => '{{count}} seconds' - }, - :less_than_x_minutes => { - :one => 'less than a minute', - :many => 'less than {{count}} minutes' - }, - :x_minutes => { - :one => '1 minute', - :many => '{{count}} minutes' - }, - :about_x_hours => { - :one => 'about 1 hour', - :many => 'about {{count}} hours' - }, - :x_days => { - :one => '1 day', - :many => '{{count}} days' - }, - :about_x_months => { - :one => 'about 1 month', - :many => 'about {{count}} months' - }, - :x_months => { - :one => '1 month', - :many => '{{count}} months' - }, - :about_x_years => { - :one => 'about 1 year', - :many => 'about {{count}} years' - }, - :over_x_years => { - :one => 'over 1 year', - :many => 'over {{count}} years' - } - } - }, - :number => { - :format => { - :precision => 3, - :separator => '.', - :delimiter => ',' - }, - :currency => { - :format => { - :unit => '$', - :precision => 2, - :format => '%u%n' - } - }, - :human => { - :format => { - :precision => 1, - :delimiter => '' - } - }, - :percentage => { - :format => { - :delimiter => '' - } - }, - :precision => { - :format => { - :delimiter => '' - } - } - }, - :activerecord => { - :errors => { - :template => { - :header => { - :one => "1 error prohibited this {{model}} from being saved", - :many => "{{count}} errors prohibited this {{model}} from being saved" - }, - :body => "There were problems with the following fields:" - } - } - } - } -} diff --git a/actionpack/lib/action_view/locale/en-US.yml b/actionpack/lib/action_view/locale/en-US.yml new file mode 100644 index 0000000000..d4039e9b12 --- /dev/null +++ b/actionpack/lib/action_view/locale/en-US.yml @@ -0,0 +1,89 @@ +"en-US": + number: + # Used in number_with_delimiter() + # These are also the defaults for 'currency', 'percentage', 'precision', and 'human' + format: + # Sets the seperator between the units, for more precision (e.g. 1.0 / 2.0 == 0.5) + seperator: "." + # Delimets thousands (e.g. 1,000,000 is a million) (always in groups of three) + delimeter: "," + # Number of decimals, behind the seperator (the number 1 with a precision of 2 gives: 1.00) + precision: 3 + + # Used in number_to_currency() + currency: + format: + # Where is the currency sign? %u is the currency unit, %n the number (default: $5.00) + format: "%u%n" + unit: "$" + # These three are to override number.format and are optional + seperator: "." + delimiter: "," + precision: 2 + + # Used in number_to_percentage() + percentage: + format: + # These three are to override number.format and are optional + seperator: "." + delimiter: "," + precision: 3 + + # Used in number_to_precision() + precision: + format: + # These three are to override number.format and are optional + seperator: "." + delimiter: "," + precision: 3 + + # Used in number_to_human_size() + human: + format: + # These three are to override number.format and are optional + seperator: "." + delimiter: "," + + # Used in distance_of_time_in_words(), distance_of_time_in_words_to_now(), time_ago_in_words() + datetime: + distance_in_words: + half_a_minute: "half a minute" + less_than_x_seconds: + one: "less than a second" + many: "less than {{count}} seconds" + x_seconds: + one: "1 second" + many: "{{count}} seconds" + less_than_x_minutes: + one: "less than 1 minutes" + many: "less than {{count}} minutes" + x_minutes: + one: "1 minute" + many: "{{count}} minutes" + about_x_hours: + one: "about 1 hour" + many: "about {{count}} hours" + x_days: + one: "1 day" + many: "{{count}} days" + about_x_months: + one: "about a month" + many: "about {{count}} months" + x_months: + one: "1 month" + many: "{{count}} months" + about_x_years: + one: "about 1 year" + many: "about {{count}} years" + over_x_years: + one: "over 1 year" + many: "over {{count}} years" + + activerecord: + errors: + header: + one: "1 error prohibited this {{model}} from being saved" + many: "{{count}} errors prohibited this {{model}} from being saved" + # The variable :count is also available + message: "There were problems with the following fields:" + From 950b9792baae14e42b894f113ae8dfc95df34da9 Mon Sep 17 00:00:00 2001 From: Sven Fuchs Date: Wed, 20 Aug 2008 18:44:18 +0200 Subject: [PATCH 9/9] fixing actionpack yml translations --- actionpack/lib/action_view/locale/en-US.yml | 44 +++++++++++---------- 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/actionpack/lib/action_view/locale/en-US.yml b/actionpack/lib/action_view/locale/en-US.yml index d4039e9b12..57987f4e02 100644 --- a/actionpack/lib/action_view/locale/en-US.yml +++ b/actionpack/lib/action_view/locale/en-US.yml @@ -3,11 +3,11 @@ # Used in number_with_delimiter() # These are also the defaults for 'currency', 'percentage', 'precision', and 'human' format: - # Sets the seperator between the units, for more precision (e.g. 1.0 / 2.0 == 0.5) - seperator: "." + # Sets the separator between the units, for more precision (e.g. 1.0 / 2.0 == 0.5) + separator: "." # Delimets thousands (e.g. 1,000,000 is a million) (always in groups of three) - delimeter: "," - # Number of decimals, behind the seperator (the number 1 with a precision of 2 gives: 1.00) + delimiter: "," + # Number of decimals, behind the separator (the number 1 with a precision of 2 gives: 1.00) precision: 3 # Used in number_to_currency() @@ -17,7 +17,7 @@ format: "%u%n" unit: "$" # These three are to override number.format and are optional - seperator: "." + separator: "." delimiter: "," precision: 2 @@ -25,37 +25,38 @@ percentage: format: # These three are to override number.format and are optional - seperator: "." - delimiter: "," - precision: 3 + # separator: + delimiter: "" + # precision: # Used in number_to_precision() precision: format: # These three are to override number.format and are optional - seperator: "." - delimiter: "," - precision: 3 + # separator: + delimiter: "" + # precision: # Used in number_to_human_size() human: format: # These three are to override number.format and are optional - seperator: "." - delimiter: "," + # separator: + delimiter: "" + precision: 1 # Used in distance_of_time_in_words(), distance_of_time_in_words_to_now(), time_ago_in_words() datetime: distance_in_words: half_a_minute: "half a minute" less_than_x_seconds: - one: "less than a second" + one: "less than 1 second" many: "less than {{count}} seconds" x_seconds: one: "1 second" many: "{{count}} seconds" less_than_x_minutes: - one: "less than 1 minutes" + one: "less than a minute" many: "less than {{count}} minutes" x_minutes: one: "1 minute" @@ -67,7 +68,7 @@ one: "1 day" many: "{{count}} days" about_x_months: - one: "about a month" + one: "about 1 month" many: "about {{count}} months" x_months: one: "1 month" @@ -81,9 +82,10 @@ activerecord: errors: - header: - one: "1 error prohibited this {{model}} from being saved" - many: "{{count}} errors prohibited this {{model}} from being saved" - # The variable :count is also available - message: "There were problems with the following fields:" + template: + header: + one: "1 error prohibited this {{model}} from being saved" + many: "{{count}} errors prohibited this {{model}} from being saved" + # The variable :count is also available + body: "There were problems with the following fields:"