如何为不同的用户切换区域设置/语言

时间:2013-01-11 05:25:58

标签: yii translation yii-extensions yii-modules

我设计了一个网络应用程序,它适用于两个不同的用户user1user2,并且两个用户都需要不同语言的view

我已经研究了yii:t()但是通过这种方法,我们必须在main.config中定义语言,为两个用户设置相同的语言。

如何为两位用户翻译不同语言的观点?

2 个答案:

答案 0 :(得分:2)

我希望这可以帮到你: 你需要在你的组件中编辑urlmanager.php,如果没有文件,你需要创建一个。

检查此网址:Multilingual

感谢。

答案 1 :(得分:1)

将其放入 SiteController.php

public function actionChangeLocale($locale) {

    // (OPTIONAL) if is registered user (not guest), save preferred locale in database 
    if (!Yii::app()->user->isGuest) {

        // Update user settings
        $uid = Yii::app()->user->id;
        User::model()->updateByPk($uid, array('locale' => $locale));
    }

    // change locale
    Yii::app()->user->setState('_locale', $locale);

    // redirect to previous page, in the new locale
    if(isset($_SERVER["HTTP_REFERER"]))
        $referrer = $_SERVER["HTTP_REFERER"];
    else
        $referrer = Yii::app()->getBaseUrl(true) . '/';

    $this->redirect($referrer);
}

修改 main.php 配置网址管理器规则:

'urlManager' => array(
    'urlFormat' => 'path',
        'showScriptName' => false,
        'caseSensitive' => false,
        'rules' => array(
             'lang/<id:\w+>' => 'site/changeLocale',

要更改区域设置,请创建一个链接以将用户指向所需的区域设置:

http://www.mysite.com/myapp/lang/en
http://www.mysite.com/myapp/lang/zh
http://www.mysite.com/myapp/lang/ja
http://www.mysite.com/myapp/lang/in
...

如果您已将登录用户的首选区域设置保存在数据库中,请将其添加到 SiteController.php 登录操作:

    $uid = Yii::app()->user->id;
    $user = User::model()->findbypk($uid);

    $userLocale = isset($user->locale) ? $model->locale : Yii::app()->language;
    Yii::app()->user->setState('_locale', $userLocale);

以上用法适用于使用htaccess重写的用户。确保基本 .htaccess 文件为:

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/$ http://%{HTTP_HOST}/$1 [R=301,L] # Remove trailing slash

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php

相关文章:

相关模块: