instance method translate

Ruby on Rails 4.0.13

Since v2.2.3

Available in: v2.2.3 v2.3.18 v3.0.20 v3.1.12 v3.2.22.5 v4.0.13 v4.1.16 v4.2.9 v5.2.8.1 v6.0.6 v6.1.7.10 v7.0.10 v7.1.6 v7.2.3 v8.0.4 v8.1.2

Signature

translate(key, options = {})

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.

Parameters

key req
options opt = {}
Source
# File actionpack/lib/action_view/helpers/translation_helper.rb, line 37
      def translate(key, options = {})
        options[:default] = wrap_translate_defaults(options[:default]) if options[:default]

        # If the user has specified rescue_format then pass it all through, otherwise use
        # raise and do the work ourselves
        options[:raise] ||= ActionView::Base.raise_on_missing_translations

        raise_error = options[:raise] || options.key?(:rescue_format)
        unless raise_error
          options[: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)

          translation.respond_to?(:html_safe) ? translation.html_safe : translation
        else
          I18n.translate(scope_key_by_partial(key), options)
        end
      rescue I18n::MissingTranslationData => e
        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

Defined in actionpack/lib/action_view/helpers/translation_helper.rb line 37 · View on GitHub · Improve this page · Find usages on GitHub

Defined in ActionView::Helpers::TranslationHelper

Type at least 2 characters to search.

↑↓ navigate · open · esc close