added the format_babel method to show the units as translated in babel
This commit is contained in:
parent
22765be156
commit
7b6616ce55
@ -13,6 +13,8 @@ from __future__ import division, unicode_literals, print_function, absolute_impo
|
||||
|
||||
import re
|
||||
|
||||
from .babel_units import babel_units, babel_forms
|
||||
|
||||
__JOIN_REG_EXP = re.compile("\{\d*\}")
|
||||
|
||||
|
||||
@ -100,7 +102,8 @@ _FORMATS = {
|
||||
|
||||
def formatter(items, as_ratio=True, single_denominator=False,
|
||||
product_fmt=' * ', division_fmt=' / ', power_fmt='{0} ** {1}',
|
||||
parentheses_fmt='({0})', exp_call=lambda x: '{0:n}'.format(x)):
|
||||
parentheses_fmt='({0})', exp_call=lambda x: '{0:n}'.format(x),
|
||||
locale=None, form='long', plural_form='one'):
|
||||
"""Format a list of (name, exponent) pairs.
|
||||
|
||||
:param items: a list of (name, exponent) pairs.
|
||||
@ -126,6 +129,24 @@ def formatter(items, as_ratio=True, single_denominator=False,
|
||||
pos_terms, neg_terms = [], []
|
||||
|
||||
for key, value in sorted(items):
|
||||
if locale and form and plural_form:
|
||||
_key = babel_units.get(key)
|
||||
if _key:
|
||||
patterns = locale.unit_patterns
|
||||
for _form in [form] + babel_forms:
|
||||
pattern_key = _key + ':' + _form
|
||||
if pattern_key in patterns:
|
||||
plural = plural_form
|
||||
if value <= 0:
|
||||
plural = 'one'
|
||||
pattern = patterns[pattern_key][plural]
|
||||
key = pattern.replace('{0}', '').strip()
|
||||
break
|
||||
per_form = 'compound:per:' + form
|
||||
if per_form in patterns:
|
||||
division_fmt = patterns[per_form]
|
||||
power_fmt = '{0}{1}'
|
||||
exp_call = _pretty_fmt_exponent
|
||||
if value == 1:
|
||||
pos_terms.append(key)
|
||||
elif value > 0:
|
||||
@ -177,12 +198,13 @@ def _parse_spec(spec):
|
||||
return result
|
||||
|
||||
|
||||
def format_unit(unit, spec):
|
||||
def format_unit(unit, spec, **kwspec):
|
||||
if not unit:
|
||||
return 'dimensionless'
|
||||
|
||||
spec = _parse_spec(spec)
|
||||
fmt = _FORMATS[spec]
|
||||
fmt = dict(_FORMATS[spec])
|
||||
fmt.update(kwspec)
|
||||
|
||||
result = formatter(unit.items(), **fmt)
|
||||
if spec == 'L':
|
||||
|
@ -141,6 +141,21 @@ class _Quantity(SharedRegistryObject):
|
||||
format(obj.magnitude, remove_custom_flags(spec)),
|
||||
format(obj.units, spec)).replace('\n', '')
|
||||
|
||||
def format_babel(self, spec='', **kwspec):
|
||||
spec = spec or self.default_format
|
||||
|
||||
# standard cases
|
||||
if '#' in spec:
|
||||
spec = spec.replace('#', '')
|
||||
obj = self.to_compact()
|
||||
else:
|
||||
obj = self
|
||||
kwspec = dict(kwspec)
|
||||
kwspec['plural_form'] = kwspec['locale'].plural_form(obj.magnitude)
|
||||
return '{0} {1}'.format(
|
||||
format(obj.magnitude, remove_custom_flags(spec)),
|
||||
obj.units.format_babel(spec, **kwspec)).replace('\n', '')
|
||||
|
||||
# IPython related code
|
||||
def _repr_html_(self):
|
||||
return self.__format__('H')
|
||||
|
15
pint/unit.py
15
pint/unit.py
@ -111,6 +111,21 @@ class _Unit(SharedRegistryObject):
|
||||
|
||||
return '%s' % (format(units, spec))
|
||||
|
||||
def format_babel(self, spec='', **kwspec):
|
||||
spec = spec or self.default_format
|
||||
|
||||
if '~' in spec:
|
||||
if self.dimensionless:
|
||||
return ''
|
||||
units = UnitsContainer(dict((self._REGISTRY._get_symbol(key),
|
||||
value)
|
||||
for key, value in self._units.items()))
|
||||
spec = spec.replace('~', '')
|
||||
else:
|
||||
units = self._units
|
||||
|
||||
return '%s' % (units.format_babel(spec, **kwspec))
|
||||
|
||||
# IPython related code
|
||||
def _repr_html_(self):
|
||||
return self.__format__('H')
|
||||
|
@ -325,6 +325,9 @@ class UnitsContainer(Mapping):
|
||||
def __format__(self, spec):
|
||||
return format_unit(self, spec)
|
||||
|
||||
def format_babel(self, spec, **kwspec):
|
||||
return format_unit(self, spec, **kwspec)
|
||||
|
||||
def __copy__(self):
|
||||
return UnitsContainer(self._d)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user