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

Php Yii2为ajax搜索字段创建多语言站点,php,yii2,frameworks,multilingual,Php,Yii2,Frameworks,Multilingual,我正在使用Yii2,我想创建一个能够执行快速搜索的web应用程序。 例如,当我在文本框中键入字符时,将显示结果。 当我们只有一种语言时,使用ajax很容易,但在多语言模式下如何?首先为您的站点设置多语言,这是非常有用的 为您的站点自动支持多语言的最佳方法是使用cookies变量作为语言。您可以根据需要从任何操作设置语言cookie public function actionLanguage() { if (isset($_POST['lang'])) { $lan

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

首先为您的站点设置多语言,这是非常有用的

为您的站点自动支持多语言的最佳方法是使用cookies变量作为语言。您可以根据需要从任何操作设置语言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));
    }
}
我所做的是将网站的所有语言支持放在数据库中,生成必要的cookies变量,并将其放在客户端浏览器上

下一个设置是在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;

    }
  }
}
这将创建依赖于客户端的站点语言,因为它依赖于客户端的cookies

然后根据站点语言创建搜索控制器\yii::$app->language

对于ajax搜索,您可以使用小部件。你可以在这个网站上找到演示和配置