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
我正在使用 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