mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
I18n: Introduce I18n.load_path in favor of I18n.load_translations and change Simple backend to load translations lazily. [#1048 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
This commit is contained in:
parent
8cb7d46043
commit
a3b7fa78bf
6 changed files with 37 additions and 16 deletions
|
@ -43,7 +43,7 @@ require 'action_view/base'
|
|||
require 'action_view/partials'
|
||||
require 'action_view/template_error'
|
||||
|
||||
I18n.load_translations "#{File.dirname(__FILE__)}/action_view/locale/en-US.yml"
|
||||
I18n.load_path << "#{File.dirname(__FILE__)}/action_view/locale/en-US.yml"
|
||||
|
||||
require 'action_view/helpers'
|
||||
|
||||
|
|
|
@ -78,4 +78,4 @@ require 'active_record/connection_adapters/abstract_adapter'
|
|||
require 'active_record/schema_dumper'
|
||||
|
||||
require 'active_record/i18n_interpolation_deprecation'
|
||||
I18n.load_translations File.dirname(__FILE__) + '/active_record/locale/en-US.yml'
|
||||
I18n.load_path << File.dirname(__FILE__) + '/active_record/locale/en-US.yml'
|
||||
|
|
|
@ -6,12 +6,16 @@ class ActiveRecordValidationsI18nTests < Test::Unit::TestCase
|
|||
def setup
|
||||
reset_callbacks Topic
|
||||
@topic = Topic.new
|
||||
@old_load_path, @old_backend = I18n.load_path, I18n.backend
|
||||
I18n.load_path.clear
|
||||
I18n.backend = I18n::Backend::Simple.new
|
||||
I18n.backend.store_translations('en-US', :activerecord => {:errors => {:messages => {:custom => nil}}})
|
||||
end
|
||||
|
||||
def teardown
|
||||
reset_callbacks Topic
|
||||
I18n.load_translations File.dirname(__FILE__) + '/../../lib/active_record/locale/en-US.yml'
|
||||
I18n.load_path.replace @old_load_path
|
||||
I18n.backend = @old_backend
|
||||
end
|
||||
|
||||
def unique_topic
|
||||
|
|
|
@ -56,7 +56,7 @@ require 'active_support/time_with_zone'
|
|||
|
||||
require 'active_support/secure_random'
|
||||
|
||||
I18n.load_translations File.dirname(__FILE__) + '/active_support/locale/en-US.yml'
|
||||
I18n.load_path << File.dirname(__FILE__) + '/active_support/locale/en-US.yml'
|
||||
|
||||
Inflector = ActiveSupport::Deprecation::DeprecatedConstantProxy.new('Inflector', 'ActiveSupport::Inflector')
|
||||
Dependencies = ActiveSupport::Deprecation::DeprecatedConstantProxy.new('Dependencies', 'ActiveSupport::Dependencies')
|
||||
|
|
|
@ -10,7 +10,8 @@ require 'i18n/exceptions'
|
|||
|
||||
module I18n
|
||||
@@backend = nil
|
||||
@@default_locale = 'en-US'
|
||||
@@load_path = nil
|
||||
@@default_locale = :'en-US'
|
||||
@@exception_handler = :default_exception_handler
|
||||
|
||||
class << self
|
||||
|
@ -49,14 +50,22 @@ module I18n
|
|||
@@exception_handler = exception_handler
|
||||
end
|
||||
|
||||
# Allows client libraries to pass arguments that specify a source for
|
||||
# translation data to be loaded by the backend. The backend defines
|
||||
# acceptable sources.
|
||||
# Allow clients to register paths providing translation data sources. The
|
||||
# backend defines acceptable sources.
|
||||
#
|
||||
# E.g. the provided SimpleBackend accepts a list of paths to translation
|
||||
# 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)
|
||||
# named *.yml and contain YAML data. So for the SimpleBackend clients may
|
||||
# register translation files like this:
|
||||
# I18n.load_path << 'path/to/locale/en-US.yml'
|
||||
def load_path
|
||||
@@load_path ||= []
|
||||
end
|
||||
|
||||
# Sets the load path instance. Custom implementations are expected to
|
||||
# behave like a Ruby Array.
|
||||
def load_path=(load_path)
|
||||
@@load_path = load_path
|
||||
end
|
||||
|
||||
# Translates, pluralizes and interpolates a given key using a given locale,
|
||||
|
@ -175,6 +184,4 @@ module I18n
|
|||
keys.flatten.map{|k| k.to_sym}
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
end
|
|
@ -1,4 +1,4 @@
|
|||
require 'strscan'
|
||||
require 'yaml'
|
||||
|
||||
module I18n
|
||||
module Backend
|
||||
|
@ -59,7 +59,16 @@ module I18n
|
|||
object.strftime(format)
|
||||
end
|
||||
|
||||
def initialized?
|
||||
@initialized ||= false
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
def init_translations
|
||||
load_translations(*I18n.load_path)
|
||||
@initialized = true
|
||||
end
|
||||
|
||||
def translations
|
||||
@translations ||= {}
|
||||
|
@ -72,6 +81,7 @@ module I18n
|
|||
# <tt>%w(currency format)</tt>.
|
||||
def lookup(locale, key, scope = [])
|
||||
return unless key
|
||||
init_translations unless initialized?
|
||||
keys = I18n.send :normalize_translation_keys, locale, key, scope
|
||||
keys.inject(translations){|result, k| result[k.to_sym] or return nil }
|
||||
end
|
||||
|
@ -94,7 +104,7 @@ module I18n
|
|||
rescue MissingTranslationData
|
||||
nil
|
||||
end
|
||||
|
||||
|
||||
# Picks a translation from an array according to English pluralization
|
||||
# rules. It will pick the first translation if count is not equal to 1
|
||||
# and the second translation if it is equal to 1. Other backends can
|
||||
|
|
Loading…
Reference in a new issue