Action View 翻译帮助器
属性
[RW] | raise_on_missing_translations |
实例公共方法
localize(object, **options) 链接
委托给 `I18n.localize`,不具有其他功能。
有关更多信息,请参阅 www.rubydoc.info/gems/i18n/I18n/Backend/Base:localize。
来源:显示 | 在 GitHub 上
# File actionview/lib/action_view/helpers/translation_helper.rb, line 116 def localize(object, **options) I18n.localize(object, **options) end
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 %>
这可使注释翻译后的文本了解其解析范围。
来源:显示 | 在 GitHub 上
# 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