From d7cd002432d878481b8d51e2d660bd224aaa4973 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 | 9 ++++++++- src/backend/InvenTree/report/test_tags.py | 8 ++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/backend/InvenTree/InvenTree/format.py b/src/backend/InvenTree/InvenTree/format.py index b801faf2d1..121c5e0a01 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,12 @@ 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 value')}: '{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..1211f213c1 100644 --- a/src/backend/InvenTree/report/test_tags.py +++ b/src/backend/InvenTree/report/test_tags.py @@ -571,6 +571,14 @@ 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') + + with override_settings(LANGUAGE_CODE='xx-zz'): + with self.assertRaises(ValidationError): + report_tags.render_currency(m) + def test_create_currency(self): """Test the create_currency template tag.""" m = report_tags.create_currency(1000, 'USD')