]> git.ipfire.org Git - thirdparty/babel.git/commitdiff
Fix formatting compact currencies of exactly one thousand in several locales (#1246)
authorBart Broere <mail@bartbroere.eu>
Sat, 31 Jan 2026 12:47:02 +0000 (13:47 +0100)
committerGitHub <noreply@github.com>
Sat, 31 Jan 2026 12:47:02 +0000 (14:47 +0200)
* Add a smoke test for thousands and compact currency formats
* Fall back to other when formatting compact currencies

babel/numbers.py
tests/test_smoke.py

index c4b3c5d067051d9b18c1f2e7263b85a7b525b73d..fbc7eece94e5a25ee6c16e32c4a2a17603760906 100644 (file)
@@ -690,6 +690,8 @@ def _get_compact_format(
                 plural_form = "other"
             if number == 1 and "1" in compact_format:
                 plural_form = "1"
+            if str(magnitude) not in compact_format[plural_form]:
+                plural_form = "other"  # fall back to other as the implicit default
             format = compact_format[plural_form][str(magnitude)]
             number = rounded
             break
index c36151e7eba62ab8997f64ae8bddb53711fc4d83..316979885ae73cbf14721cdd9ee45aeac09d5701 100644 (file)
@@ -17,6 +17,7 @@ NUMBERS = (
     1.2 - 1.0,  # Inaccurate float
     10,  # Plain old integer
     0,  # Zero
+    1000,  # A thousand (previously raised KeyError in the nl locale for compact currencies)
 )
 
 
@@ -46,6 +47,8 @@ def test_smoke_numbers(locale):
         assert numbers.format_decimal(number, locale=locale, numbering_system="default")
         assert numbers.format_currency(number, "EUR", locale=locale)
         assert numbers.format_currency(number, "EUR", locale=locale, numbering_system="default")
+        assert numbers.format_compact_currency(number, "EUR", locale=locale)
+        assert numbers.format_compact_currency(number, "EUR", locale=locale, numbering_system="default")
         assert numbers.format_scientific(number, locale=locale)
         assert numbers.format_scientific(number, locale=locale, numbering_system="default")
         assert numbers.format_percent(number / 100, locale=locale)