1 require 'action_view/helpers/tag_helper'
5 module TranslationHelper
6 # Delegates to I18n#translate but also performs two additional functions. First, it'll catch MissingTranslationData exceptions
7 # and turn them into inline spans that contains the missing key, such that you can see in a view what is missing where.
9 # 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
10 # people/index.html.erb template, you'll actually be calling I18n.translate("people.index.foo"). This makes it less repetitive
11 # to translate many keys within the same partials and gives you a simple framework for scoping them consistently. If you don't
12 # prepend the key with a period, nothing is converted.
13 def translate(key
, options
= {})
14 options
[:raise] = true
15 I18n
.translate(scope_key_by_partial(key
), options
)
16 rescue I18n
::MissingTranslationData => e
17 keys
= I18n
.send(:normalize_translation_keys, e
.locale
, e
.key
, e
.options
[:scope])
18 content_tag('span', keys
.join(', '), :class => 'translation_missing')
22 # Delegates to I18n.localize with no additional functionality.
30 def scope_key_by_partial(key
)
31 if key
.to_s
.first
== "."
32 template
.path_without_format_and_extension
.gsub(%r
{/_
?}, ".") + key
.to_s