/** * Устанавливает язык интерфейса в зависимости от настроек в браузере пользователя * * @param $default - site language * @param bool $strict - always use the language specified in the config file? * * @return mixed */ public static function get_accepted_language($default, $strict = true) { if ($strict) { return $default; } // Учитываем язык в настройках браузера if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) { $langs = HTTP_Header::parse_language_header($_SERVER['HTTP_ACCEPT_LANGUAGE']); if (is_array($langs)) { $langs = array_keys($langs); return array_shift($langs); } else { return $default; } } else { return $default; } }
/** * Returns the quality of `$language` supplied, optionally ignoring * wildcards if `$explicit` is set to a non-`FALSE` value. If the quality * is not found, `0.0` is returned. * * // Accept-Language: en-us, en-gb; q=.7, en; q=.5 * $lang = $header->accepts_language_at_quality('en-gb'); * // $lang = (float) 0.7 * * $lang2 = $header->accepts_language_at_quality('en-au'); * // $lang2 = (float) 0.5 * * $lang3 = $header->accepts_language_at_quality('en-au', TRUE); * // $lang3 = (float) 0.0 * * @param string $language language to interrogate * @param boolean $explicit explicit interrogation, `TRUE` ignores wildcards * @return float * @since 3.2.0 */ public function accepts_language_at_quality($language, $explicit = FALSE) { if ($this->_accept_language === NULL) { if ($this->offsetExists('Accept-Language')) { $language_header = strtolower($this->offsetGet('Accept-Language')); } else { $language_header = NULL; } $this->_accept_language = HTTP_Header::parse_language_header($language_header); } // Normalize the language $language_parts = explode('-', strtolower($language), 2); if (isset($this->_accept_language[$language_parts[0]])) { if (isset($language_parts[1])) { if (isset($this->_accept_language[$language_parts[0]][$language_parts[1]])) { return $this->_accept_language[$language_parts[0]][$language_parts[1]]; } elseif ($explicit === FALSE and isset($this->_accept_language[$language_parts[0]]['*'])) { return $this->_accept_language[$language_parts[0]]['*']; } } elseif (isset($this->_accept_language[$language_parts[0]]['*'])) { return $this->_accept_language[$language_parts[0]]['*']; } } if ($explicit === FALSE and isset($this->_accept_language['*'])) { return $this->_accept_language['*']; } return (double) 0; }
/** * Tests the `parse_language_header` method parses the Accept-Language header * correctly * * @dataProvider provider_parse_language_header * * @param string $accept accept * @param array $expected expected * @return void */ public function test_parse_language_header($accept, array $expected) { $this->assertSame($expected, HTTP_Header::parse_language_header($accept)); }