Module: AbstractController::Translation

Defined in:
lib/abstract_controller/translation.rb

Instance Method Summary collapse

Instance Method Details

#localize(object, **options) ⇒ Object Also known as: l

Delegates to I18n.localize.



51
52
53
# File 'lib/abstract_controller/translation.rb', line 51

def localize(object, **options)
  I18n.localize(object, **options)
end

#translate(key, **options) ⇒ Object Also known as: t

Delegates to I18n.translate.

When the given key starts with a period, it will be scoped by the current controller and action. So if you call translate(".foo") from PeopleController#index, it will convert the call to I18n.translate("people.index.foo"). This makes it less repetitive to translate many keys within the same controller / action and gives you a simple framework for scoping them consistently.



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/abstract_controller/translation.rb', line 17

def translate(key, **options)
  if key&.start_with?(".")
    path = controller_path.tr("/", ".")
    defaults = [:"#{path}#{key}"]
    defaults << options[:default] if options[:default]
    options[:default] = defaults.flatten
    key = "#{path}.#{action_name}#{key}"
  end

  i18n_raise = options.fetch(:raise, self.raise_on_missing_translations)

  if options[:default]
    options[:default] = [options[:default]] unless options[:default].is_a?(Array)
    options[:default] = options[:default].map do |value|
      value.is_a?(String) ? ERB::Util.html_escape(value) : value
    end
  end

  unless i18n_raise
    options[:default] = [] unless options[:default]
    options[:default] << MISSING_TRANSLATION
  end

  result = ActiveSupport::HtmlSafeTranslation.translate(key, **options, raise: i18n_raise)

  if result == MISSING_TRANSLATION
    +"translation missing: #{key}"
  else
    result
  end
end