Sha256: 58c59cdb704c7843c79344abb1c5af8d045474b224a024a786c8415c45df9d8d

Contents?: true

Size: 1.92 KB

Versions: 3

Compression:

Stored size: 1.92 KB

Contents

class TranslationEngine::Backend < I18n::Backend::Simple

  IGNORE_KEYS = %i(faker order)

  def reload!
    super
    init_translations
    release == 'master' ? download_master : download_release
  end

  def release=(release)
    @release = release
    reload!
    release
  end

  def release
    @release ||= 'master'
  end

  def releases
    [TranslationEngine::Release.master] | connection.get_releases
  end

  def current_locale_releases
    releases.select(&:current_locale?)
  end

  protected

  def connection
    @connection ||= TranslationEngine::Connection.new
  end

  def download_master
    if (yml_data = connection.get_translations.body)
      Rails.logger.info { 'Updating from translation server - master' }
      YAML.load(yml_data).each do |locale, translations|
        store_translations locale, translations
      end
    end
  end

  def download_release
    if (yml_data = connection.get_release(release).body)
      Rails.logger.info { "Updating from translation server - #{release}" }
      YAML.load(yml_data).each do |locale, translations|
        store_translations locale, translations
      end
    end
  end

  def lookup(locale, key, scope = [], options = {})
    keys = I18n.normalize_keys(locale, key, scope, options[:separator])
    resolved = super
    if resolved
      enhance_translation(resolved, keys)
    else
      resolved
    end
  end

  def enhance_translation(value, main_keys, catch_translation = true)
    return value if (main_keys & IGNORE_KEYS).any?

    case value
    when Array
      TranslationEngine::Translation.catch(value, main_keys)
      value.map { |v| enhance_translation(v, main_keys, false) }
    when Hash
      Hash[value.map { |k, v| [k, enhance_translation(v, main_keys + [k])] }]
    when String
      TranslationEngine::Translation.new(value, main_keys).to_s
    else
      TranslationEngine::Translation.catch(value, main_keys) if catch_translation
      value
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
translation_engine-0.0.3 app/models/translation_engine/backend.rb
translation_engine-0.0.2 app/models/translation_engine/backend.rb
translation_engine-0.0.1 app/models/translation_engine/backend.rb