# 5. Sprache und Leserichtung #

← Designs · Inhalt · Übergreifende Funktionen →

Die Komponenten bringen ihre eigenen Oberflächenbeschriftungen mit: Kontextmenüs, Dialogschaltflächen, Aktionen der andockbaren Panels, Tooltips der Symbolleisten… Diese Zeichenfolgen werden von der Bibliothek übersetzt, ohne dass Sie sie liefern müssen.

## 5.1 Die Sprache wählen #

Die Sprache gilt prozessweit. Legen Sie sie einmalig im Anwendungsobjekt fest, bevor das erste Fenster geöffnet wird:

    // open-Event des Anwendungsobjekts
    PBT_SetLanguage("fr")

Code | Sprache
--- | ---
`en` | Englisch (Standard)
`fr` | Französisch
`de` | Deutsch
`it` | Italienisch
`es` | Spanisch
`pt` | Portugiesisch

Das Wörterbuch wird vor der ersten Darstellung jeder Komponente eingespielt: Es blitzt keine englische Beschriftung auf, bevor die Übersetzung erscheint. Ein Wechsel im laufenden Betrieb ist möglich — alle geöffneten Komponenten werden sofort neu beschriftet.

    // Sprachumschaltung ueber ein Menue der Anwendung
    PBT_SetLanguage("de")

> Eine Sprache lässt sich nicht komponentenweise einstellen: Eine Anwendung zeigt immer nur eine Sprache an. Das ist eine bewusste Entscheidung (Einheitlichkeit der Oberfläche), anders als beim Design, das lokal überschrieben werden kann.

## 5.2 Eine Beschriftung anpassen: `of_set_translation` #

Sie sind nicht an die mitgelieferten Wörterbücher gebunden. `of_set_translation(Schlüssel, Text)` überschreibt eine Zeichenfolge der Oberfläche, mit Vorrang vor dem Sprachwörterbuch:

    // Fachvokabular: von "Bereichen" statt von "Panels" sprechen
    uo_dock.of_set_translation("dock.float", "Bereich abdocken")
    uo_dock.of_set_translation("dock.autohide", "Bereich ausblenden")
    uo_dock.of_set_translation("dock.closePanel", "Bereich schliessen")

Zwei Anwendungsfälle:

- Das Vokabular anpassen an die Fachlichkeit Ihrer Anwendung („Bereiche“ statt „Panels“, „Filialen“ statt „Gruppen“).
- Eine nicht mitgelieferte Sprache bedienen: Legen Sie Ihre eigenen Übersetzungen Schlüssel für Schlüssel fest, in der Sprache Ihrer Wahl, aus Ihrer eigenen Übersetzungstabelle.

    // Eine eigene Sprache aus Ihrem Uebersetzungsbestand versorgen
    uo_dock.of_set_translation("dock.float", of_traduire("DOCK_DETACHER"))
    uo_dock.of_set_translation("dock.show",  of_traduire("DOCK_AFFICHER"))

Die Überschreibung wird auf der Instanz gesetzt; `of_reset()` hebt sie auf.

### Die Schlüsselfamilien #

Die Schlüssel folgen der Form `<Bereich>.<Name>`. Die wichtigsten Familien:

Präfix | Betrifft
--- | ---
`dock.*` | Andockbare Panels: abdocken, ausblenden, schließen
`toolbar.*` | Symbolleiste: Leiste verschieben, Überlauf
`tab.*` | Registerkarten: schließen
`tile.*` · `tilesbox.*` | Kacheln: Größen, Meldung „keine Kachel“
`ribbon.*` | Menüband: minimieren, erweitern
`mb.*` | Meldungsfenster: Standardschaltflächen, Kennwort anzeigen / ausblenden
`webbrowser.*` | Webbrowser: Kontextmenü (zurück, vorwärts, neu laden)
`picture.*` | Bild: Hinweis zum Verschieben
`sb.*` | Statusleiste: ihr Name für Screenreader
`color.*` | Farbauswahl: OK / Abbrechen

> 💡 Um den genauen Schlüssel hinter einer Beschriftung zu ermitteln, öffnen Sie die Demo-Anwendung auf Englisch und dann in einer anderen Sprache: Die Zeichenfolge, die sich ändert, stammt aus dem Wörterbuch. Die vollständige Schlüsselliste wird mit der Bibliothek ausgeliefert.

