Skip to content

Commit e73707f

Browse files
authored
Merge pull request #5 from django-ftl/currency-formatting-should-obey-format-specifiers
Make fluent_number obey format specifiers for currencies
2 parents 82066dd + 4dbf1b2 commit e73707f

File tree

3 files changed

+48
-1
lines changed

3 files changed

+48
-1
lines changed

CHANGELOG.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ fluent_compiler 0.3 (under development)
66

77
* Fixed test suite on Python 3.8
88
* Performance improvements
9+
* Made ``fluent_number`` format specifiers for currencies
910

1011
fluent_compiler 0.2 (2020-04-02)
1112
--------------------------------

src/fluent_compiler/types.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ def format(self, locale):
121121
else:
122122
base_pattern = locale.currency_formats['standard']
123123
pattern = self._apply_options(base_pattern)
124-
return pattern.apply(self, locale, currency=self.options.currency)
124+
return pattern.apply(self, locale, currency=self.options.currency, currency_digits=False)
125125

126126
def _apply_options(self, pattern):
127127
# We are essentially trying to copy the

tests/test_types.py

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,14 @@
1212
from fluent_compiler.types import FluentDateType, FluentNumber, fluent_date, fluent_number
1313

1414

15+
def currency(amount, *args, **kwargs):
16+
return fluent_number(amount,
17+
*args,
18+
currency='USD',
19+
style='currency',
20+
**kwargs)
21+
22+
1523
class TestFluentNumber(unittest.TestCase):
1624

1725
locale = Locale.parse('en_US')
@@ -143,6 +151,44 @@ def test_currency_display_name(self):
143151
self.assertEqual(cur_pos_name.format(es_GT),
144152
"dólares estadounidenses 123,456.78")
145153

154+
def test_currency_use_grouping(self):
155+
f1 = currency(123456.78, useGrouping=True)
156+
f2 = currency(123456.78, useGrouping=False)
157+
self.assertEqual(f1.format(self.locale), "$123,456.78")
158+
self.assertEqual(f2.format(self.locale), "$123456.78")
159+
160+
def test_currency_minimum_integer_digits(self):
161+
f = currency(1.23, minimumIntegerDigits=3)
162+
self.assertEqual(f.format(self.locale), "$001.23")
163+
164+
def test_currency_minimum_fraction_digits(self):
165+
f = currency(1, minimumFractionDigits=3)
166+
self.assertEqual(f.format(self.locale), "$1.000")
167+
f = currency(1, minimumFractionDigits=0)
168+
self.assertEqual(f.format(self.locale), "$1")
169+
170+
def test_currency_maximum_fraction_digits(self):
171+
f1 = currency(1.23456)
172+
self.assertEqual(f1.format(self.locale), "$1.23")
173+
f2 = currency(1.23456, maximumFractionDigits=5)
174+
self.assertEqual(f2.format(self.locale), "$1.23456")
175+
f2 = currency(1.23456, maximumFractionDigits=0)
176+
self.assertEqual(f2.format(self.locale), "$1")
177+
178+
def test_currency_minimum_significant_digits(self):
179+
f1 = currency(123, minimumSignificantDigits=5)
180+
self.assertEqual(f1.format(self.locale), "$123.00")
181+
f2 = currency(12.3, minimumSignificantDigits=5)
182+
self.assertEqual(f2.format(self.locale), "$12.300")
183+
184+
def test_currency_maximum_significant_digits(self):
185+
f1 = currency(123456, maximumSignificantDigits=3)
186+
self.assertEqual(f1.format(self.locale), "$123,000")
187+
f2 = currency(12.3456, maximumSignificantDigits=3)
188+
self.assertEqual(f2.format(self.locale), "$12.3")
189+
f3 = currency(12, maximumSignificantDigits=5)
190+
self.assertEqual(f3.format(self.locale), "$12")
191+
146192
def test_copy_attributes(self):
147193
f1 = fluent_number(123456.78, useGrouping=False)
148194
self.assertEqual(f1.options.useGrouping, False)

0 commit comments

Comments
 (0)