class String

the meaning of the msgids using “named argument” instead of %s/%d style.
String#% method which accept “named argument”. The translator can know
Extension for String class. This feature is included in Ruby 1.9 or later but not occur TypeError.

def %(args)

# => "10, 43.3"
"%d, %.1f" % { :integer => 10, :float => 43.4 }

Example:

according to the formatting instruction appended to the closing >.
it will interpret the hash values as named arguments and format the value
When you pass a Hash as an argument and specify placeholders with %d

* Using a Hash as an argument and formatted, named placeholders.

# => "Masao Mutoh"
"%{firstname}, %{lastname}" % {:firstname => "Masao", :lastname => "Mutoh"}

Example:

it will interpret the hash values as named arguments.
When you pass a Hash as an argument and specify placeholders with %{foo}

* Using a Hash as an argument and unformatted, named placeholders.

# => "1 message"
"%d %s" % [1, "message"]

Example:

more details about the format string.
This is the default behaviour of the String class. See Kernel#sprintf for

* Using a single argument or Array of arguments.

There are three ways to use it:

defines.
the given arguments to the string according to the formats the string
result of applying it to the given arguments. In other words it interpolates
% uses self (i.e. the String) as a format specification and returns the
def %(args)
  if args.kind_of?(Hash)
    dup.gsub(INTERPOLATION_PATTERN_WITH_ESCAPE) do |match|
      if match == '%%'
        '%'
      else
        key = ($1 || $2).to_sym
        raise KeyError unless args.has_key?(key)
        $3 ? sprintf("%#{$3}", args[key]) : args[key]
      end
    end
  elsif self =~ INTERPOLATION_PATTERN
    raise ArgumentError.new('one hash required')
  else
    result = gsub(/%([{<])/, '%%\1')
    result.send :'interpolate_without_ruby_19_syntax', args
  end
end