跳至内容 跳至搜索

Action View 翻译助手

方法
L
T
包含的模块

属性

[RW] raise_on_missing_translations

实例公共方法

l(object, **options)

别名:localize

localize(object, **options)

委派给I18n.localize,没有额外的功能。

查看www.rubydoc.info/gems/i18n/I18n/Backend/Base:localize了解更多信息。

也称为:l
# File actionview/lib/action_view/helpers/translation_helper.rb, line 116
def localize(object, **options)
  I18n.localize(object, **options)
end

t(key, **options)

别名:translate

translate(key, **options)

委派给I18n#translate,但也执行三个额外的功能。

首先,它将确保任何抛出的MissingTranslation消息将被渲染为内联跨度,

  • 应用了translation-missing

  • 包含丢失的键作为title属性的值

  • 具有最后一个键段的标题化版本作为文本

例如,对于丢失的翻译键"blog.post.title"返回的值将是

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

这允许视图显示相当合理的字符串,同时仍然为开发人员提供一种查找丢失的翻译的方法。

如果你希望丢失的翻译引发错误,可以通过全局设置config.i18n.raise_on_missing_translations = true或单独传递raise: true作为选项来translate来选择退出跨度包装行为。

其次,如果键以句点translate开头,将通过当前的局部变量对键进行作用域。从people/index.html.erb模板调用translate(".foo")等同于调用translate("people.index.foo")。这使得在同一个局部变量中翻译许多键不那么重复,并提供了一种惯例来一致地对键进行作用域。

第三,如果键带有后缀“_html”或键的最后一个元素是“html”,翻译将被标记为html_safe。调用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
# 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