Skip to content

Commit aca7663

Browse files
kajteakx
andauthored
Add support for non-Latin numbering systems for number symbols (#1036)
- Import number symbols for available numbering systems from cldr data - Add default_numbering_system and other_numbering_systems properties for Locale - Add numbering_system argument to relevant number formatting fuctions and use number symbols based on the given numbering system Refs #446 Co-authored-by: Aarni Koskela <[email protected]>
1 parent d4e65e2 commit aca7663

File tree

9 files changed

+503
-82
lines changed

9 files changed

+503
-82
lines changed

babel/core.py

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ class Locale:
149149
`Locale` objects provide access to a collection of locale data, such as
150150
territory and language names, number and date format patterns, and more:
151151
152-
>>> locale.number_symbols['decimal']
152+
>>> locale.number_symbols['latn']['decimal']
153153
u'.'
154154
155155
If a locale is requested for which no locale data is available, an
@@ -625,16 +625,42 @@ def currency_symbols(self) -> localedata.LocaleDataDict:
625625

626626
@property
627627
def number_symbols(self) -> localedata.LocaleDataDict:
628-
"""Symbols used in number formatting.
628+
"""Symbols used in number formatting by number system.
629629
630630
.. note:: The format of the value returned may change between
631631
Babel versions.
632632
633-
>>> Locale('fr', 'FR').number_symbols['decimal']
633+
>>> Locale('fr', 'FR').number_symbols["latn"]['decimal']
634634
u','
635+
>>> Locale('fa', 'IR').number_symbols["arabext"]['decimal']
636+
u'٫'
637+
>>> Locale('fa', 'IR').number_symbols["latn"]['decimal']
638+
u'.'
635639
"""
636640
return self._data['number_symbols']
637641

642+
@property
643+
def other_numbering_systems(self) -> localedata.LocaleDataDict:
644+
"""
645+
Mapping of other numbering systems available for the locale.
646+
See: https://www.unicode.org/reports/tr35/tr35-numbers.html#otherNumberingSystems
647+
648+
>>> Locale('el', 'GR').other_numbering_systems['traditional']
649+
u'grek'
650+
651+
.. note:: The format of the value returned may change between
652+
Babel versions.
653+
"""
654+
return self._data['numbering_systems']
655+
656+
@property
657+
def default_numbering_system(self) -> str:
658+
"""The default numbering system used by the locale.
659+
>>> Locale('el', 'GR').default_numbering_system
660+
u'latn'
661+
"""
662+
return self._data['default_numbering_system']
663+
638664
@property
639665
def decimal_formats(self) -> localedata.LocaleDataDict:
640666
"""Locale patterns for decimal number formatting.

0 commit comments

Comments
 (0)