Class: String
- Inherits:
-
Object
- Object
- String
- Defined in:
- lib/i18n/string.rb
Overview
Extension for String class. This feature is included in Ruby 1.9 or later but not occur TypeError.
String#% method which accept “named argument”. The translator can know the meaning of the msgids using “named argument” instead of %s/%d style.
Constant Summary collapse
- INTERPOLATION_PATTERN =
Regexp.union( /%%/, /%\{(\w+)\}/, # matches placeholders like "%{foo}" /%<(\w+)>(.*?\d*\.?\d*[bBdiouxXeEfgGcps])/ # matches placeholders like "%<foo>.d" )
Instance Method Summary collapse
-
#%(args) ⇒ Object
% uses self (i.e. the String) as a format specification and returns the result of applying it to the given arguments.
-
#interpolate_without_ruby_19_syntax ⇒ Object
:nodoc:.
Instance Method Details
#%(args) ⇒ Object
% uses self (i.e. the String) as a format specification and returns the result of applying it to the given arguments. In other words it interpolates the given arguments to the string according to the formats the string defines.
There are three ways to use it:
-
Using a single argument or Array of arguments.
This is the default behaviour of the String class. See Kernel#sprintf for more details about the format string.
Example:
"%d %s" % [1, "message"] # => "1 message"
-
Using a Hash as an argument and unformatted, named placeholders.
When you pass a Hash as an argument and specify placeholders with %foo it will interpret the hash values as named arguments.
Example:
"%{firstname}, %{lastname}" % {:firstname => "Masao", :lastname => "Mutoh"} # => "Masao Mutoh"
-
Using a Hash as an argument and formatted, named placeholders.
When you pass a Hash as an argument and specify placeholders with %<foo>d it will interpret the hash values as named arguments and format the value according to the formatting instruction appended to the closing >.
Example:
"%<integer>d, %<float>.1f" % { :integer => 10, :float => 43.4 } # => "10, 43.3"
74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
# File 'lib/i18n/string.rb', line 74 def %(args) if args.kind_of?(Hash) dup.gsub(INTERPOLATION_PATTERN) 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 |
#interpolate_without_ruby_19_syntax ⇒ Object
:nodoc:
29 |
# File 'lib/i18n/string.rb', line 29 alias :interpolate_without_ruby_19_syntax :% |