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

Yii2 create multilingual site for ajax search fields

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

首先为您的网站设置多语言有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',
],

然后创建 components\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. you can find demo and configuration on this link