Yii2为ajax搜索字段创建多语言网站

时间:2018-04-09 07:50:52

标签: php yii2 frameworks multilingual

我正在使用Yii2,我想创建一个能够执行快速搜索的网络应用程序。
例如,当我在文本框中键入字符时,会显示结果 当我们只有一种语言但{strong> 多语言 模式下如何?{/ 1>}时,ajax会很容易?

1 个答案:

答案 0 :(得分:1)

首先为您的网站设置多语言,doc为此。

为您的网站自动支持多语言的最佳方式是使用Cookie变量进行语言。您可以通过任何操作设置语言Cookie

   public function actionLanguage()
{
    if (isset($_POST['lang'])) {
        $language = $_POST['lang'];

        if (($langaugeModel = \app\models\Langauge::findOne(['name' => $language])) !== null) {
            $varLang = [
                    'id' => $langaugeModel->id,
                    'name' => $langaugeModel->name,
                    'iso1' => $langaugeModel->iso1,
                    'iso2' => $langaugeModel->iso2
                ];
            $cookies = new Cookie([
                'name' => 'lang',
                'value' => json_encode($varLang),
            ]);
            yii::$app->getResponse()->getCookies()->add($cookies);
            return $this->goBack((!empty(Yii::$app->request->referrer) ? Yii::$app->request->referrer : null));
        } else {
            throw new NotFoundHttpException('The requested langauge does not exist.');
        }

    } else {
            return $this->goBack((!empty(Yii::$app->request->referrer) ? Yii::$app->request->referrer : null));
    }
}

我在这里做的是将网站的所有语言支持放在数据库中并生成必要的cookie变量并将其放在客户端浏览器上。

接下来在config / web.php文件中将您的yii2站点的请求事件设置为

 'as beforeRequest' => [
   'class' => 'app\components\MyBehavior',
],

然后创建组件\ Mybehaviou.php文件并放置此代码

  namespace app\components;
  use yii;
  use yii\base\Behavior;
  class MyBehavior extends Behavior
   {
     public function events(){
       return [
           \yii\web\Application::EVENT_BEFORE_REQUEST => 'myBehavior',
         ];
       }
    public function myBehavior(){
    if (\yii::$app->getRequest()->getCookies()->has('lang')) {
        $langIso = 'sdn';
        \yii::$app->language = $langIso;
        $langaugeVar = \yii::$app->getRequest()->getCookies()->getValue('lang');

        $langauge = json_decode($langaugeVar);
        $langIso = $langauge->iso2;

        \yii::$app->language = $langIso;

    }
  }
}

这会创建取决于客户端的站点语言,因为它取决于客户端的cookie。

然后根据网站语言(\ yii :: $ app-> language)

创建搜索控制器

对于ajax搜索,您可以使用select2 Widget。您可以在此link

上找到演示和配置