def translate_plural_message(klass, arg1, arg2, arg3 = "|", arg4 = "|")
if arg1.kind_of?(Array)
msgid = arg1[0]
msgid_plural = arg1[1]
n = arg2
if arg3 and arg3.kind_of? Numeric
raise ArgumentError, _("3rd parmeter is wrong: value = %{number}") % {:number => arg3}
end
div = arg3
else
msgid = arg1
msgid_plural = arg2
n = arg3
div = arg4
end
key = [Locale.current, klass, msgid, msgid_plural, div].hash
msgs = @@plural_message_cache[key]
unless (msgs and @@cached)
msgs = nil
each_textdomains(klass) do |textdomain, lang|
msgs = textdomain.translate_plural_message(lang, msgid, msgid_plural)
break if msgs
end
msgs = [[msgid, msgid_plural], TextDomain::DEFAULT_PLURAL_CALC] unless msgs
msgstrs = msgs[0]
if div and msgstrs[0] == msgid and index = msgstrs[0].rindex(div)
msgstrs[0] = msgstrs[0][(index + 1)..-1]
end
@@plural_message_cache[key] = msgs
end
msgstrs = msgs[0]
plural = msgs[1].call(n)
return msgstrs[plural] if plural.kind_of?(Numeric)
return plural ? msgstrs[1] : msgstrs[0]
end