> ## Documentation Index
> Fetch the complete documentation index at: https://docs.dreizack-medien.de/llms.txt
> Use this file to discover all available pages before exploring further.

# Sprachvariablen

## Übersicht

In diesem Tab kannst du alle Sprachvariablen zentral an einem Ort verwalten. Sprachvariablen sind Platzhalter für Texte, die anpassbar sind und entweder von JTL oder von uns (wenn es um Plugins geht) vorkonfiguriert wurden. Dazu gehören beispielsweise Texte für Buttons, Hinweise oder Fehlermeldungen. Diese Sprachvariablen lassen sich in verschiedenen Sprachen anpassen. Außerdem kannst du hier neue Sprachvariablen anlegen und den Inhalt nach Belieben anpassen.

<Info>
  **Was sind Sprachvariablen?**

  Sprachvariablen (auch Language Variables oder Lang Vars) sind Platzhalter im Code, die zur Laufzeit durch tatsächliche Texte ersetzt werden. Der Vorteil: Texte können einfach angepasst und in mehreren Sprachen gepflegt werden, ohne den Code zu ändern.
</Info>

<br />

## Features

<CardGroup cols={2}>
  <Card title="Zentrale Verwaltung" icon="database" color="#0285c7">
    Verwalte alle Sprachvariablen (sowohl aus Plugins als auch alle JTL-Sprachvariablen) zentral an einem Ort.
  </Card>

  <Card title="Import & Export" icon="right-left" color="#16a34a">
    Exportiere und importiere Sprachvariablen als JSON - ideal für Backups und Massenbearbeitung.
  </Card>

  <Card title="Neue Variablen anlegen" icon="plus" color="#ea580c">
    Erstelle eigene Sprachvariablen schnell und einfach über das Tool.
  </Card>

  <Card title="Mehrsprachig" icon="globe" color="#7c3aed">
    Verwalte alle Sprachen deines Shops gleichzeitig - perfekt für internationale Shops.
  </Card>
</CardGroup>

<br />

## Plugin-Sprachvariablen

<div className="border border-[#DFE1E1] rounded-2xl overflow-hidden dark:border-transparent">
  <Frame>
    <img src="https://mintcdn.com/dzm/orKZnEU_9eIlu9JK/images/sprachvariablen-plugin.jpg?fit=max&auto=format&n=orKZnEU_9eIlu9JK&q=85&s=3b43a9f68beba919fe633e9c9fa536e1" alt="Plugin Sprachvariablen" width="2084" height="340" data-path="images/sprachvariablen-plugin.jpg" />
  </Frame>
</div>

Hier findest du alle Sprachvariablen, die aus Plugins kommen - sowohl von DZM als auch von anderen Plugin-Entwicklern.

### Interface-Bedienung

