請教多語網站設計

請教:

我想作一個多語系網站 可以切換 英文 簡體中文 繁體中文 日文 等語系切換功能

但我又不想在 給個連接網址上 都加上 &lang=xxxx 這個變數傳遞的方式 單又不採用session 以免造成性能降低

要使用 cookie

但 Yii 的 cookie 有加密防駭功能

我在 main.php

return array(

'basePath'=>dirname(__FILE__).DIRECTORY_SEPARATOR.'..',


'name'=>'site',


'defaultController'=>'site',





// preloading 'log' component


'preload'=>array('log'),





// autoloading model and component classes


'import'=>array(


	'application.models.*',


	'application.components.*',


	'application.extensions.*',


	'system.zii.widgets.*',


),





// application-level parameters that can be accessed


// using Yii::app()->params['paramName']


//'params'=>require(dirname(__FILE__).'/params.php'),


'language'=>empty($_GET['lang'])?Yii::app()->request->cookies['lang']->value:$_GET['lang'],


'theme'=>'hundred',





// application components


'components'=>array(


	'log'=>array(


		'class'=>'CLogRouter',


		'routes'=>array(


			array(


                //'class'=>'CFileLogRoute', 


				'class'=>'CDbLogRoute',


				'levels'=>'trace, info, error, warning, myInfo',


				//'categories'=>'system.*',


				//'categories'=>'system.db.*',


				'autoCreateLogTable' => true,


				'connectionID'=>'db',


				'logTableName' => 'DBlog',


			),


		),


	),





	'request'=>array(


		'enableCookieValidation'=>true,


		'enableCsrfValidation'=>true,


	),





),

);

上面 ‘language’=>empty($_GET[‘lang’])?Yii::app()->request->cookies[‘lang’]->value:$_GET[‘lang’],

這一行 因為 Yii 尚未執行 所以 Yii::app()->request->cookies[‘lang’]->value 會讀不到數據

這樣 我就不能運用到 cookie 的變數

只能 每個地方的連接點 都加上 &lang=xxxx 只能這樣嗎?

請問有大大可以提供 變通方式嗎?

謝謝

你可以直接访问$_COOKIE来绕过yii的cookie保护。

你也可以考虑把语言参数映射到主机名上,例如en.example.com, zh.example.com,这样url里就不需要额外的参数了,因为一般的url都是用的相对路径。

$_COOKIE 好像在不同的 class xxxxController extends CController

都會被清掉 無法共用!!??

發現 $_SESSION也是 只要 換了頁面舊的數據都會被清掉 這是正常的?(我是使用 1.1版)

如果是正常的 那 要利用SESSION 存一些數據 不就會有誤??變成都要重新儲存一次??

以處理

因為’enableCookieValidation’=>true, 所以我要改成 language’=>empty($_GET[‘lang’])?substr($_COOKIE[‘lang’], 40):$_GET[‘lang’],

不然 不能用單純的 $_COOKIE 作處理

一定要用 Yii 的 cookie 設定