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();
}