Das PHP CMS / Framework Silverstripe bietet eine einfache Möglichkeit, mehrsprachige Seiten zu verwalten. Standardmäßig ist diese Funktion ausgeschaltet, sie kann aber bei Bedarf einfach aktiviert werden.
Dazu sind bei einer Silverstripe 2.4 Installation folgende Einträge in der mysite/_config.php nötig:
Translatable::set_default_locale("de_DE");
Object::add_extension('SiteTree', 'Translatable');
Object::add_extension('SiteConfig', 'Translatable');
Das wars
Wenn man nach einem /dev/build das Admininterface aufruft, sieht man im CMS ein Auswahlfeld, dass alle möglichen Sprachen (Locales) anbietet.
Wem das zu viel ist, weil er nur zwei oder drei Sprachversionen für sein Projekt braucht, der kann die i18n::$common_locales mit den erlaubten Sprachen füttern, z.B.:
$allowed_locales = array(
'de_DE' => array('German', 'Deutsch'),
'en_US' => array('English', 'English'),
'fr_FR' => array('French', 'Français'),
'es_ES' => array('Spanish', 'Español')
);
i18n::$common_locales = $allowed_locales;
Und schon haben wir nur noch die benötigten Sprachen im Auswahlfeld:
Einen "Schönheitsfehler" haben wir noch: im <head> des HTML-Dokuments steht noch lang="en". Um den Suchmaschinen die verwendete Sprache zu sagen müssen wir in der /themes/mytheme/templates/Page.ss folgendes einsetzen:
<html lang="$ContentLocale">
Somit ist auch dieser Wert immer mit der aktuellen Sprache der jeweiligen Seite gesetzt.
Mehr zum Thema Internationalisierung (i18n) bzw. Lokalisierung / Mehrsprachigkeit gibts in der Silverstripe Hilfe.