From 47a5064609aec43dcdbf020e309514eb08092e13 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Fri, 19 Jun 2026 07:00:07 +0000 Subject: [PATCH] Handle invalid locale --- src/backend/InvenTree/InvenTree/format.py | 7 ++++++- src/backend/InvenTree/report/test_tags.py | 4 ++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/backend/InvenTree/InvenTree/format.py b/src/backend/InvenTree/InvenTree/format.py index b801faf2d1..5c389b6cea 100644 --- a/src/backend/InvenTree/InvenTree/format.py +++ b/src/backend/InvenTree/InvenTree/format.py @@ -5,10 +5,12 @@ import string from typing import Optional from django.conf import settings +from django.core.exceptions import ValidationError from django.utils import translation from django.utils.translation import gettext_lazy as _ from babel import Locale +from babel.core import UnknownLocaleError from babel.numbers import parse_pattern from djmoney.money import Money @@ -205,7 +207,10 @@ def format_money( ValueError: format string is incorrectly specified """ language = locale or settings.LANGUAGE_CODE - locale = Locale.parse(translation.to_locale(language)) + try: + locale = Locale.parse(translation.to_locale(language)) + except (UnknownLocaleError, ValueError) as e: + raise ValidationError(f"format_money: Invalid locale '{language}' - {e}") if fmt: pattern = parse_pattern(fmt) diff --git a/src/backend/InvenTree/report/test_tags.py b/src/backend/InvenTree/report/test_tags.py index 6590c3662e..964e66e838 100644 --- a/src/backend/InvenTree/report/test_tags.py +++ b/src/backend/InvenTree/report/test_tags.py @@ -571,6 +571,10 @@ class ReportTagTest(PartImageTestMixin, InvenTreeTestCase): report_tags.render_currency(m, locale='en-us'), '$1,234.56' ) + # Invalid locale raises ValidationError + with self.assertRaises(ValidationError): + report_tags.render_currency(m, locale='xx-zz') + def test_create_currency(self): """Test the create_currency template tag.""" m = report_tags.create_currency(1000, 'USD')