Spec-Zone.ru › Ruby on Rails 5.2

модуль ActionView::Helpers::TranslationHelper

Включенные модули:
ActionView::Helpers::TagHelper

Публичные методы экземпляра

l(*args)
Псевдоним для: localize
localize(*args) Показать исходный код
# File actionview/lib/action_view/helpers/translation_helper.rb, line 118
def localize(*args)
  I18n.localize(*args)
end

Делегирует к I18n.localize без дополнительной функциональности.

См. rubydoc.info/github/svenfuchs/i18n/master/I18n/Backend/Base:localize для получения дополнительной информации.

Также является псевдонимом для: l
t(key, options = {})
Псевдоним для: translate
translate(key, options = {}) Показать исходный код
# File actionview/lib/action_view/helpers/translation_helper.rb, line 60
def translate(key, options = {})
  options = options.dup
  has_default = options.has_key?(:default)
  remaining_defaults = Array(options.delete(:default)).compact

  if has_default && !remaining_defaults.first.kind_of?(Symbol)
    options[: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 options[:raise] == false
    raise_error = false
    i18n_raise = false
  else
    raise_error = options[:raise] || ActionView::Base.raise_on_missing_translations
    i18n_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.merge(raise: i18n_raise))

    translation.respond_to?(:html_safe) ? translation.html_safe : translation
  else
    I18n.translate(scope_key_by_partial(key), options.merge(raise: i18n_raise))
  end
rescue I18n::MissingTranslationData => e
  if remaining_defaults.present?
    translate remaining_defaults.shift, options.merge(default: remaining_defaults)
  else
    raise e if raise_error

    keys = I18n.normalize_keys(e.locale, e.key, e.options[:scope])
    title = "translation missing: #{keys.join('.')}".dup

    interpolations = options.except(:default, :scope)
    if interpolations.any?
      title << ", " << interpolations.map { |k, v| "#{k}: #{ERB::Util.html_escape(v)}" }.join(", ")
    end

    return title unless ActionView::Base.debug_missing_translation

    content_tag("span", keys.last.to_s.titleize, class: "translation_missing", title: title)
  end
end

Делегирует к I18n#translate, но также выполняет три дополнительных функции.

Во-первых, он гарантирует, что любые выброшенные MissingTranslation сообщения будут отображаться как встроенные span, которые:

  • Имеют класс translation-missing

  • Содержат отсутствующий ключ в качестве значения атрибута title

  • Имеют титл-версию последнего сегмента ключа в качестве текста

Например, значение, возвращённое для отсутствующего ключа перевода "blog.post.title", будет:

<span
  class="translation_missing"
  title="translation missing: en.blog.post.title">Title</span>

Это позволяет представлениям отображать достаточно осмысленные строки, одновременно предоставляя разработчикам возможность найти отсутствующие переводы.

Если вы предпочитаете, чтобы отсутствующие переводы генерировали ошибку, вы можете отказаться от поведения обертки span глобально, установив ActionView::Base.raise_on_missing_translations = true, или индивидуально, передав raise: true в качестве параметра к translate.

Во-вторых, если ключ начинается с точки translate, ключ будет отнесён к текущей части. Вызов translate(".foo") из шаблона people/index.html.erb эквивалентен вызову translate("people.index.foo"). Это уменьшает повторение при переводе множества ключей в одной части и предоставляет соглашение для последовательного определения областей действия ключей.

В-третьих, перевод будет помечен как html_safe, если ключ имеет суффикс «_html» или последним элементом ключа является «html». Вызов translate("footer_html") или translate("footer.html") вернёт строку, безопасную для HTML, которая не будет экранирована другими методами-помощниками HTML. Это соглашение об именовании помогает идентифицировать переводы, включающие теги HTML, чтобы вы знали, какого рода вывод ожидать, когда вы вызываете translate в шаблоне, и переводчики знали, какие ключи могут содержать HTML-значения.

Также является псевдонимом для: t

© 2004–2018 David Heinemeier Hansson
Licensed under the MIT License.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API