Spec-Zone.ru › Ruby on Rails 6.0

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

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

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

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

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

См. www.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
  if options.has_key?(:default)
    remaining_defaults = Array.wrap(options.delete(:default)).compact
    options[:default] = remaining_defaults unless remaining_defaults.first.kind_of?(Symbol)
  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))
    if translation.respond_to?(:map)
      translation.map { |element| element.respond_to?(:html_safe) ? element.html_safe : element }
    else
      translation.respond_to?(:html_safe) ? translation.html_safe : translation
    end
  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('.')}"

    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 сообщения будут отображаться как inline-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–2019 David Heinemeier Hansson
Licensed under the MIT License.

Spec-Zone.ru

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