feat(orgs): Pipeline-Sprache als Org-Setting im Verwaltungsportal
- OrgCreate / OrgUpdate / OrgResponse um output_language (de | en). - routers/organizations.py persistiert die Sprache nach create/update via shared.services.org_settings.set_org_setting. - _enrich_org liest output_language aus organization_settings (Default de). - Frontend: Dropdown im Modal Neue Organisation und im Org-Edit-Formular, Auto-Befuellung aus org.output_language. Cache-Buster auf app.js gebumpt. Phase 7 von 8 (eng_demo / Org-Sprache).
Dieser Commit ist enthalten in:
@@ -166,6 +166,14 @@
|
||||
<option value="false">Deaktiviert</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="editOrgLanguage">Pipeline-Sprache</label>
|
||||
<select id="editOrgLanguage">
|
||||
<option value="de">Deutsch</option>
|
||||
<option value="en">English</option>
|
||||
</select>
|
||||
<small class="text-secondary">Bestimmt die Ausgabesprache der KI (Lagebild, Faktencheck, Recherche) und der sichtbarsten UI-Elemente fuer alle Nutzer dieser Organisation.</small>
|
||||
</div>
|
||||
<div style="display: flex; gap: 8px; margin-top: 16px;">
|
||||
<button type="submit" class="btn btn-primary">Speichern</button>
|
||||
<button type="button" class="btn btn-danger" id="deleteOrgBtn">Organisation löschen</button>
|
||||
@@ -499,6 +507,14 @@
|
||||
<label for="newOrgSlug">Slug (URL-freundlich)</label>
|
||||
<input type="text" id="newOrgSlug" required pattern="[a-z0-9-]+" placeholder="z.B. bundespolizei">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="newOrgLanguage">Pipeline-Sprache</label>
|
||||
<select id="newOrgLanguage">
|
||||
<option value="de" selected>Deutsch</option>
|
||||
<option value="en">English</option>
|
||||
</select>
|
||||
<small class="text-secondary">Steuert die Ausgabesprache der KI-Pipeline (Lagebild, Faktencheck, Recherche) und die sichtbarsten UI-Strings im Monitor.</small>
|
||||
</div>
|
||||
<div id="newOrgError" class="error-msg" style="display:none"></div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
@@ -841,7 +857,7 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="/static/js/app.js?v=20260509j"></script>
|
||||
<script src="/static/js/app.js?v=20260513a"></script>
|
||||
<script src="/static/js/sources.js?v=20260509d"></script>
|
||||
<script src="/static/js/source-health.js?v=20260509l"></script>
|
||||
<script src="/static/js/audit.js?v=20260509d"></script>
|
||||
|
||||
@@ -213,6 +213,8 @@ async function openOrg(orgId) {
|
||||
|
||||
document.getElementById("editOrgName").value = org.name;
|
||||
document.getElementById("editOrgActive").value = org.is_active ? "true" : "false";
|
||||
const langEl = document.getElementById("editOrgLanguage");
|
||||
if (langEl) langEl.value = org.output_language || "de";
|
||||
|
||||
loadOrgUsers(orgId);
|
||||
loadOrgLicenses(orgId);
|
||||
@@ -424,6 +426,7 @@ function setupForms() {
|
||||
await API.post("/api/orgs", {
|
||||
name: document.getElementById("newOrgName").value,
|
||||
slug: document.getElementById("newOrgSlug").value,
|
||||
output_language: document.getElementById("newOrgLanguage").value || "de",
|
||||
});
|
||||
closeModal("modalNewOrg");
|
||||
document.getElementById("newOrgForm").reset();
|
||||
@@ -518,6 +521,7 @@ function setupForms() {
|
||||
await API.put(`/api/orgs/${currentOrgId}`, {
|
||||
name: document.getElementById("editOrgName").value,
|
||||
is_active: document.getElementById("editOrgActive").value === "true",
|
||||
output_language: document.getElementById("editOrgLanguage").value || "de",
|
||||
});
|
||||
openOrg(currentOrgId);
|
||||
loadOrgs();
|
||||
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren