| 120 | original_kwargs = kwargs.copy() |
| 121 | |
| 122 | class NumberAwareString(resultclass): |
| 123 | def __bool__(self): |
| 124 | return bool(kwargs["singular"]) |
| 125 | |
| 126 | def _get_number_value(self, values): |
| 127 | try: |
| 128 | return values[number] |
| 129 | except KeyError: |
| 130 | raise KeyError( |
| 131 | "Your dictionary lacks key '%s'. Please provide " |
| 132 | "it, because it is required to determine whether " |
| 133 | "string is singular or plural." % number |
| 134 | ) |
| 135 | |
| 136 | def _translate(self, number_value): |
| 137 | kwargs["number"] = number_value |
| 138 | return func(**kwargs) |
| 139 | |
| 140 | def format(self, *args, **kwargs): |
| 141 | number_value = ( |
| 142 | self._get_number_value(kwargs) if kwargs and number else args[0] |
| 143 | ) |
| 144 | return self._translate(number_value).format(*args, **kwargs) |
| 145 | |
| 146 | def __mod__(self, rhs): |
| 147 | if isinstance(rhs, dict) and number: |
| 148 | number_value = self._get_number_value(rhs) |
| 149 | else: |
| 150 | number_value = rhs |
| 151 | translated = self._translate(number_value) |
| 152 | try: |
| 153 | translated %= rhs |
| 154 | except TypeError: |
| 155 | # String doesn't contain a placeholder for the number. |
| 156 | pass |
| 157 | return translated |
| 158 | |
| 159 | proxy = lazy(lambda **kwargs: NumberAwareString(), NumberAwareString)(**kwargs) |
| 160 | proxy.__reduce__ = lambda: ( |