将语言作为变量传递为yii中的url参数

时间:2013-04-05 07:55:32

标签: php internationalization yii

我遇到了yii的问题,看起来非常简单,但我找不到合适的解决方案。我需要在网页上做I18N并且我正在使用yii,我已经完成了翻译,我发现可以在控制器类中轻松更改语言:

class Controller extends CController
{
    function init() {
        parent::init();
        if(isset($_GET['lang'])) {
            Yii::app()->language = 'lt';
        }
    }
}

一切都很好,但显然当url不包含语言参数时,语言参数会丢失。一种方法是在整个网站的所有网址中添加参数,但这似乎不是解决方案。

是否有更多静态方式传递参数?也许在yii的UrlManager中有一些选项?或者也许还有另一种更动态地改变语言的方式?

3 个答案:

答案 0 :(得分:1)

如果只有在get-request缺席的情况下才会使用会话怎么办? 但是在同一个网址上显示不同的内容仍然是个坏主意。

    if(isset($_GET['lang'])) {
          $app->session['language'] = 'lt';
    } elseif($app->session->contains('language')) {
          $app->language = $app->session['language'];
    }

答案 1 :(得分:0)

您可以轻松将其添加为url manager规则的静态参数。我建议使用/en/controller/action等格式的网址,因此第一个参数始终是语言。我长时间使用这种方法,就像一个魅力。

有关详细信息,请查看以下答案:https://stackoverflow.com/a/4625710/133408

答案 2 :(得分:0)

一个非常简单的解决方案是使用会话数据来记住用户跨页面的语言选择:

function init() {
    parent::init();
    $app = Yii::app();

    // If "lang" is specified, remember that
    if(isset($_GET['lang'])) {
        $app->session['language'] = 'lt';
    }

    // If we remember a language put it in use
    if($app->session->contains('language')) {
        $app->language = $app->session['language'];
    }

}