Skip to content

Commit 8153ced

Browse files
dev
1 parent 3a460ab commit 8153ced

File tree

2 files changed

+37
-60
lines changed

2 files changed

+37
-60
lines changed

src/MultiLangComponent.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ class MultiLangComponent extends \yii\base\Component
1919
/**
2020
* @var array доступные языки
2121
*/
22-
public $langs = ['ru', 'en'];
22+
public $langs = ['ru', 'en', 'es'];
2323

2424
/**
2525
* @var string язык проекта по умолчанию

src/MultiLangRequest.php

Lines changed: 36 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88

99
namespace skeeks\yii2\multiLanguage;
1010

11-
use Yii;
1211
use yii\base\InvalidConfigException;
1312
use yii\web\Application;
1413
use yii\web\Request;
@@ -23,91 +22,69 @@ class MultiLangRequest extends Request
2322
* @var
2423
*/
2524
private $_lang_url;
25+
/**
26+
* @var
27+
*/
28+
private $_lang_from_url;
2629

2730
/**
2831
* @return bool|string
2932
* @throws InvalidConfigException
3033
*/
31-
public function getLangUrl()
34+
public function getUrl()
3235
{
33-
if (!\Yii::$app instanceof Application)
34-
{
36+
//Работает только для web проекта
37+
if (!\Yii::$app instanceof Application) {
3538
return '';
3639
}
3740

3841
if ($this->_lang_url === null) {
39-
$this->_lang_url = $this->getUrl();
40-
41-
$url_list = explode('/', $this->_lang_url);
42+
//Содержит строку с префиксом языка
43+
$this->_lang_url = parent::getUrl();
4244

43-
$lang_url = isset($url_list[1]) ? $url_list[1] : null;
45+
//Из строки выделяем язык
46+
$url_list = explode('/', $this->_lang_url);
47+
$lang_from_url = isset($url_list[1]) ? $url_list[1] : null;
4448

45-
if ($lang_url == \Yii::$app->multiLanguage->default_lang)
46-
{
49+
//Если этого языка нет среди доступных в настройках компонента, значит это не язык, просто возвращаем строку по сути определенную в parent::getUrl();
50+
if (!in_array($lang_from_url, \Yii::$app->multiLanguage->langs)) {
4751
return $this->_lang_url;
4852
}
4953

50-
if (!in_array($lang_url, \Yii::$app->multiLanguage->langs))
51-
{
54+
//Если этот язык является языком по умолчанию
55+
if ($lang_from_url == \Yii::$app->multiLanguage->default_lang) {
56+
//TODO: преобразовать
5257
return $this->_lang_url;
5358
}
5459

55-
\Yii::$app->language = $lang_url;
56-
\Yii::$app->setHomeUrl(\Yii::$app->homeUrl . $lang_url);
60+
$this->_lang_from_url = $lang_from_url;
61+
//В настройки проекта записываем язык из строки запроса
62+
\Yii::$app->language = $lang_from_url;
63+
//Определение home page url, возможно тут надо переделать возможно надо переписать метод Request::getBaseUrl();
64+
\Yii::$app->homeUrl = \Yii::$app->homeUrl . $lang_from_url;
5765

58-
if( $lang_url !== null && $lang_url === $lang_url &&
59-
strpos($this->_lang_url, $lang_url) === 1 )
60-
{
61-
$this->_lang_url = substr($this->_lang_url, strlen($lang_url)+1);
62-
}
66+
67+
//Если в запросе есть указание языка, то его нужно вырезать
68+
if ($lang_from_url !== null && strpos($this->_lang_url, $lang_from_url) === 1) {
69+
$this->_lang_url = substr($this->_lang_url, strlen($lang_from_url) + 1);
70+
}
6371
}
6472

6573
return $this->_lang_url;
6674
}
6775

68-
protected function resolvePathInfo()
69-
{
70-
$pathInfo = $this->getLangUrl();
7176

72-
if (($pos = strpos($pathInfo, '?')) !== false) {
73-
$pathInfo = substr($pathInfo, 0, $pos);
74-
}
75-
76-
$pathInfo = urldecode($pathInfo);
77-
78-
// try to encode in UTF8 if not so
79-
// http://w3.org/International/questions/qa-forms-utf-8.html
80-
if (!preg_match('%^(?:
81-
[\x09\x0A\x0D\x20-\x7E] # ASCII
82-
| [\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte
83-
| \xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs
84-
| [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte
85-
| \xED[\x80-\x9F][\x80-\xBF] # excluding surrogates
86-
| \xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3
87-
| [\xF1-\xF3][\x80-\xBF]{3} # planes 4-15
88-
| \xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16
89-
)*$%xs', $pathInfo)
90-
) {
91-
$pathInfo = utf8_encode($pathInfo);
92-
}
93-
94-
$scriptUrl = $this->getScriptUrl();
95-
$baseUrl = $this->getBaseUrl();
96-
if (strpos($pathInfo, $scriptUrl) === 0) {
97-
$pathInfo = substr($pathInfo, strlen($scriptUrl));
98-
} elseif ($baseUrl === '' || strpos($pathInfo, $baseUrl) === 0) {
99-
$pathInfo = substr($pathInfo, strlen($baseUrl));
100-
} elseif (isset($_SERVER['PHP_SELF']) && strpos($_SERVER['PHP_SELF'], $scriptUrl) === 0) {
101-
$pathInfo = substr($_SERVER['PHP_SELF'], strlen($scriptUrl));
102-
} else {
103-
throw new InvalidConfigException('Unable to determine the path info of the current request.');
104-
}
77+
/**
78+
* @return null|string
79+
*/
80+
public function getHostInfo()
81+
{
82+
$hostInfo = parent::getHostInfo();
10583

106-
if (isset($pathInfo[0]) && $pathInfo[0] === '/') {
107-
$pathInfo = substr($pathInfo, 1);
84+
if ($this->_lang_from_url) {
85+
$hostInfo = $hostInfo . "/" . $this->_lang_from_url;
10886
}
10987

110-
//print_r($pathInfo);die;
111-
return (string) $pathInfo;
88+
return $hostInfo;
11289
}
11390
}

0 commit comments

Comments
 (0)