Ejemplo n.º 1
0
 /**
  * Устанавливает язык интерфейса в зависимости от настроек в браузере пользователя
  *
  * @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;
     }
 }
Ejemplo n.º 2
0
 /**
  * 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;
 }
Ejemplo n.º 3
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));
 }