<Tabs>
  <Tab title="Sprache wählen">
    <ParamField path="language_select" type="select">
      Wähle die Sprache der Sprachvariablen, die du bearbeiten möchtest.

      **Verfügbare Sprachen:**

      * Deutsch (Standard)
      * Englisch
      * Weitere Sprachen (abhängig von deiner Wawi-Konfiguration)
    </ParamField>

    <Info>
      Die verfügbaren Sprachen werden in der JTL-Wawi definiert und dann in den Shop übertragen. Neue Sprachen müssen zuerst in der Wawi aktiviert werden.
    </Info>

    **Workflow für mehrsprachige Shops:**

    <Steps>
      <Step title="Deutsch bearbeiten">
        Beginne immer mit der Hauptsprache (meist Deutsch) und pflege alle Texte.
      </Step>

      <Step title="Andere Sprachen">
        Wechsle dann zur zweiten Sprache und übersetze/passe die Texte an.
      </Step>

      <Step title="Konsistenz prüfen">
        Stelle sicher, dass alle Sprachen vollständig gepflegt sind.
      </Step>
    </Steps>
  </Tab>

  <Tab title="Suche">
    <ParamField path="search" type="text">
      Durchsuche Sprachvariablen nach Namen, Werten, Standardwerten oder Beschreibungen.

      **Suchstrategien:**

      * Nach Variablen-Namen: `btn_submit`
      * Nach Inhalt: "Jetzt kaufen"
      * Nach Plugin: `dzm_`
      * Nach Funktion: "error", "success", "button"
    </ParamField>

    <Tip>
      Die Suche ist case-insensitive und durchsucht alle Felder gleichzeitig. Du musst nicht wissen, ob ein Text im Namen oder Wert steht.
    </Tip>

    **Beispiel-Suchen:**

    ```
    "in den warenkorb" → Findet alle Warenkorb-Buttons
    "dzm_resources" → Findet alle Resources-Plugin-Variablen
    "error" → Findet alle Fehlermeldungen
    ```
  </Tab>

  <Tab title="Bearbeitung">
    **Sprachvariablen ändern:**

    <Steps>
      <Step title="Variable finden">
        Nutze die Suche oder scrolle durch die Liste.
      </Step>

      <Step title="Wert bearbeiten">
        Klicke in das Textfeld unter "Wert" und ändere den Text.

        <Note>
          Der "Standardwert" zeigt dir den Original-Text - ändere nur den "Wert", nicht den Standard!
        </Note>
      </Step>

      <Step title="Speichern">
        Klicke auf "Speichern" um alle Änderungen zu übernehmen.

        <Warning>
          Änderungen werden erst nach dem Speichern übernommen!
        </Warning>
      </Step>

      <Step title="Cache leeren">
        Leere den Shop-Cache damit die Änderungen im Frontend sichtbar werden.

        **Weg:** Backend → System → Cache → Cache leeren
      </Step>
    </Steps>

    **Formatierung beachten:**

    * HTML ist erlaubt: `<strong>Text</strong>`
    * Platzhalter erhalten: `{0}`, `{1}`, etc.
    * Sonderzeichen escapen wenn nötig
  </Tab>

  <Tab title="Aktionen">
    **Alle Werte zurücksetzen**

    <ParamField path="reset_all" type="button">
      Setzt alle Sprachvariablen auf ihre Standardwerte zurück.

      <Warning>
        **ACHTUNG:** Diese Aktion ist nicht rückgängig zu machen! Exportiere vorher ein Backup.
      </Warning>
    </ParamField>

    **Speichern**

    <ParamField path="save" type="button">
      Speichert alle vorgenommenen Änderungen in der Datenbank.
    </ParamField>

    **Exportieren**

    <ParamField path="export" type="button">
      Exportiert alle Plugin-Sprachvariablen der aktuellen Sprache als JSON-Datei.

      <Tip>
        Perfekt für Backups vor größeren Änderungen oder zum Übertragen auf andere Shops.
      </Tip>
    </ParamField>

    **Select Files (Import)**

    <ParamField path="import" type="file">
      Importiert eine zuvor exportierte JSON-Datei mit Sprachvariablen.

      <Info>
        Bestehende Werte werden überschrieben - sichere vorher den aktuellen Stand!
      </Info>
    </ParamField>
  </Tab>
</Tabs>

### Wichtiger Hinweis zum Cache

<Warning>
  **Sprachvariablen-Änderungen nicht sichtbar?**

  Manchmal werden Änderungen der Sprachvariablen im Frontend nicht sofort sichtbar, da diese noch im Shop-Cache hängen.

  **Lösung:** Leere deinen Shop-Cache im Backend unter **System → Cache → Cache leeren**.
</Warning>

<br />

## Shop Sprachvariablen

<div className="border border-[#DFE1E1] rounded-2xl overflow-hidden dark:border-transparent">
  <Frame>
    <img src="https://mintcdn.com/dzm/orKZnEU_9eIlu9JK/images/sprachvariablen-shop.jpg?fit=max&auto=format&n=orKZnEU_9eIlu9JK&q=85&s=53f5f26a6386156482964683af4d16e8" alt="Shop Sprachvariablen" width="2082" height="338" data-path="images/sprachvariablen-shop.jpg" />
  </Frame>
</div>

Hier findest du alle Sprachvariablen, die aus dem JTL-Shop Core kommen - also alle Standard-Texte des Shops.

### Funktionsweise

Die Bedienung ist identisch zu den Plugin-Sprachvariablen:

