Sha256: efb0fb9bfbe680170f0492814bd8daab41ac93e1328c0cd66cb2d3f931e860cf

Contents?: true

Size: 1.85 KB

Versions: 1

Compression:

Stored size: 1.85 KB

Contents

require 'i18n'
require 'lost_in_translations/base'
require 'lost_in_translations/ruby'
require 'lost_in_translations/config'
require 'lost_in_translations/active_record'
require 'lost_in_translations/translator/base'

module LostInTranslations

  def self.included(base_class)
    if defined?(::ActiveRecord::Base) &&
       base_class.ancestors.include?(::ActiveRecord::Base)
      base_class.send(:include, LostInTranslations::ActiveRecord)
    else
      base_class.send(:include, Ruby)
    end
  end

  def self.config
    @config ||= Config.new('translation_data', Translator::Base)
  end

  def self.translate(*args)
    config.translator.translate(*args)
  end

  def self.assign_translation(*args)
    config.translator.assign_translation(*args)
  end

  def self.translation_data(object)
    config.translator.translation_data(object)
  end

  def self.define_translation_methods(object, *fields)
    fields.each do |field|
      define_dynamic_translation_method(object, field)
      define_particular_translation_methods(object, field)
    end
  end

  def self.define_dynamic_translation_method(object, method_name)
    object.class_eval <<-RUBY, __FILE__, __LINE__ + 1
      def #{method_name}
        translate(:#{method_name}, I18n.locale)
      end
    RUBY
  end

  def self.define_particular_translation_methods(object, method_name)
    I18n.available_locales.each do |locale|
      object.class_eval <<-RUBY, __FILE__, __LINE__ + 1
        def #{locale}_#{method_name}
          translate(:#{method_name}, :#{locale})
        end

        def #{locale}_#{method_name}=(value)
          assign_translation(:#{method_name}, value, :#{locale})
        end
      RUBY
    end
  end

  def self.configure
    yield(config)
  end

  def self.infected_classes
    @infected_classes ||= []
  end

  def self.reload
    infected_classes.each(&:define_translation_methods)
  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
lost_in_translations-1.4.0 lib/lost_in_translations.rb