Übersetzung der Website

So… gleich noch eine Frage =)

Und zwar muss ich ein multilinguales CMS schreiben. Dabei bin ich auf das folgende gestoßen:

http://www.yiiframew…oc/cookbook/26/

Dieser Link ist ganz hilfreich, um die Auswahl der Sprache zu steuern. Der Einbau hat auch eingermaßen problemlos funktionert, man beachte dabei aber unbedingt die Kommentare!

Nun wird aber leider nicht alles übersetzt, was ich sehr strange finde. Daher frage ich mich, wie genau die Übersetzung denn funktioniert! Ich habe schon die Sprachfiles im Yii-Framework-Ordner (z.b. framework/messages/de/yii.php) gefunden. Was wird aber genau mit den darin stehen Informationen gemacht? Ein Replace-All wird aber wohl nicht auf die fertige HTML-Seite angewendet?

mfg

armin

Was wird denn nicht übersetzt? Ich werd mal prüfen, ob die messages für Deutsch auf dem aktuellen Stand ist. Dort sind aber nur die Nachrichten von Yii-Komponenten hinterlegt. Alles andere muss man mit Yii::t() selbst übersetzen.

ab wenn genau wird eigentlich übersetzt bzw. wie genau funktioniert das? ich denke nicht, dass erst die komplette html-seite gerendert wird und dann da drüber ein parser läuft?

Übersetzt wird bei jedem Aufruf der Methode Yii::t(). Yii verwendet diese intern bereits um alle Systemmeldungen u.ä. zu übersetzen.

Bei deinen eigenen Seiten kommt Yii::t() meist in Viewdateien vor, etwa so:



<h1><?php echo Yii::t('navi','Hauptmenü') ?></h1>


<p><?php echo Yii::t('navi','Bitte wählen Sie') ?>:</p>


<ul>


<li><a href="impressum.php"><?php echo Yii::t('content','Impressum') ?></li>


...


Immer wenn die Viewdatei gerendert wird, wird für jeden Textschnippsel Yii::t() aufgerufen und die korrekte Übersetzung zurückgeliefert. Zur besseren Organisierung muss als erster Parameter eine Kategorie übergeben werden. Damit landen dann alle zu übersetzenden Texte aus einer Kategorie im selben Katalog und der Übersetzer tut sich leichter, Sachen zuzuordnen.

Für Details, wo die zu übersetzenden Sachen dann landen, bitte auch mal die entsprechende Seite im Handbuch durchlesen:

http://www.yiiframew…/de/topics.i18n

Irgendwie ists komisch… bei mir wird nichts übersetzt, wenn ich den Code einbinde und per ComboBox umschalte. Ich kann gerne einen Screenshot anhängen, oder Code, aber ich denke des wird nichts bringen. Hier meine views/site/login.php:

<?php


// -----------------------------------------------------------------------------





// Titel der Website setzen


$this->pageTitle=Yii::app()->name . ' - Login';





// -----------------------------------------------------------------------------


?>





<div class="container-entry">


	<h1>Login</h1>





	<div class="text">





		<div class="yiiForm">


		<?php echo CHtml::beginForm(); ?>





		<?php echo CHtml::errorSummary($form); ?>





		<div class="simple">


		<?php echo CHtml::activeLabel($form,'username'); ?>


		<?php echo CHtml::activeTextField($form,'username') ?>


		</div>





		<div class="simple">


		<?php echo CHtml::activeLabel($form,'password'); ?>


		<?php echo CHtml::activePasswordField($form,'password') ?>


		</div>





		<div class="action">


		<?php echo CHtml::activeCheckBox($form,'rememberMe'); ?>


		<?php echo CHtml::activeLabel($form,'rememberMe'); ?>


		<br/>


		<?php echo CHtml::submitButton('Login'); ?>


		</div>





		<?php echo CHtml::endForm(); ?>





		</div><!-- yiiForm -->





	</div>


</div>

Ich habe diese nur ein wenig umgebaut, aber die Label-Beschriftungen bleiben immer gleich, auch das "Remember me next time"… Muss ich da selbst noch hand anlegen?

Es fehlt Yii::t(). Die Labels hast du ja vermutlich in den zugehörigen ActiveRecords unter attributeLabels hinterlegt. Dort muss dann der Aufruf von Yii::t() für jedes Label erfolgen. Yii weiß ja sonst nicht, was genau du übersetzen möchtest.

achso… ich hab gedacht, dass das bei dan standardmodulen das automatisch macht. werde mir das dann nochmals anschauen! danke.

Siehe auch diesen Beitrag, da hab ich nochmal ausführlich alles zusammengefasst, was man so beachten muss:

http://www.yiiframew…6.html#msg13856

vielen dank =) das ist echt klasse!