<AccordionGroup>
  <Accordion title="Sprache wählen">
    Wähle die zu bearbeitende Sprache aus dem Dropdown.

    **Tipp:** Bearbeite zuerst die Hauptsprache komplett, bevor du zu anderen Sprachen wechselst.
  </Accordion>

  <Accordion title="Suchen & Filtern">
    Nutze die Suchfunktion um spezifische Variablen zu finden.

    **Häufige Suchbegriffe:**

    * "add to cart" → Warenkorb-Buttons
    * "checkout" → Checkout-Prozess-Texte
    * "shipping" → Versand-bezogene Texte
    * "error" → Fehlermeldungen
    * "success" → Erfolgsmeldungen
  </Accordion>

  <Accordion title="Bearbeiten & Speichern">
    Ändere Werte und klicke auf "Speichern".

    <Note>
      JTL-Sprachvariablen beeinflussen das Core-Verhalten des Shops. Sei vorsichtig bei Änderungen!
    </Note>
  </Accordion>

  <Accordion title="Export & Import">
    Exportiere für Backups oder zum Übertragen auf andere Shops.

    <Info>
      Für vollständige Backups: Exportiere sowohl Plugin- als auch JTL-Sprachvariablen!
    </Info>
  </Accordion>
</AccordionGroup>

### Best Practices für JTL-Variablen

<Tabs>
  <Tab title="Was du ändern kannst">
    **Unbedenklich:**

    * Button-Beschriftungen anpassen
    * Hinweistexte optimieren
    * Fehlermeldungen kundiger formulieren
    * Marketing-Texte personalisieren

    **Beispiele:**

    ```
    "In den Warenkorb" → "Jetzt kaufen"
    "Zur Kasse" → "Zur sicheren Kasse"
    "Weiter einkaufen" → "Weiterstöbern"
    ```
  </Tab>

  <Tab title="Vorsicht bei">
    **Kritische Texte:**

    * Rechtliche Hinweise (Widerruf, AGB, etc.)
    * System-Meldungen
    * Variablen mit Platzhaltern
    * Technical Labels

    <Warning>
      Änderungen an rechtlichen Texten sollten immer mit einem Anwalt abgestimmt werden!
    </Warning>

    **Platzhalter erhalten:**

    ```
    ❌ Falsch: "Hallo Max" (hart codiert)
    ✅ Richtig: "Hallo {0}" (Platzhalter bleibt)
    ```
  </Tab>

  <Tab title="Nach Updates">
    **Shop-Updates beachten:**

    Nach JTL-Shop Updates können:

    * Neue Sprachvariablen hinzukommen
    * Bestehende Variablen geändert werden
    * Alte Variablen entfernt werden

    **Vorgehen:**

    1. Vor Update: Sprachvariablen exportieren
    2. Update durchführen
    3. Eigene Anpassungen prüfen
    4. Bei Bedarf neu anpassen

    <Tip>
      Führe ein Log über alle geänderten Sprachvariablen, um nach Updates schnell wieder den gewünschten Zustand herzustellen.
    </Tip>
  </Tab>
</Tabs>

<br />

## Neue Sprachvariablen anlegen

<div className="border border-[#DFE1E1] rounded-2xl overflow-hidden dark:border-transparent">
  <Frame>
    <img src="https://mintcdn.com/dzm/orKZnEU_9eIlu9JK/images/sprachvariablen-neue-variable.jpg?fit=max&auto=format&n=orKZnEU_9eIlu9JK&q=85&s=c2eb4b263b977661bce27f761a3dda57" alt="Neue Sprachvariable erstellen" width="2090" height="902" data-path="images/sprachvariablen-neue-variable.jpg" />
  </Frame>
</div>

Erstelle eigene Sprachvariablen für Custom-Entwicklungen oder individuelle Texte.

### Schritt für Schritt

<Steps>
  <Step title="Namen vergeben">
    <ParamField path="name" type="string" required>
      Vergebe einen eindeutigen Namen für die Sprachvariable.

      **Naming Conventions:**

      * Kleinbuchstaben verwenden
      * Wörter mit Unterstrichen trennen
      * Aussagekräftig benennen
      * Präfix nutzen (z.B. `custom_`, `dzm_`)

      **Beispiele:**

      ```
      ✅ dzm_custom_banner_text
      ✅ custom_checkout_note
      ✅ my_shop_welcome_message

      ❌ Banner1 (nicht aussagekräftig)
      ❌ CUSTOM TEXT (Leerzeichen, Großbuchstaben)
      ❌ customBannerText (CamelCase vermeiden)
      ```
    </ParamField>
  </Step>

  <Step title="Sektion wählen">
    <ParamField path="section" type="select">
      Wähle eine Sektion zur Gruppierung und schnelleren Auffindbarkeit.

      **Verfügbare Sektionen:**

      * **custom** (empfohlen für eigene Variablen)
      * global
      * checkout
      * product
      * account
      * ... (weitere system-spezifische Sektionen)
    </ParamField>

    <Info>
      In der Regel ist "custom" die richtige Wahl für neue benutzerdefinierte Sprachvariablen.
    </Info>
  </Step>

  <Step title="Texte eintragen">
    <ParamField path="translations" type="object">
      Trage den Text in allen verfügbaren Sprachen ein.

      **Deutsch:** Hauptsprache, sollte immer gepflegt werden

      **Englisch:** Fallback für internationale Kunden

      **Weitere Sprachen:** Je nach Shop-Konfiguration
    </ParamField>

    <Tip>
      Wenn du eine Sprache nicht ausfüllst, bleibt das Feld leer oder zeigt den Variablen-Namen an.
    </Tip>
  </Step>

  <Step title="Variable hinzufügen">
    Klicke auf "Variable hinzufügen", um die neue Sprachvariable zu speichern.

    <Check>
      Die Variable ist ab sofort in Templates, Plugins und Scripts verwendbar!
    </Check>
  </Step>
</Steps>

### Verwendung in Templates

Nach dem Anlegen kannst du die Variable in Smarty-Templates verwenden:

```smarty theme={null}
{* In .tpl Dateien *}
{lang key="dzm_custom_banner_text" section="custom"}

{* Mit Fallback *}
{lang key="dzm_custom_banner_text" section="custom" default="Fallback Text"}

{* Mit Platzhaltern *}
{lang key="dzm_welcome_user" section="custom" printf=$userName}
```

### Verwendung in PHP

In PHP-Code kannst du Sprachvariablen so nutzen:

```php theme={null}
// Einfache Verwendung
$text = Shop::Lang()->get('dzm_custom_banner_text', 'custom');

// Mit Platzhaltern
$text = Shop::Lang()->get('dzm_welcome_user', 'custom');
$text = sprintf($text, $userName);

// In der aktuellen Sprache
$currentLang = Shop::getLanguageID();
$text = Shop::Lang()->get('dzm_custom_banner_text', 'custom', $currentLang);
```

<br />

## Export & Import

### Backup erstellen

<div className="border border-[#DFE1E1] rounded-2xl overflow-hidden dark:border-transparent">
  <Frame>
    <img src="https://mintcdn.com/dzm/orKZnEU_9eIlu9JK/images/sprachvariablen-export-import.jpg?fit=max&auto=format&n=orKZnEU_9eIlu9JK&q=85&s=b5e08905265d20351d922d2c3f846d5b" alt="Export & Import" width="2084" height="1070" data-path="images/sprachvariablen-export-import.jpg" />
  </Frame>
</div>

<Steps>
  <Step title="Plugin-Variablen exportieren">
    Gehe zum Tab "Plugin Sprachvariablen" → Klicke "Exportieren"

    **Dateiname:** `plugin_langvars_de_2024-02-06.json`
  </Step>

  <Step title="JTL-Variablen exportieren">
    Gehe zum Tab "JTL-Sprachvariablen" → Klicke "Exportieren"

    **Dateiname:** `jtl_langvars_de_2024-02-06.json`
  </Step>

  <Step title="Alle Sprachen wiederholen">
    Wiederhole für jede aktive Sprache (EN, FR, etc.)
  </Step>

  <Step title="Backup sicher aufbewahren">
    Speichere alle JSON-Dateien an einem sicheren Ort:

    * Cloud-Speicher (Dropbox, Google Drive)
    * Lokale Backup-Festplatte
    * Versionskontrolle (Git)
  </Step>
