diff --git a/lib/redmine/wiki_formatting/common_mark/alerts_icons_filter.rb b/lib/redmine/wiki_formatting/common_mark/alerts_icons_filter.rb
index 73a09b15f..6814eb85e 100644
--- a/lib/redmine/wiki_formatting/common_mark/alerts_icons_filter.rb
+++ b/lib/redmine/wiki_formatting/common_mark/alerts_icons_filter.rb
@@ -49,7 +49,11 @@ module Redmine
next unless icon_name # Skip if no specific icon is defined for this alert type
# label alert translation
- node.content = ::I18n.t("label_alert_#{alert_type}", default: node.content)
+ label_key = "label_alert_#{alert_type}"
+ # Only translate if the default title has not been overridden
+ if node.content == ::I18n.t(label_key, locale: :en)
+ node.content = ::I18n.t(label_key, default: node.content)
+ end
icon_html = ApplicationController.helpers.sprite_icon(icon_name, node.text)
diff --git a/test/unit/lib/redmine/wiki_formatting/common_mark/alerts_icons_filter_test.rb b/test/unit/lib/redmine/wiki_formatting/common_mark/alerts_icons_filter_test.rb
index 099c7a486..73f818147 100644
--- a/test/unit/lib/redmine/wiki_formatting/common_mark/alerts_icons_filter_test.rb
+++ b/test/unit/lib/redmine/wiki_formatting/common_mark/alerts_icons_filter_test.rb
@@ -52,5 +52,16 @@ if Object.const_defined?(:Commonmarker)
expected = %r{#{I18n.t('label_alert_note')}}
assert_match expected, html
end
+
+ def test_should_not_translate_title_if_overridden
+ set_language_if_valid 'de'
+ text = <<~MD
+ > [!note] Custom Note Title
+ > This is a note.
+ MD
+
+ html = filter(format(text))
+ assert_match %r{Custom Note Title}, html
+ end
end
end