Automatic language detection for guest
This commit is contained in:
parent
fa3174ed4c
commit
2b80012658
4 changed files with 30 additions and 5 deletions
|
@ -173,7 +173,7 @@ class Func
|
||||||
*
|
*
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function langParse($str)
|
public function langParse($str)
|
||||||
{
|
{
|
||||||
$result = [];
|
$result = [];
|
||||||
|
|
||||||
|
@ -196,7 +196,8 @@ class Func
|
||||||
|
|
||||||
$result[$l] = $q;
|
$result[$l] = $q;
|
||||||
}
|
}
|
||||||
|
\arsort($result, \SORT_NUMERIC);
|
||||||
|
|
||||||
return \array_keys(\arsort($result, \SORT_NUMERIC));
|
return \array_keys($result);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -896,8 +896,8 @@ class Install extends Page
|
||||||
'dst' => ['TINYINT(1)', false, 0],
|
'dst' => ['TINYINT(1)', false, 0],
|
||||||
'time_format' => ['TINYINT(1)', false, 0],
|
'time_format' => ['TINYINT(1)', false, 0],
|
||||||
'date_format' => ['TINYINT(1)', false, 0],
|
'date_format' => ['TINYINT(1)', false, 0],
|
||||||
'language' => ['VARCHAR(25)', false, $v->defaultlang],
|
'language' => ['VARCHAR(25)', false, ''],
|
||||||
'style' => ['VARCHAR(25)', false, $v->defaultstyle],
|
'style' => ['VARCHAR(25)', false, ''],
|
||||||
'num_posts' => ['INT(10) UNSIGNED', false, 0],
|
'num_posts' => ['INT(10) UNSIGNED', false, 0],
|
||||||
'last_post' => ['INT(10) UNSIGNED', true],
|
'last_post' => ['INT(10) UNSIGNED', true],
|
||||||
'last_search' => ['INT(10) UNSIGNED', true],
|
'last_search' => ['INT(10) UNSIGNED', true],
|
||||||
|
|
|
@ -39,6 +39,7 @@ class Current extends Action
|
||||||
$user->__dst = $this->c->config->o_default_dst;
|
$user->__dst = $this->c->config->o_default_dst;
|
||||||
# $user->language = $this->c->config->o_default_lang;
|
# $user->language = $this->c->config->o_default_lang;
|
||||||
# $user->style = $this->c->config->o_default_style;
|
# $user->style = $this->c->config->o_default_style;
|
||||||
|
$user->__language = $this->getLangFromHTTP();
|
||||||
|
|
||||||
// быстрое переключение языка - Visman
|
// быстрое переключение языка - Visman
|
||||||
/* $language = $this->cookie->get('glang');
|
/* $language = $this->cookie->get('glang');
|
||||||
|
@ -247,4 +248,27 @@ class Current extends Action
|
||||||
}
|
}
|
||||||
return $agent;
|
return $agent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Возвращает имеющийся в наличии язык из HTTP_ACCEPT_LANGUAGE
|
||||||
|
* или язык по умолчанию
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
protected function getLangFromHTTP()
|
||||||
|
{
|
||||||
|
if (! empty($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
|
||||||
|
$langs = $this->c->Func->getLangs();
|
||||||
|
foreach ($this->c->Func->langParse($_SERVER['HTTP_ACCEPT_LANGUAGE']) as $entry) {
|
||||||
|
$arr = \explode('-', $entry);
|
||||||
|
if (isset($arr[1])) {
|
||||||
|
$entry = $arr[0] . '_' . \strtoupper($arr[1]);
|
||||||
|
}
|
||||||
|
if (isset($langs[$entry])) {
|
||||||
|
return $langs[$entry];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $this->c->config->o_default_lang;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -111,7 +111,7 @@ class Model extends DataModel
|
||||||
{
|
{
|
||||||
$langs = $this->c->Func->getLangs();
|
$langs = $this->c->Func->getLangs();
|
||||||
|
|
||||||
$lang = $this->isGuest || empty($this->a['language']) || ! isset($langs[$this->a['language']])
|
$lang = empty($this->a['language']) || ! isset($langs[$this->a['language']])
|
||||||
? $this->c->config->o_default_lang
|
? $this->c->config->o_default_lang
|
||||||
: $this->a['language'];
|
: $this->a['language'];
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue