Module: ActionView::Helpers::TranslationHelper
- Extended by:
- ActiveSupport::Concern
- Includes:
- TagHelper
- Included in:
- ActionView::Helpers
- Defined in:
- lib/action_view/helpers/translation_helper.rb
Overview
:nodoc:
Constant Summary
Constants included from TagHelper
ActionView::Helpers::TagHelper::ARIA_PREFIXES, ActionView::Helpers::TagHelper::BOOLEAN_ATTRIBUTES, ActionView::Helpers::TagHelper::DATA_PREFIXES, ActionView::Helpers::TagHelper::PRE_CONTENT_STRINGS, ActionView::Helpers::TagHelper::TAG_TYPES
Instance Method Summary collapse
-
#localize(object, **options) ⇒ Object
(also: #l)
Delegates to
I18n.localize
with no additional functionality. -
#translate(key, **options) ⇒ Object
(also: #t)
Delegates to
I18n#translate
but also performs three additional functions.
Methods included from TagHelper
build_tag_values, #cdata_section, #content_tag, #escape_once, #tag, #token_list
Methods included from OutputSafetyHelper
#raw, #safe_join, #to_sentence
Methods included from CaptureHelper
#capture, #content_for, #content_for?, #provide, #with_output_buffer
Instance Method Details
#localize(object, **options) ⇒ Object Also known as: l
Delegates to I18n.localize
with no additional functionality.
See www.rubydoc.info/github/svenfuchs/i18n/master/I18n/Backend/Base:localize for more information.
116 117 118 |
# File 'lib/action_view/helpers/translation_helper.rb', line 116 def localize(object, **) I18n.localize(object, **) end |
#translate(key, **options) ⇒ Object 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 rendered as inline spans that:
-
Have a
translation-missing
class applied -
Contain the missing key as the value of the
title
attribute -
Have a titleized version of the last key segment as text
For example, the value returned for the missing translation key "blog.post.title"
will be:
Title
This allows for views to display rather reasonable strings while still giving developers a way to find missing translations.
If you would prefer missing translations to raise an error, you can opt out of span-wrapping behavior globally by setting ActionView::Base.raise_on_missing_translations = true
or individually by passing raise: true
as an option to translate
.
Second, if the key starts with a period translate
will scope the key by the current partial. Calling translate(".foo")
from the people/index.html.erb
template is equivalent to calling translate("people.index.foo")
. This makes it less repetitive to translate many keys within the same partial and provides a convention to scope keys consistently.
Third, the translation will be marked as html_safe
if the key has the suffix “_html” or the last element of the key is “html”. Calling translate("footer_html")
or translate("footer.html")
will return an HTML safe 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 and translators know which keys they can provide HTML values for.
To access the translated text along with the fully resolved translation key, translate
accepts a block:
<%= translate(".relative_key") do |translation, resolved_key| %>
<span title="<%= resolved_key %>"><%= translation %></span>
<% end %>
This enables annotate translated text to be aware of the scope it was resolved against.
70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
# File 'lib/action_view/helpers/translation_helper.rb', line 70 def translate(key, **) return key.map { |k| translate(k, **) } if key.is_a?(Array) key = key&.to_s unless key.is_a?(Symbol) alternatives = if .key?(:default) [:default].is_a?(Array) ? .delete(:default).compact : [.delete(:default)] end [:raise] = true if [:raise].nil? && ActionView::Base.raise_on_missing_translations default = MISSING_TRANSLATION translation = while key || alternatives.present? if alternatives.blank? && ![:raise].nil? default = NO_DEFAULT # let I18n handle missing translation end key = scope_key_by_partial(key) if html_safe_translation_key?(key) ||= () translated = I18n.translate(key, **, default: default) break html_safe_translation(translated) unless translated.equal?(MISSING_TRANSLATION) else translated = I18n.translate(key, **, default: default) break translated unless translated.equal?(MISSING_TRANSLATION) end break alternatives.first if alternatives.present? && !alternatives.first.is_a?(Symbol) first_key ||= key key = alternatives&.shift end if key.nil? && !first_key.nil? translation = missing_translation(first_key, ) key = first_key end block_given? ? yield(translation, key) : translation end |