# 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"}, }, )