</Steps>

<Warning>
  **Vollständiges Backup:**

  Wenn du alle Sprachvariablen als Backup sichern möchtest, achte unbedingt darauf **sowohl** die Plugin-Sprachvariablen **als auch** die JTL-Sprachvariablen zu exportieren!
</Warning>

### Import durchführen

<Steps>
  <Step title="Backup-Datei vorbereiten">
    Stelle sicher, dass du die richtige JSON-Datei hast:

    * Richtige Sprache?
    * Richtiger Tab (Plugin vs. JTL)?
    * Aktuelles Backup?
  </Step>

  <Step title="Import starten">
    Klicke auf "Select Files" und wähle die JSON-Datei aus.
  </Step>

  <Step title="Import bestätigen">
    Bestätige, dass bestehende Werte überschrieben werden sollen.

    <Warning>
      Der Import überschreibt alle Werte in der JSON-Datei - aktuelle Änderungen gehen verloren!
    </Warning>
  </Step>

  <Step title="Ergebnis prüfen">
    Prüfe stichprobenartig ob der Import erfolgreich war.

    Leere anschließend den Cache.
  </Step>
</Steps>

### JSON-Datei-Struktur

Für Massenbearbeitung kannst du die JSON-Datei manuell bearbeiten:

```json theme={null}
{
  "dzm_custom_banner_text": {
    "name": "dzm_custom_banner_text",
    "section": "custom",
    "value": "Willkommen in unserem Shop!",
    "default": "Welcome to our shop!",
    "description": "Banner text on homepage"
  },
  "dzm_another_variable": {
    ...
  }
}
```

<Tip>
  Nutze einen JSON-Editor oder VS Code mit JSON-Plugin für komfortables Bearbeiten großer Dateien.
</Tip>

<br />

## Best Practices

<AccordionGroup>
  <Accordion title="Konsistente Benennung">
    **Naming Convention festlegen:**

    ```
    [prefix]_[bereich]_[funktion]_[typ]

    Beispiele:
    custom_checkout_button_continue
    custom_product_label_sale
    custom_error_msg_invalid_email
    dzm_banner_text_homepage
    ```

    **Vorteile:**

    * Schnelles Auffinden
    * Klare Zuordnung
    * Keine Konflikte
    * Team-freundlich
  </Accordion>

  <Accordion title="Dokumentation pflegen">
    **Externe Dokumentation führen:**

    Erstelle eine Tabelle mit allen Custom-Variablen:

    | Variable               | Verwendung       | Geändert am | Geändert von |
    | ---------------------- | ---------------- | ----------- | ------------ |
    | custom\_banner\_text   | Homepage Banner  | 2024-02-06  | Max M.       |
    | custom\_checkout\_note | Checkout Hinweis | 2024-01-15  | Lisa S.      |

    **Oder nutze Kommentare im Code:**

    ```smarty theme={null}
    {* Custom Variable für Sommer-Aktion 2024 
       Angelegt: 2024-02-06
       Kontakt: marketing@firma.de *}
    {lang key="custom_summer_banner" section="custom"}
    ```
  </Accordion>

  <Accordion title="Regelmäßige Backups">
    **Backup-Routine etablieren:**

    **Vor wichtigen Änderungen:**

    * Immer ein Backup erstellen
    * Datiert und versioniert speichern
    * An sicheren Ort ablegen

    **Regelmäßig (monatlich):**

    * Vollständiger Export aller Sprachen
    * Beide Tabs (Plugin + JTL)
    * Zusammen mit anderen Shop-Backups speichern

    **Nach großen Anpassungen:**

    * Sofort neues Backup
    * Mit Changelog dokumentieren
    * Team informieren
  </Accordion>

  <Accordion title="Testing vor Live-Gang">
    **Änderungen immer testen:**

    <Steps>
      <Step title="Staging-System nutzen">
        Teste Änderungen zuerst auf Test-/Staging-System
      </Step>

      <Step title="Alle Sprachen prüfen">
        Stelle sicher dass alle Sprachen korrekt sind
      </Step>

      <Step title="Frontend checken">
        Prüfe alle Stellen wo die Variable verwendet wird
      </Step>

      <Step title="Mobile testen">
        Teste auch auf mobilen Geräten
      </Step>

      <Step title="Nach Go-Live überwachen">
        Prüfe nach Live-Schaltung nochmal alle Stellen
      </Step>
    </Steps>
  </Accordion>
