使用Yii,并试图将Lang=xx附加到当前页面url的末尾,并将其呈现在页面上。
我把下面的代码放在protected/views/layout/main.php
<?php echo CHtml::link('English', array('','lang'=>'en'), array('class'=>'en')) ?>
<?php echo CHtml::link('中文', array('','lang'=>'tw'), array('class'=>'tw')) ?>
<?php echo CHtml::link('日本語', array('','lang'=>'jp'), array('class'=>'jp')) ?>
对于像"/site/index"这样的标准页面,或者像"/site/contact"这样的控制器动作页面,它们工作得很好。但是对于标准的静态页面,如"站点/页面?"View =about",它不起作用。预期的url应该是类似于"site/page?view=about〈tw"的东西,但是它给了我"site/page?lang=tw"。
我怎样才能解决这个问题?
我最终用langhandeler扩展和url规则和map [site]/[path]?Lang =[语言代码]to [site]/[语言代码]/[path]
然后我将链接编码如下:
<?php
$request = $_SERVER['REQUEST_URI'];
$path_a = explode("/",$request);
$haveLang = isSet($_GET["lang"]);
$uri = ($haveLang?
substr($request, strlen($path_a[1])+1) //strip language prefix and the slash
:$request); //don't process if the page is in default language
echo CHtml::link(CHtml::encode(Yii::app()->name), CHtml::normalizeUrl(($haveLang?'/'.$_GET["lang"].'/':'/')), array('id'=>'logo'));
?>
<div id="lang_switch">
<?php
echo CHtml::link('English', CHtml::normalizeUrl($uri), array('class'=>'en')); //no need to add default language prefix
echo CHtml::link('中文', CHtml::normalizeUrl('/tw'.$uri), array('class'=>'tw'));
echo CHtml::link('日本語', CHtml::normalizeUrl('/jp'.$uri), array('class'=>'jp'));
?>
</div>
基本上解决了我的问题。我希望这能在将来帮助到其他人。
你可以给这样的html链接
$language = 'en';
CHtml::link("English", array('site/about/lang/' . $language));
site/about/lang/en = controller/action/lang/en