## 5.3 Leserichtung: von links nach rechts / von rechts nach links #

Für Sprachen, die von rechts nach links geschrieben werden (Arabisch, Hebräisch), kippt ein einziger Aufruf die gesamte Anwendung:

    // open-Event des Anwendungsobjekts
    PBT_SetFlowDirection("rtl")     // "ltr" ist der Standard

Was sich dadurch in allen Komponenten ändert, den heutigen wie den künftigen:

- die natürliche Ausrichtung von Texten und Beschriftungen;
- die Reihenfolge der Spalten, der Registerkarten, der Schaltflächen in der Symbolleiste;
- die Seite der Symbole, der Aufklapppfeile, der Chevrons;
- die Seite der Bildlaufleisten und der seitlichen Panels;
- die Richtung der Dropdown-Menüs und der Popups.

    // Umschalten im laufenden Betrieb
    PBT_SetFlowDirection("ltr")

Wie das Design und die Sprache wird die Leserichtung vor der ersten Darstellung eingespielt: Eine nach dem Umschalten erzeugte Komponente kommt bereits in der richtigen Richtung zur Welt.

> ⚠️ Die Leserichtung betrifft ausschließlich die PBToolboxAI-Komponenten. Die nativen PowerBuilder-Steuerelemente Ihrer Fenster (Eingabefelder, DataWindows) bleiben in Ihrer Verantwortung.

## 5.4 RTL-tauglichen Code schreiben #

Die Spiegelung erfolgt automatisch für das Layout. Für die Werte, die Sie selbst setzen, kann sie das nicht: Wenn Sie `"left"` fest verdrahten, steht es in beiden Leserichtungen links.

Deshalb verwenden alle Platzierungseigenschaften der Bibliothek logische und keine physischen Werte:

Logischer Wert | Bei Schrift links → rechts | Bei Schrift rechts → links
--- | --- | ---
`start` | links | rechts
`end` | rechts | links

Sie werden als Konstanten bereitgestellt und sind an dem Objekt zu lesen, dem Sie den Wert zuweisen:

    // Textausrichtung, Position eines Bandes...
    uo_titre.is_align      = uo_titre.ALIGN_START
    uo_onglets.is_position = uo_onglets.POSITION_START

Die betroffenen Familien: `ALIGN_START` / `ALIGN_END` (statictext, statusbar, picture), `POSITION_START` / `POSITION_END` (tab, dockcontainer), `MARQUEE_START` / `MARQUEE_END` (statictext).

> Die alten physischen Werte `"left"` und `"right"` werden weiterhin überall akzeptiert: Ihr bestehender Code funktioniert unverändert weiter. Sie sind lediglich festgelegt — sie kippen in `rtl` nicht um.

### Die zwei bewussten Ausnahmen #

Manche Platzierungen haben keinen „Leseanfang“: Sie bleiben physisch, und das ist Absicht.

- Toaster — ein Toast ist ein Systemfenster, das an einer Bildschirmecke verankert ist. `POSITION_BOTTOM_RIGHT` bezeichnet eine physische Ecke, nicht ein Textende.
- Die Zeichenflächen — Organigramm, Flussdiagramm, Knotengraph, Bildzuschnitt: Dort platzieren Sie Elemente an `x`/`y`-Koordinaten. Eine kartesische Ebene dreht sich nicht mit der Sprache um; nur die Beschriftungen darin folgen der Leserichtung.

## 5.5 Zusammenfassung #

Einstellung | Geltungsbereich | Wo aufzurufen
--- | --- | ---
`PBT_SetLanguage (string as_lang)` | Gesamter Prozess | `open` des Anwendungsobjekts
`of_set_translation (string as_clé, string as_texte)` | Eine Instanz | Nach dem Erzeugen der Komponente
`PBT_SetFlowDirection (string as_sens)` | Gesamter Prozess | `open` des Anwendungsobjekts

Die drei globalen Einstellungen — Design, Sprache, Leserichtung — werden gemeinsam an derselben Stelle festgelegt:

    // open-Event des Anwendungsobjekts
    PBT_SetLicense(gs_titulaire, gs_cle_licence)
    PBT_SetDefaultTheme("fluent-light")
    PBT_SetLanguage("fr")
    PBT_SetFlowDirection("ltr")
    PBT_Warmup()

    Open(w_principale)

← Designs · Inhalt · Übergreifende Funktionen →