File: active_support/vendor/i18n-0.4.1/i18n/backend/simple.rb

Overview
Module Structure
Class Hierarchy
Code

Overview

Module Structure

  module: <Toplevel Module>
  module: I18n#3
  module: Backend#4
  class: Simple#19
includes
  Implementation ( Unknown-Module )
inherits from
  Object ( Builtin-Module )
  module: Implementation#20
includes
  Base ( I18n::Backend )
has properties
method: initialized? #23
method: store_translations / 3 #31
method: available_locales #39
method: reload! #48
method: init_translations #56
method: translations #61
method: lookup / 4 #70

Class Hierarchy

Object ( Builtin-Module )
  Simple ( I18n::Backend ) #19

Code

   1  # encoding: utf-8
   2 
   3  module I18n
   4    module Backend
   5      # A simple backend that reads translations from YAML files and stores them in
   6      # an in-memory hash. Relies on the Base backend.
   7      #
   8      # The implementation is provided by a Implementation module allowing to easily
   9      # extend Simple backend's behavior by including modules. E.g.:
  10      #
  11      # module I18n::Backend::Pluralization
  12      #   def pluralize(*args)
  13      #     # extended pluralization logic
  14      #     super
  15      #   end
  16      # end
  17      #
  18      # I18n::Backend::Simple.send(:include, I18n::Backend::Pluralization)
  19      class Simple
  20        module Implementation
  21          include Base
  22 
  23          def initialized?
  24            @initialized ||= false
  25          end
  26 
  27          # Stores translations for the given locale in memory.
  28          # This uses a deep merge for the translations hash, so existing
  29          # translations will be overwritten by new ones only at the deepest
  30          # level of the hash.
  31          def store_translations(locale, data, options = {})
  32            locale = locale.to_sym
  33            translations[locale] ||= {}
  34            data = data.deep_symbolize_keys
  35            translations[locale].deep_merge!(data)
  36          end
  37 
  38          # Get available locales from the translations hash
  39          def available_locales
  40            init_translations unless initialized?
  41            translations.inject([]) do |locales, (locale, data)|
  42              locales << locale unless (data.keys - [:i18n]).empty?
  43              locales
  44            end
  45          end
  46 
  47          # Clean up translations hash and set initialized to false on reload!
  48          def reload!
  49            @initialized = false
  50            @translations = nil
  51            super
  52          end
  53 
  54        protected
  55 
  56          def init_translations
  57            load_translations
  58            @initialized = true
  59          end
  60 
  61          def translations
  62            @translations ||= {}
  63          end
  64 
  65          # Looks up a translation from the translations hash. Returns nil if
  66          # eiher key is nil, or locale, scope or key do not exist as a key in the
  67          # nested translations hash. Splits keys or scopes containing dots
  68          # into multiple keys, i.e. <tt>currency.format</tt> is regarded the same as
  69          # <tt>%w(currency format)</tt>.
  70          def lookup(locale, key, scope = [], options = {})
  71            init_translations unless initialized?
  72            keys = I18n.normalize_keys(locale, key, scope, options[:separator])
  73 
  74            keys.inject(translations) do |result, key|
  75              key = key.to_sym
  76              return nil unless result.is_a?(Hash) && result.has_key?(key)
  77              result = result[key]
  78              result = resolve(locale, key, result, options.merge(:scope => nil)) if result.is_a?(Symbol)
  79              result
  80            end
  81          end
  82        end
  83 
  84        include Implementation
  85      end
  86    end
  87  end