跳至內容 跳至搜尋

Action View 翻譯 Helper

方法
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` 類別

  • 包含缺少的 key,作為 `title` 屬性的值

  • 標題化最後一個 key 區段做為文字

例如,對應缺少翻譯 key `"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`。

其次,如果 key 以句點開頭,`translate` 會根據目前的偏好設定 key 的範圍。從 `people/index.html.erb` 範本呼叫 `translate(".foo")` 等同於呼叫 `translate("people.index.foo")`。在同一個偏好中翻譯許多 key 會減少重複性,並提供慣例來一致設定 key 的範圍。

第三,如果 key 有「_html」字尾,或 key 的最後一個元素是「html」,翻譯會標示為 `html_safe`。呼叫 `translate("footer_html")` 或 `translate("footer.html")` 會傳回不會被其他 HTML Helper 方法轉換的 HTML 安全字串。這種命名慣例有助於辨識包含 HTML 標籤的翻譯,讓你可以在範本中呼叫翻譯時知道預期的輸出樣式,而翻譯者會知道他們可以提供哪些 key 的 HTML 值。

若要存取已翻譯文字及完整解析的翻譯 key,`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