Attributes
| [RW] | raise_on_missing_translations |
实例公共方法
localize(object, **options) Link
委托给 I18n.localize,没有额外的功能。
有关更多信息,请参阅 www.rubydoc.info/gems/i18n/I18n/Backend/Base:localize。
translate(key, **options) Link
委托给 I18n#translate,但还执行三个附加功能。
首先,它将确保任何抛出的 MissingTranslation 消息都将呈现为内联 span,这些 span
-
带有
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 来单独选择退出 span 包装行为。
其次,如果 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 安全字符串,该字符串不会被其他 HTML 助手方法转义。这种命名约定有助于识别包含 HTML 标签的翻译,以便您知道在模板中调用 translate 时会期望什么样的输出,并且翻译者知道他们可以为哪些 key 提供 HTML 值。
为了访问翻译文本以及完全解析的翻译 key,translate 接受一个块
<%= translate(".relative_key") do |translation, resolved_key| %>
<span title="<%= resolved_key %>"><%= translation %></span>
<% end %>
这使得注解翻译文本能够感知它解析的范围。
# 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