Spec-Zone.ru › Ruby on Rails 8.1

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

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

Вспомогательные методы перевода Action View

Атрибуты

raise_on_missing_translations [RW]

Общедоступные методы экземпляра

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/gems/i18n/I18n/Backend/Base:localize.

Также имеет псевдоним: l
t (key, **options)
Псевдоним для: translate
translate (key, **options) { |translation, key| ... } Показать исходный код
# File actionview/lib/action_view/helpers/translation_helper.rb, line 73
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? && TranslationHelper.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)

    translated = ActiveSupport::HtmlSafeTranslation.translate(key, **options, default: default)

    break translated unless translated == MISSING_TRANSLATION

    if alternatives.present? && !alternatives.first.is_a?(Symbol)
      break alternatives.first && I18n.translate(nil, **options, default: alternatives)
    end

    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 будут отображаться как встроенные элементы span, которые:

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

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

  • Отображают текст в виде заглавного варианта последнего сегмента ключа

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

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

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

Если вы хотите, чтобы при отсутствии переводов возникала ошибка, можно отключить поведение с оборачиванием в span глобально, задав config.i18n.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–2021 David Heinemeier Hansson
Licensed under the MIT License.

Spec-Zone.ru

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