feat: add German translation and make UI elements translatable - #190
Conversation
|
Thanks for this PR! Solid contribution — German translation is complete and the i18n system improvements are well-designed. Review summaryGerman locale (
New i18n infrastructure ( The New One thing to double-check: The "Agent profiles" label in the sidebar uses No blockersNothing here prevents merging. The routing logic, locale structure, and HTML changes all look correct. Looking forward to seeing this land. |
nesquena
left a comment
There was a problem hiding this comment.
Full Review: PR #190 — German translation + i18n enhancements
Thanks @DavidSchuchert! Comprehensive German locale plus useful i18n system improvements.
Security Audit
Clean. All DOM updates use safe property assignments (textContent, title, placeholder) — not innerHTML. No external resources, no injection vectors. The data-i18n-title and data-i18n-placeholder attributes are processed via the same safe t() function as existing data-i18n.
Code Review
German locale (de): Complete coverage — all existing en keys are translated, plus new sidebar/settings/empty-state keys. Function-valued keys (n_messages, downloading, delete_confirm) are correctly ported with German grammar.
i18n system enhancements: The applyLocaleToDOM additions for data-i18n-title and data-i18n-placeholder follow the exact same pattern as the existing data-i18n textContent handler. Clean, consistent.
HTML changes: All 58 deletions and 58 additions are attribute additions (data-i18n, data-i18n-title, data-i18n-placeholder) with English fallback text preserved inline. No structural changes.
en locale additions: New keys for sidebar tabs, settings descriptions, empty state suggestions. Additive — no existing keys changed.
Tests
506 passed, 0 failed, 41 skipped. No regressions.
Verdict
Approved. Clean, safe, comprehensive. Ready to merge.
Three issues fixed in the cherry-pick of DavidSchuchert/PR-190: 1. Clear conversation button used data-i18n='copy' (maps to 'Kopieren' in German). Renamed to new key 'clear_conv' → 'Clear'/'Löschen'. 2. topbarMeta used data-i18n='new_conversation' (='New conversation') for the text 'Start a new conversation'. Renamed to new key 'start_conversation' → 'Start a new conversation'/'Neue Unterhaltung starten'. 3. Agent profiles sidebar header used data-i18n='tab_profiles' (='Profiles') for the heading 'Agent profiles'. Renamed to new key 'profiles_header' → 'Agent profiles'/'Agenten-Profile'. All three new keys added to both 'en' and 'de' locales in i18n.js.
|
Rebased onto current master (post v0.41.0, #189, #191 merged). Great contribution — German is comprehensive and the Three i18n key fixes applied in the rebase:
All three keys added to both |
|
Thank you, @DavidSchuchert! German translation merged and live! You didn't just translate strings — you exposed elements that weren't wired into the i18n system yet and fixed them in the same PR. That's the right way to do it. You're in the Contributors section — thank you! |
…ena#190) Co-authored-by: David Work <davidwork@MBP-von-David.fritz.box>
…ena#190) Co-authored-by: David Work <davidwork@MBP-von-David.fritz.box>
This PR introduces full German language support to the Hermes WebUI and enhances the existing i18n system to support
more UI elements.
Changes
(tooltips) and placeholder attributes using new data-i18n-title and data-i18n-placeholder attributes.
empty state, replacing them with translatable data-i18n elements.
How to test