# File lib/active_support/vendor/i18n-0.3.7/i18n/backend/base.rb, line 179
        def interpolate(locale, string, values = {})
          return string unless string.is_a?(::String) && !values.empty?

          preserve_encoding(string) do
            s = string.gsub(INTERPOLATION_SYNTAX_PATTERN) do
              escaped, key = $1, $2.to_sym
              if escaped
                "{{#{key}}}"
              elsif RESERVED_KEYS.include?(key)
                raise ReservedInterpolationKey.new(key, string)
              else
                "%{#{key}}"
              end
            end

            values.each do |key, value|
              value = value.call(values) if interpolate_lambda?(value, s, key)
              value = value.to_s unless value.is_a?(::String)
              values[key] = value
            end

            s % values
          end

        rescue KeyError => e
          raise MissingInterpolationArgument.new(values, string)
        end