1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Additionally trigger i18n configuration setup before any eager loading [#6353 state:resolved]

This handles the case where config.cache_classes is true and classes
are loaded before the I18n load path has had a chance to be populated.

Signed-off-by: Santiago Pastorino <santiago@wyeworks.com>
This commit is contained in:
Saimon Moore 2011-01-28 13:53:07 +01:00 committed by Santiago Pastorino
parent cb9fa52832
commit b1ca339b53
2 changed files with 41 additions and 4 deletions

View file

@ -24,9 +24,8 @@ module I18n
end
end
# Set the i18n configuration only after initialization since a lot of
# configuration is still usually done in application initializers.
config.after_initialize do |app|
# Proc to set up i18n configuration
init_load_path = Proc.new do |app|
fallbacks = app.config.i18n.delete(:fallbacks)
app.config.i18n.each do |setting, value|
@ -46,6 +45,14 @@ module I18n
reloader.execute_if_updated
end
# Set the i18n configuration only after initialization since a lot of
# configuration is still usually done in application initializers.
config.after_initialize(&init_load_path)
# Trigger i18n config before any eager loading has happened
# so it's ready if any classes require it when eager loaded
config.before_eager_load(&init_load_path)
protected
def self.include_fallbacks_module
@ -78,4 +85,4 @@ module I18n
end
end
end
end
end

View file

@ -63,6 +63,36 @@ module ApplicationTests
assert I18n.load_path.include?("#{app_path}/config/another_locale.yml")
end
test "load_path is populated before eager loaded models" do
add_to_config <<-RUBY
config.cache_classes = true
RUBY
app_file "config/locales/en.yml", <<-YAML
en:
foo: "1"
YAML
app_file 'app/models/foo.rb', <<-RUBY
class Foo < ActiveRecord::Base
@foo = I18n.t(:foo)
end
RUBY
app_file 'config/routes.rb', <<-RUBY
AppTemplate::Application.routes.draw do
match '/i18n', :to => lambda { |env| [200, {}, [Foo.instance_variable_get('@foo')]] }
end
RUBY
require 'rack/test'
extend Rack::Test::Methods
load_app
get "/i18n"
assert_equal "1", last_response.body
end
test "locales are reloaded if they change between requests" do
add_to_config <<-RUBY
config.cache_classes = false