From 9e405fca49f4fbea6b3ee5e795fffc39151cc41e Mon Sep 17 00:00:00 2001 From: Lawrence Pit Date: Thu, 10 Jun 2010 22:51:04 +1000 Subject: [PATCH] config.i18n.reload_on_each_request --- actionpack/lib/action_controller/dispatcher.rb | 6 ++---- actionpack/test/controller/dispatcher_test.rb | 14 ++++++++++++-- railties/environments/development.rb | 7 ++++++- railties/guides/source/i18n.textile | 2 ++ railties/lib/initializer.rb | 4 +++- railties/test/initializer_test.rb | 4 ++++ 6 files changed, 29 insertions(+), 8 deletions(-) diff --git a/actionpack/lib/action_controller/dispatcher.rb b/actionpack/lib/action_controller/dispatcher.rb index 1932944..b3d4a70 100644 --- a/actionpack/lib/action_controller/dispatcher.rb +++ b/actionpack/lib/action_controller/dispatcher.rb @@ -5,7 +5,7 @@ module ActionController @@cache_classes = true class << self - def define_dispatcher_callbacks(cache_classes) + def define_dispatcher_callbacks(cache_classes, i18n_reload_on_each_request = false) @@cache_classes = cache_classes unless cache_classes ActionView::Helpers::AssetTagHelper.cache_asset_timestamps = false @@ -17,9 +17,7 @@ module ActionController after_dispatch :flush_logger if Base.logger && Base.logger.respond_to?(:flush) - to_prepare do - I18n.reload! - end + to_prepare { I18n.reload! } if i18n_reload_on_each_request end # DEPRECATE: Remove CGI support diff --git a/actionpack/test/controller/dispatcher_test.rb b/actionpack/test/controller/dispatcher_test.rb index 61e7007..6c4c9ac 100644 --- a/actionpack/test/controller/dispatcher_test.rb +++ b/actionpack/test/controller/dispatcher_test.rb @@ -61,6 +61,16 @@ class DispatcherTest < Test::Unit::TestCase dispatch(false) end + def test_i18n_reload_on_each_request_defaults_to_false + I18n.expects(:reload!).never + dispatch(false) + end + + def test_i18n_reload_on_each_request_defaults + I18n.expects(:reload!).once + dispatch(false, true) + end + # Stub out dispatch error logger class << Dispatcher def log_failsafe_exception(status, exception); end @@ -113,9 +123,9 @@ class DispatcherTest < Test::Unit::TestCase end private - def dispatch(cache_classes = true) + def dispatch(cache_classes = true, i18n_reload_on_each_request = false) ActionController::Routing::RouteSet.any_instance.stubs(:call).returns([200, {}, 'response']) - Dispatcher.define_dispatcher_callbacks(cache_classes) + Dispatcher.define_dispatcher_callbacks(cache_classes, i18n_reload_on_each_request) Dispatcher.new.call({'rack.input' => StringIO.new('')}) end diff --git a/railties/environments/development.rb b/railties/environments/development.rb index 85c9a60..b0c515f 100644 --- a/railties/environments/development.rb +++ b/railties/environments/development.rb @@ -14,4 +14,9 @@ config.action_view.debug_rjs = true config.action_controller.perform_caching = false # Don't care if the mailer can't send -config.action_mailer.raise_delivery_errors = false \ No newline at end of file +config.action_mailer.raise_delivery_errors = false + +# Reloads all i18n resources on each request. This may slow down your +# response time, which is fine for development since you don't have to +# restart the webserver when you make changes to your translation resources. +config.i18n.reload_on_each_request = true \ No newline at end of file diff --git a/railties/guides/source/i18n.textile b/railties/guides/source/i18n.textile index 103ccb1..640aaf4 100644 --- a/railties/guides/source/i18n.textile +++ b/railties/guides/source/i18n.textile @@ -103,8 +103,10 @@ The default +environment.rb+ files has instruction how to add locales from anoth # The internationalization framework can be changed # to have another default locale (standard is :en) or more load paths. # All files from config/locales/*.rb,yml are added automatically. +# By default the i18n resources are not reloaded on each request. # config.i18n.load_path << Dir[File.join(RAILS_ROOT, 'my', 'locales', '*.{rb,yml}')] # config.i18n.default_locale = :de +# config.i18n.reload_on_each_request = true h4. Optional: Custom I18n Configuration Setup diff --git a/railties/lib/initializer.rb b/railties/lib/initializer.rb index 196bd93..301de24 100644 --- a/railties/lib/initializer.rb +++ b/railties/lib/initializer.rb @@ -574,6 +574,7 @@ Run `rake gems:install` to install the missing gems. # appended to what's already set instead of overwritten. def initialize_i18n configuration.i18n.each do |setting, value| + next if setting == :reload_on_each_request if setting == :load_path I18n.load_path += value else @@ -627,7 +628,7 @@ Run `rake gems:install` to install the missing gems. def prepare_dispatcher return unless configuration.frameworks.include?(:action_controller) require 'dispatcher' unless defined?(::Dispatcher) - Dispatcher.define_dispatcher_callbacks(configuration.cache_classes) + Dispatcher.define_dispatcher_callbacks(configuration.cache_classes, configuration.i18n.reload_on_each_request) Dispatcher.run_prepare_callbacks end @@ -1080,6 +1081,7 @@ Run `rake gems:install` to install the missing gems. def default_i18n i18n = Rails::OrderedOptions.new i18n.load_path = [] + i18n.reload_on_each_request = false if File.exist?(File.join(RAILS_ROOT, 'config', 'locales')) i18n.load_path << Dir[File.join(RAILS_ROOT, 'config', 'locales', '*.{rb,yml}')] diff --git a/railties/test/initializer_test.rb b/railties/test/initializer_test.rb index a4d224d..70ee34e 100644 --- a/railties/test/initializer_test.rb +++ b/railties/test/initializer_test.rb @@ -280,6 +280,10 @@ class InitializerPluginLoadingTests < Test::Unit::TestCase end class InitializerSetupI18nTests < Test::Unit::TestCase + def test_i18n_reload_on_each_request_defaults_to_false + assert_equal false, Rails::Configuration.new.i18n.reload_on_each_request + end + def test_no_config_locales_dir_present_should_return_empty_load_path File.stubs(:exist?).returns(false) assert_equal [], Rails::Configuration.new.i18n.load_path -- 1.7.0