diff --git a/odoo/addons/base/models/ir_qweb_fields.py b/odoo/addons/base/models/ir_qweb_fields.py index 3efe3dc30bc41..a65e4dd686197 100644 --- a/odoo/addons/base/models/ir_qweb_fields.py +++ b/odoo/addons/base/models/ir_qweb_fields.py @@ -639,13 +639,26 @@ def value_to_html(self, value, options): v, r = divmod(r, secs_per_unit) if not v: continue - section = babel.dates.format_timedelta( - v*secs_per_unit, - granularity=round_to, - add_direction=options.get('add_direction'), - format=options.get('format', 'long'), - threshold=1, - locale=locale) + try: + section = babel.dates.format_timedelta( + v*secs_per_unit, + granularity=round_to, + add_direction=options.get('add_direction'), + format=options.get('format', 'long'), + threshold=1, + locale=locale) + except KeyError: + # in case of wrong implementation of babel, try to fallback on en_US locale. + # https://github.com/python-babel/babel/pull/827/files + # Some bugs already fixed in 2.10 but ubuntu22 is 2.8 + localeUS = babel_locale_parse('en_US') + section = babel.dates.format_timedelta( + v*secs_per_unit, + granularity=round_to, + add_direction=options.get('add_direction'), + format=options.get('format', 'long'), + threshold=1, + locale=localeUS) if section: sections.append(section) diff --git a/odoo/addons/base/tests/test_qweb.py b/odoo/addons/base/tests/test_qweb.py index 07fa58091eaec..c0adc6b4b946b 100644 --- a/odoo/addons/base/tests/test_qweb.py +++ b/odoo/addons/base/tests/test_qweb.py @@ -1659,6 +1659,17 @@ def test_render_widget_contact(self): }) self.env['ir.qweb']._render(view1.id, {'user': u}) # should not crash + def test_render_widget_duration_fallback(self): + self.env['res.lang'].with_context(active_test=False).search([('code', '=', 'pt_BR')]).active = True + view1 = self.env['ir.ui.view'].create({ + 'name': "dummy", + 'type': 'qweb', + 'arch': """ + + """ + }) + self.env['ir.qweb'].with_context(lang='pt_BR')._render(view1.id, {}) # should not crash + def test_void_element(self): view = self.env['ir.ui.view'].create({ 'name': 'master',