diff --git a/lib/i18n.rb b/lib/i18n.rb index 8c1c9de6..e0128575 100644 --- a/lib/i18n.rb +++ b/lib/i18n.rb @@ -8,6 +8,7 @@ module I18n autoload :Gettext, 'i18n/gettext' autoload :Locale, 'i18n/locale' autoload :Tests, 'i18n/tests' + autoload :Middleware, 'i18n/middleware' RESERVED_KEYS = [:scope, :default, :separator, :resolve, :object, :fallback, :fallback_in_progress, :format, :cascade, :throw, :raise, :deep_interpolation] RESERVED_KEYS_PATTERN = /%\{(#{RESERVED_KEYS.join("|")})\}/ diff --git a/lib/i18n/middleware.rb b/lib/i18n/middleware.rb new file mode 100644 index 00000000..67461f7a --- /dev/null +++ b/lib/i18n/middleware.rb @@ -0,0 +1,15 @@ +module I18n + class Middleware + + def initialize(app) + @app = app + end + + def call(env) + @app.call(env) + ensure + Thread.current[:i18n_config] = I18n::Config.new + end + + end +end diff --git a/test/i18n/middleware_test.rb b/test/i18n/middleware_test.rb new file mode 100644 index 00000000..2190d189 --- /dev/null +++ b/test/i18n/middleware_test.rb @@ -0,0 +1,24 @@ +require 'test_helper' + +class I18nMiddlewareTest < I18n::TestCase + def setup + super + I18n.default_locale = :fr + @app = DummyRackApp.new + @middleware = I18n::Middleware.new(@app) + end + + test "middleware initializes new config object after request" do + old_i18n_config_object_id = Thread.current[:i18n_config].object_id + @middleware.call({}) + + updated_i18n_config_object_id = Thread.current[:i18n_config].object_id + assert_not_equal updated_i18n_config_object_id, old_i18n_config_object_id + end + + test "succesfully resets i18n locale to default locale by defining new config" do + @middleware.call({}) + + assert_equal :fr, I18n.locale + end +end diff --git a/test/test_helper.rb b/test/test_helper.rb index dabb6a7b..702a1b57 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -53,3 +53,9 @@ def locales_dir File.dirname(__FILE__) + '/test_data/locales' end end + +class DummyRackApp + def call(env) + I18n.locale = :es + end +end