diff options
author | Éric Araujo <merwok@netwok.org> | 2010-12-03 19:41:00 (GMT) |
---|---|---|
committer | Éric Araujo <merwok@netwok.org> | 2010-12-03 19:41:00 (GMT) |
commit | bb48a8b59a8e8573f6ba2761c09fc1ad271d8068 (patch) | |
tree | b006d8f624e0aa184baac82586969cbc2b6bf29f /Lib | |
parent | add7cbfb0527aaa15879f5ea9aaf2c8b322f0868 (diff) | |
download | cpython-bb48a8b59a8e8573f6ba2761c09fc1ad271d8068.zip cpython-bb48a8b59a8e8573f6ba2761c09fc1ad271d8068.tar.gz cpython-bb48a8b59a8e8573f6ba2761c09fc1ad271d8068.tar.bz2 |
Allow translators to reorder placeholders in localizable messages from
argparse (#10528).
There is no unit test; I checked with xgettext that no more warnings
were emitted. Steven approved the change.
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/argparse.py | 34 |
1 files changed, 20 insertions, 14 deletions
diff --git a/Lib/argparse.py b/Lib/argparse.py index 63713c6..747586d 100644 --- a/Lib/argparse.py +++ b/Lib/argparse.py @@ -1079,8 +1079,9 @@ class _SubParsersAction(Action): try: parser = self._name_parser_map[parser_name] except KeyError: - tup = parser_name, ', '.join(self._name_parser_map) - msg = _('unknown parser %r (choices: %s)') % tup + args = {'parser_name': parser_name, + 'choices': ', '.join(self._name_parser_map)} + msg = _('unknown parser %(parser_name)r (choices: %(choices)s)') % args raise ArgumentError(self, msg) # parse all the remaining options into the namespace @@ -1380,10 +1381,11 @@ class _ActionsContainer(object): for option_string in args: # error on strings that don't start with an appropriate prefix if not option_string[0] in self.prefix_chars: - msg = _('invalid option string %r: ' - 'must start with a character %r') - tup = option_string, self.prefix_chars - raise ValueError(msg % tup) + args = {'option': option_string, + 'prefix_chars': self.prefix_chars} + msg = _('invalid option string %(option)r: ' + 'must start with a character %(prefix_chars)r') + raise ValueError(msg % args) # strings starting with two prefix characters are long options option_strings.append(option_string) @@ -2049,8 +2051,9 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer): if len(option_tuples) > 1: options = ', '.join([option_string for action, option_string, explicit_arg in option_tuples]) - tup = arg_string, options - self.error(_('ambiguous option: %s could match %s') % tup) + args = {'option': arg_string, 'matches': options} + msg = _('ambiguous option: %(option)s could match %(matches)s') + self.error(msg % args) # if exactly one action matched, this segmentation is good, # so return the parsed action @@ -2229,8 +2232,9 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer): # TypeErrors or ValueErrors also indicate errors except (TypeError, ValueError): name = getattr(action.type, '__name__', repr(action.type)) - msg = _('invalid %s value: %r') - raise ArgumentError(action, msg % (name, arg_string)) + args = {'type': name, 'value': arg_string} + msg = _('invalid %(type)s value: %(value)r') + raise ArgumentError(action, msg % args) # return the converted value return result @@ -2238,9 +2242,10 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer): def _check_value(self, action, value): # converted value must be one of the choices (if specified) if action.choices is not None and value not in action.choices: - tup = value, ', '.join(map(repr, action.choices)) - msg = _('invalid choice: %r (choose from %s)') % tup - raise ArgumentError(action, msg) + args = {'value': value, + 'choices': ', '.join(map(repr, action.choices))} + msg = _('invalid choice: %(value)r (choose from %(choices)s)') + raise ArgumentError(action, msg % args) # ======================= # Help-formatting methods @@ -2332,4 +2337,5 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer): should either exit or raise an exception. """ self.print_usage(_sys.stderr) - self.exit(2, _('%s: error: %s\n') % (self.prog, message)) + args = {'prog': self.prog, 'message': message} + self.exit(2, _('%(prog)s: error: %(message)s\n') % args) |