module ActionView::Helpers::TranslationHelper - actionview-4.2.4 Documentation

# module ActionView::Helpers::TranslationHelper

### Public Instance Methods

l(*args)
Alias for: localize
localize(*args) click to toggle source

Delegates to `I18n.localize` with no additional functionality.

See rubydoc.info/github/svenfuchs/i18n/master/I18n/Backend/Base:localize for more information.

    # File lib/action_view/helpers/translation_helper.rb, line 87
    def localize(*args)
      I18n.localize(*args)
    end

Also aliased as: l
t(key, options = {})
Alias for: translate
translate(key, options = {}) click to toggle source

Delegates to `I18n#translate` but also performs three additional functions.

First, it will ensure that any thrown `MissingTranslation` messages will be turned into inline spans that:

    * have a "translation-missing" class set,
    * contain the missing key as a title attribute and
    * a titleized version of the last key segment as a text.

E.g. the value returned for a missing translation key :“blog.post.title” will be <span class=“translation_missing” title=“translation missing: en.blog.post.title”>Title</span>. This way your views will display rather reasonable strings but it will still be easy to spot missing translations.

Second, it'll scope the key by the current partial if the key starts with a period. So if you call `translate(".foo")` from the `people/index.html.erb` template, you'll actually be calling `I18n.translate("people.index.foo")`. This makes it less repetitive to translate many keys within the same partials and gives you a simple framework for scoping them consistently. If you don't prepend the key with a period, nothing is converted.

Third, it'll mark the translation as safe HTML if the key has the suffix “_html” or the last element of the key is the word “html”. For example, calling translate(“footer_html”) or translate(“footer.html”) will return a safe HTML string that won't be escaped by other HTML helper methods. This naming convention helps to identify translations that include HTML tags so that you know what kind of output to expect when you call translate in a template.

    # File lib/action_view/helpers/translation_helper.rb, line 38
    def translate(key, options = {})
      options = options.dup
      has_default = options.has_key?(:default)
      remaining_defaults = Array(options.delete(:default)).compact

      if has_default && !remaining_defaults.first.kind_of?(Symbol)
        options[:default] = remaining_defaults
      end

      # If the user has explicitly decided to NOT raise errors, pass that option to I18n.
      # Otherwise, tell I18n to raise an exception, which we rescue further in this method.
      # Note: `raise_error` refers to us re-raising the error in this method. I18n is forced to raise by default.
      if options[:raise] == false || (options.key?(:rescue_format) && options[:rescue_format].nil?)
        raise_error = false
        i18n_raise = false
      else
        raise_error = options[:raise] || options[:rescue_format] || ActionView::Base.raise_on_missing_translations
        i18n_raise = true
      end

      if html_safe_translation_key?(key)
        html_safe_options = options.dup
        options.except(*I18n::RESERVED_KEYS).each do |name, value|
          unless name == :count && value.is_a?(Numeric)
            html_safe_options[name] = ERB::Util.html_escape(value.to_s)
          end
        end
        translation = I18n.translate(scope_key_by_partial(key), html_safe_options.merge(raise: i18n_raise))

        translation.respond_to?(:html_safe) ? translation.html_safe : translation
      else
        I18n.translate(scope_key_by_partial(key), options.merge(raise: i18n_raise))
      end
    rescue I18n::MissingTranslationData => e
      if remaining_defaults.present?
        translate remaining_defaults.shift, options.merge(default: remaining_defaults)
      else
        raise e if raise_error

        keys = I18n.normalize_keys(e.locale, e.key, e.options[:scope])
        content_tag('span', keys.last.to_s.titleize, :class => 'translation_missing', :title => "translation missing: #{keys.join('.')}")
      end
    end

Also aliased as: t

### Private Instance Methods

html_safe_translation_key?(key) click to toggle source

    # File lib/action_view/helpers/translation_helper.rb, line 105
    def html_safe_translation_key?(key)
      key.to_s =~ /(\b|_|\.)html$/
    end

scope_key_by_partial(key) click to toggle source

    # File lib/action_view/helpers/translation_helper.rb, line 93
    def scope_key_by_partial(key)
      if key.to_s.first == "."
        if @virtual_path
          @virtual_path.gsub(%r{/_?}, ".") + key.to_s
        else
          raise "Cannot use t(#{key.inspect}) shortcut because path is not available"
        end
      else
        key
      end
    end