</AccordionGroup>

<br />

## Häufige Anwendungsfälle

<Tabs>
  <Tab title="Marketing-Texte">
    **Saisonale Anpassungen:**

    ```
    custom_banner_winter_sale
    → "❄️ Winter-Sale: Bis zu 50% Rabatt!"

    custom_banner_summer_sale  
    → "☀️ Sommer-Aktion: Jetzt zugreifen!"
    ```

    **A/B-Testing:**

    * Teste verschiedene Button-Texte
    * Optimiere Call-to-Actions
    * Verbessere Conversion

    **Vorteil:** Schnelles Ändern ohne Code-Deployment
  </Tab>

  <Tab title="Kundenkommunikation">
    **Personalisierte Ansprache:**

    ```
    custom_greeting_registered
    → "Willkommen zurück, {0}!"

    custom_greeting_guest
    → "Herzlich willkommen! Schön, dass Sie da sind."
    ```

    **Service-Hinweise:**

    ```
    custom_shipping_info
    → "Versandkostenfrei ab 50€"

    custom_return_policy
    → "100 Tage Rückgaberecht"
    ```
  </Tab>

  <Tab title="Mehrsprachigkeit">
    **Professionelle Übersetzungen:**

    ```
    DE: "In den Warenkorb legen"
    EN: "Add to cart"
    FR: "Ajouter au panier"
    ES: "Añadir al carrito"
    ```

    **Lokalisierung:**

    ```
    DE: "Versandkosten: 4,99 €"
    EN: "Shipping: £4.99"
    FR: "Frais de port: 4,99 €"
    ```

    <Tip>
      Nutze professionelle Übersetzer für wichtige Texte - maschinelle Übersetzungen reichen oft nicht aus!
    </Tip>
  </Tab>

  <Tab title="Template-Anpassungen">
    **Custom Template Texte:**

    ```smarty theme={null}
    {* Im Template *}
    <div class="custom-banner">
      <h2>{lang key="custom_banner_title" section="custom"}</h2>
      <p>{lang key="custom_banner_text" section="custom"}</p>
      <a href="#">{lang key="custom_banner_cta" section="custom"}</a>
    </div>
    ```

    **Vorteil:**

    * Texte zentral änderbar
    * Mehrsprachig ohne Template-Änderung
    * Wartungsfreundlich
  </Tab>
</Tabs>

<br />

## Troubleshooting

