модуль ActionView::Helpers::TranslationHelper
Атрибуты
Публичные методы экземпляров
# 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 для получения дополнительной информации.
# 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.equal?(MISSING_TRANSLATION)
if alternatives.present? && !alternatives.first.is_a?(Symbol)
break alternatives.first && I18n.translate(**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, будет применён контекст ключа по текущей части. Вызов 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-значения.
Чтобы получить доступ к переведённому тексту вместе с полностью разрешенным ключом перевода, translate принимает блок:
<%= translate(".relative_key") do |translation, resolved_key| %>
<span title="<%= resolved_key %>"><%= translation %></span>
<% end %> Это позволяет аннотировать переведённый текст, зная контекст, в котором он был разрешён.
© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.