Как переключать локали/языки для разных пользователей

Я разработал веб-приложение. Оно работает для двух разных пользователей, скажем, user1 и user2, и обоим пользователям нужны view на разных языках.

Я изучил yii:t(), но с помощью этого метода мы должны определить язык в main.config, который устанавливает один и тот же язык для обоих пользователей.

Как я могу перевести свое представление на разные языки для обоих пользователей?


person Rohitashv Singhal    schedule 11.01.2013    source источник


Ответы (2)


Я надеюсь, что это может вам помочь: вам нужно отредактировать urlmanager.php в ваших компонентах, если файла нет, вам нужно его создать.

Проверьте этот URL: Многоязычный

Спасибо.

person Coder anonymous    schedule 11.01.2013
comment
Эй, кодер, я работал над этой ссылкой, когда я нажимаю на любую языковую ссылку в своем пользовательском интерфейсе, выдает ошибку, например, url: site/logout not found, мой URL находится по адресу ?r=site/logout, что следует я делаю для этого - person Rohitashv Singhal; 12.01.2013

Поместите это в свой 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);
}

Отредактируйте правила менеджера URL-адресов конфигурации 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

Статьи по Теме:

Связанные модули:

person Samuel Liew♦    schedule 11.01.2013
comment
Привет, Самуэль, когда я использую URL localhost/Snitch-appointpress/Appointpress/lang/en тогда я получаю сообщение об ошибке. Запрошенный URL-адрес /Snitch-appointpress/Appointpress/lang/en не найден на этом сервере. - person Rohitashv Singhal; 12.01.2013