When DefectDojo runs with the Turkish locale, large parts of the UI still render in English even though dojo/locale/tr/LC_MESSAGES/django.po is fully translated (1929 entries, 0 empty). I scanned the codebase for user-visible strings without gettext wrapping and found the translations are missing at the source, not in the catalog: table headers and action menus in templates (product.html, engagements_all.html, snippets/engagement_list.html, view_finding.html), report widget titles and help texts in dojo/reports/widgets.py (self.title, extra_help), unlabeled fields in CustomReportOptionsForm (report_name, include_finding_notes, report_type auto-generate English labels), plain-string ENGAGEMENT_STATUS_CHOICES in dojo/engagement/models.py, unwrapped filter label=/help_text= in the reorganized */ui/filters.py modules, and hardcoded footer strings in base.html.
The fix is to wrap these strings with ()/{% trans %} (adding explicit label=() where Django auto-generates labels from field names), then refresh the catalog with makemessages -l tr and recompile. Note that since the root cause is unwrapped source strings rather than missing translations, other locales are likely affected by the same gaps.
When DefectDojo runs with the Turkish locale, large parts of the UI still render in English even though dojo/locale/tr/LC_MESSAGES/django.po is fully translated (1929 entries, 0 empty). I scanned the codebase for user-visible strings without gettext wrapping and found the translations are missing at the source, not in the catalog: table headers and action menus in templates (product.html, engagements_all.html, snippets/engagement_list.html, view_finding.html), report widget titles and help texts in dojo/reports/widgets.py (self.title, extra_help), unlabeled fields in CustomReportOptionsForm (report_name, include_finding_notes, report_type auto-generate English labels), plain-string ENGAGEMENT_STATUS_CHOICES in dojo/engagement/models.py, unwrapped filter label=/help_text= in the reorganized */ui/filters.py modules, and hardcoded footer strings in base.html.
The fix is to wrap these strings with ()/{% trans %} (adding explicit label=() where Django auto-generates labels from field names), then refresh the catalog with makemessages -l tr and recompile. Note that since the root cause is unwrapped source strings rather than missing translations, other locales are likely affected by the same gaps.