123456789_123456789_123456789_123456789_123456789_

Module: ActionView::Helpers::TranslationHelper

Relationships & Source Files
Extension / Inclusion / Inheritance Descendants
Included In:
Super Chains via Extension / Inclusion / Inheritance
Instance Chain:
Defined in: actionview/lib/action_view/helpers/translation_helper.rb

Constant Summary

TagHelper - Included

BOOLEAN_ATTRIBUTES, PRE_CONTENT_STRINGS, TAG_PREFIXES

Instance Method Summary

TagHelper - Included

#cdata_section

Returns a CDATA section with the given content.

#content_tag

Returns an HTML block tag of type name surrounding the content.

#escape_once

Returns an escaped version of html without affecting existing escaped entities.

#tag

Returns an empty HTML tag of type name which by default is XHTML compliant.

CaptureHelper - Included

#capture

The capture method allows you to extract part of a template into a variable.

#content_for

Calling content_for stores a block of markup in an identifier for later use.

#content_for?

content_for? checks whether any content has been captured yet using content_for.

#provide

The same as content_for but when used with streaming flushes straight back to the layout.

Instance Method Details

#l(*args)

Alias for #localize.

[ GitHub ]

  
# File 'actionview/lib/action_view/helpers/translation_helper.rb', line 90

alias :l :localize

#localize(*args) Also known as: #l

Delegates to I18n.localize with no additional functionality.

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

[ GitHub ]

  
# File 'actionview/lib/action_view/helpers/translation_helper.rb', line 87

def localize(*args)
  I18n.localize(*args)
end

#t(key, options = {})

Alias for #translate.

[ GitHub ]

  
# File 'actionview/lib/action_view/helpers/translation_helper.rb', line 81

alias :t :translate

#translate(key, options = {}) Also known as: #t

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.

[ GitHub ]

  
# File 'actionview/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])
    ('span', keys.last.to_s.titleize, :class => 'translation_missing', :title => "translation missing: #{keys.join('.')}")
  end
end