<AccordionGroup>
  <Accordion title="Änderungen nicht sichtbar">
    **Problem:** Sprachvariablen-Änderungen erscheinen nicht im Frontend

    **Lösung:**

    <Steps>
      <Step title="Cache leeren">
        Backend → System → Cache → Cache leeren
      </Step>

      <Step title="Hard Reload">
        Im Browser: Strg + Shift + R (Windows) oder Cmd + Shift + R (Mac)
      </Step>

      <Step title="Template-Cache">
        Lösche Template-Cache im Dateisystem: `/templates_c/` Ordner leeren
      </Step>

      <Step title="Browser-Cache">
        Leere Browser-Cache oder teste im Incognito-Modus
      </Step>
    </Steps>
  </Accordion>

  <Accordion title="Variable wird nicht gefunden">
    **Symptom:** Variable zeigt Schlüssel statt Text: `custom_my_variable`

    **Ursachen:**

    1. Variable wurde nicht gespeichert
    2. Falsche Sektion angegeben
    3. Schreibfehler im Variablen-Namen
    4. Cache-Problem

    **Überprüfen:**

    ```smarty theme={null}
    {* Mit Fallback testen *}
    {lang key="custom_my_variable" section="custom" default="Fallback Text"}

    {* Wenn Fallback erscheint → Variable existiert nicht *}
    {* Wenn Variablen-Name erscheint → Cache Problem *}
    ```
  </Accordion>

  <Accordion title="Import schlägt fehl">
    **Mögliche Fehler:**

    * Falsche Dateiformat (muss JSON sein)
    * Korrupte JSON-Struktur
    * Falsche Sprache gewählt
    * Datei zu groß

    **Debugging:**

    1. JSON-Datei in Validator prüfen: jsonlint.com
    2. Datei in Text-Editor öffnen und Struktur prüfen
    3. Kleinere Test-Datei versuchen
    4. Browser-Console auf Fehler prüfen

    **JSON validieren:**

    ```bash theme={null}
    # Mit Node.js
    node -e "JSON.parse(require('fs').readFileSync('file.json', 'utf8'))"
    ```
  </Accordion>

  <Accordion title="Platzhalter funktionieren nicht">
    **Problem:** `{0}`, `{1}` werden nicht ersetzt

    **In Smarty:**

    ```smarty theme={null}
    {* Falsch *}
    {lang key="welcome_user" section="custom"}

    {* Richtig *}
    {lang key="welcome_user" section="custom" printf=$userName}

    {* Mehrere Platzhalter *}
    {lang key="order_confirmation" section="custom" 
          printf=$orderNumber|cat:"|":$orderDate}
    ```

    **In PHP:**

    ```php theme={null}
    // Falsch
    $text = Shop::Lang()->get('welcome_user', 'custom');

    // Richtig
    $text = Shop::Lang()->get('welcome_user', 'custom');
    $text = sprintf($text, $userName);
    ```
  </Accordion>
</AccordionGroup>

<br />

## Erweiterte Tipps

<AccordionGroup>
  <Accordion title="Performance-Optimierung">
    **Zu viele Variablen vermeiden:**

    * Gruppiere ähnliche Texte
    * Nutze Platzhalter statt separate Variablen
    * Lösche ungenutzte Custom-Variablen

    **Cache-Strategie:**

    * Ändere Sprachvariablen in Batches
    * Leere Cache nur einmal am Ende
    * Plane Änderungen für wartungsarme Zeiten
  </Accordion>

  <Accordion title="SEO-Optimierung">
    **Meta-Texte als Sprachvariablen:**

    ```
    custom_meta_title_home
    custom_meta_description_home
    custom_meta_keywords_category
    ```

    **Vorteile:**

    * Schnelle A/B-Tests
    * Einfache Mehrsprachigkeit
    * Zentrale Verwaltung

    **Aber beachte:** Individuelle Produkt-/Kategorie-Texte sollten besser in den Stammdaten gepflegt werden!
  </Accordion>

  <Accordion title="Entwickler-Workflows">
    **Versionskontrolle für Variablen:**

    1. Exportiere regelmäßig als JSON
    2. Commite in Git-Repository
    3. Tracke Änderungen über Git
    4. Deploy mit CI/CD-Pipeline

    **Git-Workflow:**

    ```bash theme={null}
    # Export
    php -r "/* Export-Script */" > langvars.json

    # Commit
    git add langvars.json
    git commit -m "Update language variables"

    # Deploy
    git push origin main
    ```
  </Accordion>
</AccordionGroup>

<Check>
  **Erfolg!** Du hast jetzt volle Kontrolle über alle Texte in deinem Shop. Nutze Sprachvariablen für professionelle, wartungsfreundliche und mehrsprachige Shop-Texte.
</Check>

<br />

## Weiterführende Ressourcen

<CardGroup cols={2}>
  <Card title="Smarty Template Engine" icon="code" href="https://www.smarty.net/docs/en/">
    Offizielle Smarty-Dokumentation für Template-Entwicklung
  </Card>

  <Card title="JTL-Shop Entwickler-Doku" icon="book" href="https://guide.jtl-software.de/">
    JTL-Shop Guide für Entwickler und Template-Designer
  </Card>

  <Card title="i18n Best Practices" icon="globe" href="https://www.w3.org/International/questions/qa-i18n">
    W3C Internationalisierung Best Practices
  </Card>

  <Card title="JSON Validator" icon="check" href="https://jsonlint.com/">
    Online Tool zum Validieren von JSON-Dateien
  </Card>
</CardGroup>
