Spec-Zone.ru › Ruby on Rails 5.1

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

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

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

l(*args)
Псевдоним для: localize
localize(*args) Показать исходный код
# File actionview/lib/action_view/helpers/translation_helper.rb, line 117
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 59
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('.')}"

    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, чтобы вы знали, какой результат ожидать при вызове перевода в шаблоне, и переводчики знают, какие ключи могут содержать HTML-значения.

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

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

Spec-Zone.ru

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