1. Setze sourceLanguage in der Konfig auf die Quellsprache deiner Anwendung
Das führt dazu, dass alle Systemnachrichten in dieser Sprache ausgegeben werden.
<?php
return array(
// ...
'sourceLanguage'=>'de'
// ...
);
2. Setze die Zielsprache der Anwendung mit language
Das geschieht normalerweise irgendwo im Code. Wie in diesem Cookbook-Artikel beschrieben, kann man das in einem Basiscontroller platzieren. Alle deine Controller müssen dann von diesem Basiscontroller abgeleitet werden, nicht mehr von CController:
<?php
class BaseController extends CController{
public function init(){
parent::init();
$app = Yii::app();
// Nur gültige Sprachen erlaubt!
if (isset($_POST['lang']) && in_array($_POST['lang'],array('en','de','fr')) ) {
$app->language = $_POST['lang'];
$app->session['lang'] = $app->language;
} else if (isset($app->session['lang'])) {
$app->language = $app->session['lang'];
}
}
}
Dieser Code prüft auf $_POST[‘lang’] und speichert bzw. liest die aktuelle Sprache in bzw. aus der Session. Im View braucht man noch irgendwo ein Dropdown zur Auswahl (evlt. direkt im layout, damit es auf allen Seiten angezeigt wird):
<?php echo CHtml::form() ?>
<?php echo CHtml::dropDownList('lang', Yii::app()->language, array(
'de' => 'Deutsch', 'en' => 'Englisch','fr'=>'Französisch'), array('submit' => '')) ?>
<?php echo CHtml::endForm() ?>
Das ganze kann man je nach Bedarf auch ganz anders lösen, z.B. mit einem eigenen Widget.
3. Erstelle die Nachrichtenquellen
Standardmäßig verwendet Yii CPhpMessageSource und sucht nach Übersetzungsdateien in protected/messages/en/kategorieX.php (für Sprache ‘en’ und Kategorie ‘kategorieX’). Diese Datei kann man mit yiic automatisch erzeugen lassen. Dazu braucht man aber eine weitere Konfigurationsdatei:
<?php
return array(
'sourcePath'=>dirname(__FILE__).DIRECTORY_SEPARATOR.'..',
'messagePath'=>dirname(__FILE__).DIRECTORY_SEPARATOR.'..'.DIRECTORY_SEPARATOR.'messages',
'languages'=>array('en','fr'),
'fileTypes'=>array('php'),
'exclude'=>array( '/runtime'),
'translator'=>'Yii::t'
);
Wichtig ist hier evtl. der Wert translator. Hier gibt man an, wie die Funktion heisst, die man zum Übersetzen verwendet. Nur so kann yiic die zu übersetzenden Nachrichten finden.
Um die Nachrichtenquellen zu erzeugen ruft man dann diesen Befehl auf:
cd protected;
./yiic message config/messages.php
Jetzt finden sich unter protected/messages/… die vorgefertigten Übersetzungsdateien. Hier muss dann Begriff für Begriff übersetzt werden.
Danach ist man dann aber endlich fertig und die Sprachumschaltung läuft sauber.