gateway/modules/datamodels/datamodelUiLanguage.py
2026-04-08 20:28:34 +02:00

85 lines
2.7 KiB
Python

# Copyright (c) 2025 Patrick Motsch
# All rights reserved.
"""UI language sets: global i18n strings (German key -> translated value)."""
from typing import Dict, Optional, Literal
from pydantic import Field
from modules.datamodels.datamodelBase import PowerOnModel
from modules.shared.attributeUtils import registerModelLabels
UiLanguageStatus = Literal["complete", "incomplete", "generating"]
class UiLanguageSet(PowerOnModel):
"""
One row per ISO 639-1 UI language. id equals code (e.g. de, en).
keys: flat map German plaintext key -> translation for this language.
For language de, values equal keys.
"""
id: str = Field(
...,
description="ISO 639-1 language code (primary key), e.g. de, en, fr",
json_schema_extra={
"frontend_type": "text",
"frontend_readonly": False,
"frontend_required": True,
},
)
label: str = Field(
...,
description="Human-readable language name",
json_schema_extra={
"frontend_type": "text",
"frontend_readonly": False,
"frontend_required": True,
},
)
keys: Dict[str, str] = Field(
default_factory=dict,
description="German plaintext key -> translated label",
json_schema_extra={
"frontend_type": "textarea",
"frontend_readonly": False,
"frontend_required": False,
},
)
status: UiLanguageStatus = Field(
default="complete",
description="complete | incomplete | generating",
json_schema_extra={
"frontend_type": "select",
"frontend_readonly": False,
"frontend_required": True,
"frontend_options": [
{"value": "complete", "label": {"de": "Vollständig", "en": "Complete"}},
{"value": "incomplete", "label": {"de": "Unvollständig", "en": "Incomplete"}},
{"value": "generating", "label": {"de": "Wird erzeugt", "en": "Generating"}},
],
},
)
isDefault: bool = Field(
default=False,
description="Exactly one set should be default (de)",
json_schema_extra={
"frontend_type": "boolean",
"frontend_readonly": False,
"frontend_required": False,
},
)
registerModelLabels(
"UiLanguageSet",
{"en": "UI Language Set", "de": "UI-Sprachset"},
{
"id": {"en": "Code", "de": "Code"},
"label": {"en": "Label", "de": "Bezeichnung"},
"keys": {"en": "Keys", "de": "Schlüssel"},
"status": {"en": "Status", "de": "Status"},
"isDefault": {"en": "Default", "de": "Standard"},
},
)