feat(frontend): Light-i18n + Org-Sprache durch /auth/me
Backend: - UserMeResponse um output_language (de | en) erweitert. - /auth/me liefert die Org-Sprache aus organization_settings. Frontend: - Neu: static/js/i18n.js mit T(key)-Helper, I18N.load(lang) und applyDom() ueber data-i18n + data-i18n-attr. - Neu: static/i18n/de.json + en.json (sichtbare Bereiche: Sidebar, Header, Modal-Titel, Faktencheck-Status, Refresh-Hinweise). - dashboard.html: i18n.js Script-Tag vor api.js, data-i18n auf den prominenten Strings (Abmelden, + Neuer Fall, Alle/Eigene, Sidebar- Sektionen, Bericht exportieren, Faktencheck-Tab, Lage anlegen). Tutorial.init() entfernt aus DOMContentLoaded. - components.js: factCheckLabels/Tooltips/ChipLabels als Getter ueber T() mit DE-Fallbacks. - app.js: vor Setup wird I18N.load(user.output_language) aufgerufen und applyDom() ausgefuehrt. Tutorial.init() laeuft nur bei lang === de. Phase 6 von 8 (eng_demo / Org-Sprache).
Dieser Commit ist enthalten in:
@@ -216,6 +216,12 @@ async def get_me(
|
||||
if _staging_mode():
|
||||
is_global_admin_response = False
|
||||
|
||||
# Org-Sprache fuer Frontend-i18n
|
||||
output_language_iso = "de"
|
||||
if current_user.get("tenant_id"):
|
||||
from services.org_settings import get_org_language
|
||||
output_language_iso = await get_org_language(db, current_user["tenant_id"])
|
||||
|
||||
return UserMeResponse(
|
||||
id=current_user["id"],
|
||||
username=current_user["username"],
|
||||
@@ -233,6 +239,7 @@ async def get_me(
|
||||
read_only_reason=license_info.get("read_only_reason"),
|
||||
unlimited_budget=unlimited_budget,
|
||||
is_global_admin=is_global_admin_response,
|
||||
output_language=output_language_iso,
|
||||
)
|
||||
|
||||
|
||||
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren