Module: ActionView::Helpers::TranslationHelper
- Includes:
- TagHelper
- Included in:
- ActionView::Helpers
- Defined in:
- lib/action_view/helpers/translation_helper.rb
Constant Summary
Constants included from TagHelper
ActionView::Helpers::TagHelper::BOOLEAN_ATTRIBUTES, ActionView::Helpers::TagHelper::PRE_CONTENT_STRINGS, ActionView::Helpers::TagHelper::TAG_PREFIXES
Instance Method Summary collapse
-
#localize(*args) ⇒ 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
#cdata_section, #content_tag, #escape_once, #tag
Methods included from OutputSafetyHelper
Methods included from CaptureHelper
#capture, #content_for, #content_for?, #provide, #with_output_buffer
Instance Method Details
#localize(*args) ⇒ Object 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.
87 88 89 |
# File 'lib/action_view/helpers/translation_helper.rb', line 87 def localize(*args) I18n.localize(*args) 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 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.
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/action_view/helpers/translation_helper.rb', line 38 def translate(key, = {}) = .dup has_default = .has_key?(:default) remaining_defaults = Array(.delete(:default)).compact if has_default && !remaining_defaults.first.kind_of?(Symbol) [: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 [:raise] == false || (.key?(:rescue_format) && [:rescue_format].nil?) raise_error = false i18n_raise = false else raise_error = [:raise] || [:rescue_format] || ActionView::Base.raise_on_missing_translations i18n_raise = true end if html_safe_translation_key?(key) = .dup .except(*I18n::RESERVED_KEYS).each do |name, value| unless name == :count && value.is_a?(Numeric) [name] = ERB::Util.html_escape(value.to_s) end end translation = I18n.translate(scope_key_by_partial(key), .merge(raise: i18n_raise)) translation.respond_to?(:html_safe) ? translation.html_safe : translation else I18n.translate(scope_key_by_partial(key), .merge(raise: i18n_raise)) end rescue I18n::MissingTranslationData => e if remaining_defaults.present? translate remaining_defaults.shift, .merge(default: remaining_defaults) else raise e if raise_error keys = I18n.normalize_keys(e.locale, e.key, e.[:scope]) content_tag('span', keys.last.to_s.titleize, :class => 'translation_missing', :title => "translation missing: #{keys.join('.')}") end end |