0

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

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

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

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

4

3 回答 3

1

如果你只在没有获取请求的情况下使用会话呢?但是在同一个 url 上显示不同的内容仍然是个坏主意。

    if(isset($_GET['lang'])) {
          $app->session['language'] = 'lt';
    } elseif($app->session->contains('language')) {
          $app->language = $app->session['language'];
    }
于 2013-12-11T06:56:55.527 回答
0

您可以轻松地将其作为静态参数添加到 url 管理器规则中。我建议在表单等中使用 url /en/controller/action,因此第一个参数始终是语言。我使用这种方法很长时间了,而且效果很好。

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

于 2013-04-05T08:31:17.197 回答
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'];
    }

}
于 2013-04-05T08:31:50.433 回答