Sha256: 84dc83e359de32562203031297b408942fbd5c9158a61e09887baa1941dc4962

Contents?: true

Size: 1.45 KB

Versions: 24

Compression:

Stored size: 1.45 KB

Contents

# frozen_string_literal: true

module ActiveSupport
  module HtmlSafeTranslation # :nodoc:
    extend self

    def translate(key, **options)
      if html_safe_translation_key?(key)
        html_safe_options = html_escape_translation_options(options)

        exception = false

        exception_handler = ->(*args) do
          exception = true
          I18n.exception_handler.call(*args)
        end

        translation = I18n.translate(key, **html_safe_options, exception_handler: exception_handler)

        if exception
          translation
        else
          html_safe_translation(translation)
        end
      else
        I18n.translate(key, **options)
      end
    end

    def html_safe_translation_key?(key)
      /(?:_|\b)html\z/.match?(key)
    end

    private
      def html_escape_translation_options(options)
        options.each do |name, value|
          unless i18n_option?(name) || (name == :count && value.is_a?(Numeric))
            options[name] = ERB::Util.html_escape(value.to_s)
          end
        end
      end

      def i18n_option?(name)
        (@i18n_option_names ||= I18n::RESERVED_KEYS.to_set).include?(name)
      end


      def html_safe_translation(translation)
        if translation.respond_to?(:map)
          translation.map { |element| element.respond_to?(:html_safe) ? element.html_safe : element }
        else
          translation.respond_to?(:html_safe) ? translation.html_safe : translation
        end
      end
  end
end

Version data entries

24 entries across 24 versions & 3 rubygems

Version Path
tailscale_middleware-0.0.3 vendor/cache/ruby/3.4.0/gems/activesupport-8.0.1/lib/active_support/html_safe_translation.rb
activesupport-8.0.1 lib/active_support/html_safe_translation.rb
activesupport-8.0.0.1 lib/active_support/html_safe_translation.rb
activesupport-7.2.2.1 lib/active_support/html_safe_translation.rb
activesupport-8.0.0 lib/active_support/html_safe_translation.rb
activesupport-7.2.2 lib/active_support/html_safe_translation.rb
activesupport-8.0.0.rc2 lib/active_support/html_safe_translation.rb
activesupport-7.2.1.2 lib/active_support/html_safe_translation.rb
activesupport-8.0.0.rc1 lib/active_support/html_safe_translation.rb
activesupport-7.2.1.1 lib/active_support/html_safe_translation.rb
activesupport-8.0.0.beta1 lib/active_support/html_safe_translation.rb
omg-activesupport-8.0.0.alpha9 lib/active_support/html_safe_translation.rb
omg-activesupport-8.0.0.alpha8 lib/active_support/html_safe_translation.rb
omg-activesupport-8.0.0.alpha7 lib/active_support/html_safe_translation.rb
omg-activesupport-8.0.0.alpha4 lib/active_support/html_safe_translation.rb
omg-activesupport-8.0.0.alpha3 lib/active_support/html_safe_translation.rb
omg-activesupport-8.0.0.alpha2 lib/active_support/html_safe_translation.rb
omg-activesupport-8.0.0.alpha1 lib/active_support/html_safe_translation.rb
activesupport-7.2.1 lib/active_support/html_safe_translation.rb
activesupport-7.2.0 lib/active_support/html_safe_translation.rb