def choose_plural_amount(amount, variants): """ Choose proper case depending on amount, for "N of M items" case @param amount: amount of objects @type amount: C{int} or C{long} @param variants: variants (forms) of object in such form: (1 object, 2 objects). @type variants: 2-element C{sequence} of C{unicode} or C{unicode} (two variants with delimeter ',') @return: proper variant @rtype: C{unicode} @raise L{pytils.err.InputParameterError}: input parameters' check failed (amount isn't C{int}, variants isn't C{sequence}) @raise ValueError: amount is negative @raise ValueError: variants' length lesser than 2 """ if isinstance(variants, unicode): variants = utils.split_values(variants) check_length(variants, 2) check_positive(amount) amount_str = str(amount) if amount == 1 or (amount_str[-1::] == "1" and amount_str[-2::] != "11"): variant = 0 else: variant = 1 return variants[variant]
def choose_plural(amount, variants): """ Choose proper case depending on amount @param amount: amount of objects @type amount: C{integer types} @param variants: variants (forms) of object in such form: (1 object, 2 objects, 5 objects). @type variants: 3-element C{sequence} of C{unicode} or C{unicode} (three variants with delimeter ',') @return: proper variant @rtype: C{unicode} @raise ValueError: variants' length lesser than 3 """ if isinstance(variants, six.text_type): variants = split_values(variants) check_length(variants, 3) amount = abs(amount) if amount % 10 == 1 and amount % 100 != 11: variant = 0 elif amount % 10 >= 2 and amount % 10 <= 4 and \ (amount % 100 < 10 or amount % 100 >= 20): variant = 1 else: variant = 2 return variants[variant]
def choose_plural(amount, variants): """ Choose proper case depending on amount @param amount: amount of objects @type amount: C{int} or C{long} @param variants: variants (forms) of object in such form: (1 object, 2 objects, 5 objects). @type variants: 3-element C{sequence} of C{unicode} or C{unicode} (three variants with delimeter ',') @return: proper variant @rtype: C{unicode} @raise L{pytils.err.InputParameterError}: input parameters' check failed (amount isn't C{int}, variants isn't C{sequence}) @raise ValueError: variants' length lesser than 3 """ if isinstance(variants, unicode): variants = utils.split_values(variants) check_length(variants, 3) amount = abs(amount) if amount % 10 == 1 and amount % 100 != 11: variant = 0 elif amount % 10 >= 2 and amount % 10 <= 4 and \ (amount % 100 < 10 or amount % 100 >= 20): variant = 1 else: variant = 2 return variants[variant]
def get_plural_for_decimal(decimal, variants, absence=None): if isinstance(variants, unicode): variants = utils.split_values(variants) utils.check_length(variants, 4) if int(decimal) == decimal: return u"%d %s   " % (decimal, choose_plural(int(decimal), variants[0:-1])) else: return u"%.2f %s" % (decimal, variants[-1])