【发布时间】:2018-04-09 07:50:51
【问题描述】:
我正在使用Yii2,我想创建一个能够执行快速搜索的 Web 应用程序。
例如,当我在文本框中键入字符时,会显示结果。
当我们只有一种语言时,ajax 很容易,但是在 多语言 模式下呢?
【问题讨论】:
标签: php yii2 frameworks multilingual
我正在使用Yii2,我想创建一个能够执行快速搜索的 Web 应用程序。
例如,当我在文本框中键入字符时,会显示结果。
当我们只有一种语言时,ajax 很容易,但是在 多语言 模式下呢?
【问题讨论】:
标签: php yii2 frameworks multilingual
首先为您的网站设置多语言有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)创建你的搜索控制器
【讨论】: