module ActionView::Helpers::TranslationHelper
def translate(key, options = {})
naming convention helps to identify translations that include HTML tags so that
a safe HTML string that won't be escaped by other HTML helper methods. This
calling translate("footer_html") or translate("footer.html") will return
"_html" or the last element of the key is the word "html". For example,
Third, it'll mark the translation as safe HTML if the key has the suffix
nothing is converted.
for scoping them consistently. If you don't prepend the key with a period,
to translate many keys within the same partials and gives you a simple framework
I18n.translate("people.index.foo"). This makes it less repetitive
people/index.html.erb template, you'll actually be calling
with a period. So if you call translate(".foo") from the
Second, it'll scope the key by the current partial if the key starts
be easy to spot missing translations.
This way your views will display rather reasonable strings but it will still
Title.
E.g. the value returned for a missing translation key :"blog.post.title" will be
* a titleized version of the last key segment as a text.
* contain the missing key as a title attribute and
* have a "translation-missing" class set,
into inline spans that:
First, it will ensure that any thrown +MissingTranslation+ messages will be turned
Delegates to I18n#translate but also performs three additional functions.
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