mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
I18n support for plugins
Rails will now automatically add locale files found in any engine's locale directory to the I18n.load_path (i.e. files that match the glob pattern "config/locales/**/*.{rb,yml}" relative to engine directories). [#2325 state:committed] Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
This commit is contained in:
parent
0efedf2a30
commit
cf4846c6ae
6 changed files with 32 additions and 0 deletions
|
@ -1,5 +1,7 @@
|
|||
*Edge*
|
||||
|
||||
* I18n support for plugins. #2325 [Antonio Tapiador, Sven Fuchs]
|
||||
|
||||
* Ruby 1.9: use UTF-8 for default internal and external encodings. [Jeremy Kemper]
|
||||
|
||||
* Added db/seeds.rb as a default file for storing seed data for the database. Can be loaded with rake db:seed (or created alongside the db with db:setup). (This is also known as the "Stop Putting Gawd Damn Seed Data In Your Migrations" feature) [DHH]
|
||||
|
|
|
@ -71,6 +71,10 @@ module Rails
|
|||
File.exist?(routing_file)
|
||||
end
|
||||
|
||||
# Returns true if there is any localization file in locale_path
|
||||
def localized?
|
||||
locale_files.any?
|
||||
end
|
||||
|
||||
def view_path
|
||||
File.join(directory, 'app', 'views')
|
||||
|
@ -88,6 +92,14 @@ module Rails
|
|||
File.join(directory, 'config', 'routes.rb')
|
||||
end
|
||||
|
||||
def locale_path
|
||||
File.join(directory, 'config', 'locales')
|
||||
end
|
||||
|
||||
def locale_files
|
||||
Dir[ File.join(locale_path, '*.{rb,yml}') ]
|
||||
end
|
||||
|
||||
|
||||
private
|
||||
def load_about_information
|
||||
|
|
|
@ -73,6 +73,7 @@ module Rails
|
|||
def configure_engines
|
||||
if engines.any?
|
||||
add_engine_routing_configurations
|
||||
add_engine_locales
|
||||
add_engine_controller_paths
|
||||
add_engine_view_paths
|
||||
end
|
||||
|
@ -84,6 +85,12 @@ module Rails
|
|||
end
|
||||
end
|
||||
|
||||
def add_engine_locales
|
||||
# reverse it such that the last engine can overwrite translations from the first, like with routes
|
||||
locale_files = engines.select(&:localized?).collect(&:locale_files).reverse.flatten
|
||||
I18n.load_path += locale_files - I18n.load_path
|
||||
end
|
||||
|
||||
def add_engine_controller_paths
|
||||
ActionController::Routing.controller_paths += engines.collect {|engine| engine.controller_path }
|
||||
end
|
||||
|
|
2
railties/test/fixtures/plugins/engines/engine/config/locales/en.yml
vendored
Normal file
2
railties/test/fixtures/plugins/engines/engine/config/locales/en.yml
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
en:
|
||||
hello: "Hello from Engine"
|
|
@ -406,6 +406,7 @@ class InitializerSetupI18nTests < Test::Unit::TestCase
|
|||
File.expand_path(File.dirname(__FILE__) + "/../../actionpack/lib/action_view/locale/en.yml"),
|
||||
File.expand_path(File.dirname(__FILE__) + "/../../activemodel/lib/active_model/locale/en.yml"),
|
||||
File.expand_path(File.dirname(__FILE__) + "/../../activerecord/lib/active_record/locale/en.yml"),
|
||||
File.expand_path(File.dirname(__FILE__) + "/../../railties/test/fixtures/plugins/engines/engine/config/locales/en.yml"),
|
||||
"my/test/locale.yml",
|
||||
"my/other/locale.yml" ], I18n.load_path.collect { |path| path =~ /\.\./ ? File.expand_path(path) : path }
|
||||
end
|
||||
|
|
|
@ -156,6 +156,14 @@ class TestPluginLoader < Test::Unit::TestCase
|
|||
plugin_load_paths.each { |path| assert $LOAD_PATH.include?(path) }
|
||||
end
|
||||
|
||||
def test_should_add_locale_files_to_I18n_load_path
|
||||
only_load_the_following_plugins! [:engine]
|
||||
|
||||
@loader.send :add_engine_locales
|
||||
|
||||
assert I18n.load_path.include?(File.join(plugin_fixture_path('engines/engine'), 'config', 'locales', 'en.yml'))
|
||||
end
|
||||
|
||||
|
||||
private
|
||||
def reset_load_path!
|
||||
|
|
Loading…
Reference in a new issue