SideBarMenu

I18N

Seit Stud.IP 3.5 gibt es die Möglichkeit, Datenbankinhalte internationalisiert abzuspeichern. Die entsprechende Funktionalität kann mit SimpleORMap-Klassen einfach verwendet werden, ohne dass viel Code geschrieben werden muss. Im Folgenden wird anhand eines Beispieles gezeigt, wie bestimmte Felder einer SimpleORMap-Klasse internationalisiert werden können.

Beispiel zur Internationalisierung

Im Folgenden wird die SimpleORMap-Klasse ResourceProperty um zwei internationalisierte Felder erweitert. ResourceProperty speichert Ressourceneigenschaften und besitzt die Felder "description" für eine Beschreibung der Eigenschaft und "display_name", um den anzuzeigenden Namen der Eigenschaft zu definieren.

Anpassung der SimpleORMap-Klasse

In der statischen configure-Methode werden zum assoziativen Array $config die folgenden Einträge hinzugefügt:

$config['i18n_fields']['display_name'] = true;
$config['i18n_fields']['description'] = true;

Damit wurde die SimpleORMap-Klasse bereits auf internationalisierte Datenfelder angepasst.

Benutzung im View

Internationale Datenfelder werden angezeigt, indem statische Methoden der I18N-Klasse aufgerufen werden, welche die passenden HTML-Eingabefelder erzeugen.

Für das Feld "description" ist eine Textarea notwendig, für "display_name" hingegen ein einfaches Eingabefeld. Im View wird zur Anzeige der Felder folgender Code eingefügt:

<label>
    <?= _('Beschreibung')?>
    <?= I18N::textarea('description', $property->description) ?>
</label>
<label>
    <?= _('Angezeigter Name') ?>
    <?= I18N::input('display_name', $property->display_name) ?>
</label>

Damit werden die internationalisierten Datenfelder in den passenden Eingabefeldern angezeigt. Die Methoden I18N::textarea und I18N::input nehmen als ersten Parameter den Namen des Feldes im HTML-Formular, der als name-Attribut zu den Eingabefeldern hinzugefügt wird und als zweiten Parameter den Wert des Feldes.

Verarbeiten von Eingaben

Wurde ein HTML-Formular abgesendet, in dem internationalisierte Datenfelder vorhanden sind, so werden die Inhalte der Datenfelder mit der Methode Request::i18n statt Request::get ausgelesen. Die Inhalte können dann direkt den Datenbankfeldern der SimpleORMap-Klasse zugewiesen werden. Im Falle der als Beispiel genutzten ResourceProperty-Klasse sieht dies so aus:

//Einlesen der Datenfelder aus dem Request:
$description = Request::i18n('description');
$display_name = Request::i18n('display_name');

//Zuweisen zum ResourceProperty-Objekt:
$property->description = $description;
$property->display_name = $display_name;

//Speichern:
if ($property->isDirty()) {
    $property->store();
}

Letzte Änderung am 18.09.2018 12:06 Uhr von strohm.