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.



47
48
49
# File 'lib/abstract_controller/translation.rb', line 47

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.



15
16
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
# File 'lib/abstract_controller/translation.rb', line 15

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

  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

  if options[:raise].nil?
    options[:default] = [] unless options[:default]
    options[:default] << MISSING_TRANSLATION
  end

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

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