summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
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)
commitbb48a8b59a8e8573f6ba2761c09fc1ad271d8068 (patch)
treeb006d8f624e0aa184baac82586969cbc2b6bf29f /Lib
parentadd7cbfb0527aaa15879f5ea9aaf2c8b322f0868 (diff)
downloadcpython-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.py34
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)