diff --git a/apps/tesm-license/src/tesm_license/templates/license/own_license.html b/apps/tesm-license/src/tesm_license/templates/license/own_license.html
index 4b8ce9a..18bb47c 100644
--- a/apps/tesm-license/src/tesm_license/templates/license/own_license.html
+++ b/apps/tesm-license/src/tesm_license/templates/license/own_license.html
@@ -200,7 +200,7 @@
{% for key in trusted_keys %}
- {{ key.key_id }}
- - {{ key.label }} ({{ key.source }}, {{ key.added_at | date }})
+ - {{ key.label }} ({{ key.source | issuer_source }}, {{ key.added_at | date }})
{% endfor %}
{% else %}
diff --git a/packages/tesm-core/src/tesm_core/ui.py b/packages/tesm-core/src/tesm_core/ui.py
index d9038b5..1a70483 100644
--- a/packages/tesm-core/src/tesm_core/ui.py
+++ b/packages/tesm-core/src/tesm_core/ui.py
@@ -154,6 +154,32 @@ def yes_no(value: Any) -> str:
return "ja" if value else "nein"
+#: Woher ein gepinnter Ausstellerschluessel kommt -- in Klartext.
+#:
+#: In der Datenbank stehen die Kuerzel des Protokolls. "tofu" ist dabei
+#: Fachjargon (Trust On First Use) und sah in der Spalte aus wie ein
+#: Tippfehler. Uebersetzt wird an genau einer Stelle, damit die beiden
+#: Anwendungen nicht auseinanderlaufen.
+ISSUER_SOURCES: dict[str, tuple[str, str]] = {
+ "tofu": ("Erstkontakt", "beim ersten Einspielen automatisch uebernommen"),
+ "admin-confirmed": (
+ "Bestaetigt",
+ "Ausstellerwechsel von einem Administrator freigegeben",
+ ),
+}
+
+
+def issuer_source(value: Any) -> str:
+ """Kurzform der Herkunft. Unbekannte Werte bleiben unveraendert sichtbar."""
+ label, _ = ISSUER_SOURCES.get(str(value or ""), (str(value or "-"), ""))
+ return label
+
+
+def issuer_source_hint(value: Any) -> str:
+ """Erklaerung zur Herkunft, oder leer."""
+ return ISSUER_SOURCES.get(str(value or ""), ("", ""))[1]
+
+
def from_json(value: Any) -> Any:
"""Parst einen JSON-String aus der Datenbank -- fuer Modul-/Rechtelisten.
@@ -233,6 +259,8 @@ def init_app(app: Flask) -> None:
number=format_number,
yes_no=yes_no,
from_json=from_json,
+ issuer_source=issuer_source,
+ issuer_source_hint=issuer_source_hint,
)
app.jinja_env.trim_blocks = True
app.jinja_env.lstrip_blocks = True