Shop Projekt - Dokumentation

Shop LDM

Teil 01: Labels

Dieses Modul verwaltet die Mehrsprachigkeit und Textbausteine des Shops.

Anstatt Texte direkt im Code zu speichern, werden Label-Keys definiert, die sprachspezifische Übersetzungen enthalten.

🗺️ Stufe 0 | 📚 Aktuell | 📟 2026 06 15 | 📍 Datenbank - labels

  • language: Hält die unterstützten Sprachen (z. B. Deutsch, English, Français).
  • label_key: Enthält eindeutige Schlüssel für Textelemente (z. B. Buttons, Fehlermeldungen).
  • label: Enthält die konkrete Übersetzung eines label_key pro Sprache.
  • text: Enthält die konkrete Übersetzung der Texte
  • page: Definiert Shop-Seiten wie Checkout, Profil, Startseite.
  • lp_content: Verknüpft LabelKeys mit bestimmten Seiten, falls sie nicht global gelten.

Es erlaubt, die Shop-Oberfläche dynamisch in beliebigen Sprachen auszugeben und Texte jederzeit anzupassen, ohne den Code ändern zu müssen.

Language (Sprachen)

Zweck: Basis-Tabelle für unterstützte Sprachen.

Felder:
    - lan_ID      (PK)
    - lan_key     VARCHAR(5) UNIQUE        -- Sprachcode (z. B. 'DE', 'EN')
    - lan_name    VARCHAR(50)              -- Anzeigename (z. B. 'Deutsch', 'English', 'Français')

Label Key (Label-Schlüssel)

Zweck: Eindeutige Kennung für Texte. Unterstützt Gruppierungen und globale Gültigkeit.

Felder:
    - lky_ID      (PK)
    - lky_key     VARCHAR(50) UNIQUE       -- Schlüsselname für ein Label
    - lky_group   VARCHAR(200) 		   -- Gruppierung (z.B. 'nav', 'btn')
    - lky_is_global BOOLEAN                -- 1 = global (seitenunabhängig), 0 = seitengebunden

Trigger: global oder Seiten gebunden
Hinweis: für die key ist empfehlenswert Präfix zu benutzen

Label (Kurztexte)

Zweck: Speichert Übersetzungen für UI-Labels (z.B. Buttons, Menüs).

Felder:
    - lab_ID      (PK)
    - lan_ID      (FK → language.lan_ID)
    - lky_ID      (FK → label_key.lky_ID)
    - lab_value   TEXT                     -- z. B. 'In den Warenkorb', 'Add to cart'
    - UNIQUE(lky_ID, lan_ID)               -- ein LabelKey pro Sprache nur einmal

Text (Langtexte)

Zweck: Wie tb_label, jedoch für umfangreiche Inhalte (LONGTEXT) wie Beschreibungen.

Felder:
    - tex_ID      (PK)
    - lan_ID      (FK → language.lan_ID)
    - lky_ID      (FK → label_key.lky_ID)  -- Ich verwende hier den Rest der label Struktur
    - tex_value   LONGTEXT                 -- z. B. AGB-Absätze, Hilfe Text
    - UNIQUE (lky_ID, lan_ID)              -- ein LabelKey pro Sprache nur einmal

Page (Seiten-Definition)

Zweck: Definiert die verschiedenen Seiten der Webanwendung. Muss identisch zu den globalen Seitenkonstanten sein.

Felder:
    - pag_ID      (PK)
    - pag_key     VARCHAR(100) UNIQUE      -- eindeutiger Schlüssel für die Seite (z. B. 'checkout', 'profile')

lp_content (Verbindung)

Zweck:   Verknüpft LabelKeys mit bestimmten Seiten, falls sie nicht global gelten.

Felder:
    - lky_ID      (PK, FK → label_key.lky_ID)
    - pag_ID      (PK, FK → page.pag_ID)

Hinweis: Nur für label_key ohne global

trg_labelkey_global_check Trigger

Auslöser: Vor dem Einfügen in tb_lp_content
Prozess:
   1. Überprüfen, ob der LabelKey global ist
   2. Wenn global, Einfügen verhindern

Ausgabe:
    - Fehlermeldung, wenn globaler LabelKey eingefügt wird

vw_label_export View

Zweck: Konsolidierte Ansicht für die Label-Keys mit ihren Übersetzungen und zugeordneten Seiten.

Felder:
    - lky_ID      LabelKey
    - lky_key     LabelKey                 -- Schlüsselname für ein Label
    - lky_group   LabelKey      		    -- Gruppierung (z.B. 'nav', 'btn')
    - lky_is_global LabelKey               -- 1 = global, 0 = seitengebunden
    - lan_ID      Sprache
    - pag_IDs     Seite                    -- Komma-separierte Liste aller zugeordneten Seiten-IDs
    - label_value Label                    -- Endgültiger Textwert nach Fallback-Logik

vw_pages View

Zweck: Konsolidierte Ansicht für die Seiten mit ihren sprachspezifischen Namen.

Felder:
    - lan_ID      Sprache
    - pag_ID      Seite
    - pag_key     Seite                    -- Eindeutiger Schlüssel der Seite
    - pag_name    Seite                    -- Sprachspezifischer Name der Seite oder pag_key als Fallback