Spec-Zone.ru › Ruby on Rails 6.1

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

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

Открытые методы экземпляра

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

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

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

Также псевдоним для: l
t(key, **options)
Псевдоним для: translate
translate(key, **options) { |translation, key| ... } Показать исходный код
# File actionview/lib/action_view/helpers/translation_helper.rb, line 70
def translate(key, **options)
  return key.map { |k| translate(k, **options) } if key.is_a?(Array)
  key = key&.to_s unless key.is_a?(Symbol)

  alternatives = if options.key?(:default)
    options[:default].is_a?(Array) ? options.delete(:default).compact : [options.delete(:default)]
  end

  options[:raise] = true if options[:raise].nil? && ActionView::Base.raise_on_missing_translations
  default = MISSING_TRANSLATION

  translation = while key || alternatives.present?
    if alternatives.blank? && !options[:raise].nil?
      default = NO_DEFAULT # let I18n handle missing translation
    end

    key = scope_key_by_partial(key)

    if html_safe_translation_key?(key)
      html_safe_options ||= html_escape_translation_options(options)
      translated = I18n.translate(key, **html_safe_options, default: default)
      break html_safe_translation(translated) unless translated.equal?(MISSING_TRANSLATION)
    else
      translated = I18n.translate(key, **options, default: default)
      break translated unless translated.equal?(MISSING_TRANSLATION)
    end

    break alternatives.first if alternatives.present? && !alternatives.first.is_a?(Symbol)

    first_key ||= key
    key = alternatives&.shift
  end

  if key.nil? && !first_key.nil?
    translation = missing_translation(first_key, options)
    key = first_key
  end

  block_given? ? yield(translation, key) : translation
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, ключ будет ограничен текущим partial. Вызов translate(".foo") из шаблона people/index.html.erb эквивалентен вызову translate("people.index.foo"). Это делает менее повторяющимся перевод многих ключей в рамках одного partial и предоставляет соглашение для последовательного ограничения ключей.

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

Для доступа к переведённому тексту вместе с полностью разрешённым ключом перевода translate принимает блок:

<%= translate(".relative_key") do |translation, resolved_key| %>
  <span title="<%= resolved_key %>"><%= translation %></span>
<% end %>

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

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

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

Spec-Zone.ru

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