diff --git a/django/contrib/admin/helpers.py b/django/contrib/admin/helpers.py
index 0c0b3a4e345..83719f4346e 100644
--- a/django/contrib/admin/helpers.py
+++ b/django/contrib/admin/helpers.py
@@ -187,7 +187,7 @@ class AdminReadonlyField:
if not self.is_first:
attrs["class"] = "inline"
label = self.field['label']
- return format_html('', flatatt(attrs), capfirst(label))
+ return format_html('', flatatt(attrs), capfirst(label), self.form.label_suffix)
def contents(self):
from django.contrib.admin.templatetags.admin_list import _boolean_icon
diff --git a/tests/admin_views/tests.py b/tests/admin_views/tests.py
index 0cc16509ff7..3acbc3d7edc 100644
--- a/tests/admin_views/tests.py
+++ b/tests/admin_views/tests.py
@@ -4961,6 +4961,13 @@ class ReadonlyTest(AdminFieldExtractionMixin, TestCase):
self.assertNotContains(response, "evil", status_code=200)
self.assertContains(response, "<a>evil</a>", status_code=200)
+ def test_label_suffix_translated(self):
+ pizza = Pizza.objects.create(name='Americano')
+ url = reverse('admin:admin_views_pizza_change', args=(pizza.pk,))
+ with self.settings(LANGUAGE_CODE='fr'):
+ response = self.client.get(url)
+ self.assertContains(response, '', html=True)
+
@override_settings(ROOT_URLCONF='admin_views.urls')
class LimitChoicesToInAdminTest(TestCase):