i18n


'I18n' => array(

	'class'	=>	'I18n',

	'urlRulesPath' => dirname(dirname(__FILE__)) . '/I18n/urlRules',

	'supportedLanguages' => array(

		array('code' => 'en', 'name' => 'english', 'fallback' => true),

		array('code' => 'de', 'name' => 'german'),

	),

),



Domain: example.com

de.example.com

Umleitungsfehler

en.example.com

Umleitungsfehler

/etc/hosts


127.0.0.1       www.example.com

127.0.0.1       de.example.com

127.0.0.1       en.example.com



der Fehler tritt hier auf, $redirectUrl enthält die Domain de.example.com und gelangt so in eine Schleife


if (true === isset($redirectUrl))

{

	Yii::app()->request->redirect($redirectUrl);

}

Ich kann momentan nicht selber testen von daher mach mal CVarDumper::dump($matches); direkt nach dem ersten if-statement in der init function.

Zu den neuen Features vom UrlManager mache ich dann nochmal irgendwann ein Cookbook bzw. aktualisiere das Alte. Muss mir das selber erstmal genau angucken. Auf jeden Fall kommt man ohne extra Component oder Controller nicht aus was I18n angeht. Schliesslich muss die Sprache ja auch gesetzt werden etc.


	

public function init()

{

	if (true === (bool)preg_match("/^(?<protocol>(http|https):\/\/)(((?<languageCode>[a-z]{2})\.)*)((.*\.)*(?<domain>.+\.[a-z]+))$/", Yii::app()->request->hostInfo, $matches))

	{

		echo "<pre>";

		CVarDumper::dump($matches);

		echo "</pre>";

	}...




array

(

    [0] => 'http://de.example.com'

    [protocol] => 'http://'

    [1] => 'http://'

    [2] => 'http'

    [3] => 'de.'

    [4] => 'de.'

    [languageCode] => 'de'

    [5] => 'de'

    [6] => 'example.com'

    [7] => ''

    [domain] => 'example.com'

    [8] => 'example.com'

)

Das ist soweit richtig. Dann mach mal




CVarDumper::dump($this->isSupportedLanguage($matches['languageCode']));



wieder nach dem ersten if-statement.


'I18n' => array(

	'class'	=>	'I18n',

	'urlRulesPath' => dirname(dirname(__FILE__)) . '/I18n/urlRules',

	'supportedLanguages' => array(

		array('code' => 'en', 'name' => 'english', 'fallback' => true),

		array('code' => 'de', 'name' => 'german'),

	),

),


echo "<pre>";

CVarDumper::dump($this->isSupportedLanguage($matches['languageCode']));

echo "</pre>";

false

ich habe deinen Code umgeschrieben (sehr provosorisch), aber ich habe ein Problem mit setLanguage und getLanguage.

In der Component kann ich setLanguage setzen und auch auslesen (Beispiel en). Im weiteren Verlauf der Applikation gibt getLanguage stets de zurück




class I18n extends CApplicationComponent

{


	public $supportedLanguages;

	public $urlRulesPath;

	public $activeLanguage;


	public function init()

	{

		Yii::app()->setLanguage("en");

	}

}



// protected/components/langBox.php




<?php

class LangBox extends CWidget

{

    public function run()

    {

    	echo Yii::app()->getLanguage();

        $currentLang = Yii::app()->language;

        $this->render('langBox', array('currentLang' => $currentLang));

    }

}

?>



http://www.yiiframework.com/doc/cookbook/26/

// Liefert de zurück