【问题标题】:Yii2 create multilingual site for ajax search fieldsYii2 为 ajax 搜索字段创建多语言站点
【发布时间】:2018-04-09 07:50:51
【问题描述】:

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

【问题讨论】:

    标签: php yii2 frameworks multilingual


    【解决方案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 变量并将其放在客户端浏览器中。

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

     '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 小部件。你可以在这个link 上找到演示和配置

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-31
      • 2014-09-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-03
      相关资源
      最近更新 更多