1
0
Fork 0
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:
Sven Fuchs 2008-09-15 10:26:50 +02:00 committed by Pratik Naik
parent 8cb7d46043
commit a3b7fa78bf
6 changed files with 37 additions and 16 deletions

View file

@ -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'

View file

@ -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'

View file

@ -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

View file

@ -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')

View file

@ -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

View file

@ -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