ФорумПрограммированиеPHP для идиотов → как правильно читать HTTP_ACCEPT_LANGUAGE

как правильно читать HTTP_ACCEPT_LANGUAGE

  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 31 марта 2012 г. 15:58

    kostyl, ты не видишь в первом примере что даже там первые два не канают? опять пришел-спиздел непосмотрел :D
    Спустя 20 сек.
    явно первый экзампл - опера, остальное файрфокс какой нить)
    Сапожник без сапог
  • kostyl

    Сообщения: 5210 Репутация: N Группа: Джедаи

    Spritz 31 марта 2012 г. 16:07, спустя 8 минут 49 секунд

    kostyl, ты не видишь в первом примере что даже там первые два не канают?

    ты чё на приколе, первые два символа это те что в нулевом элементе или у тебя заголовок массивами приходит? ))
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 31 марта 2012 г. 16:22, спустя 15 минут 30 секунд

    kostyl, туплю, точно на приколе :D
    Сапожник без сапог
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 31 марта 2012 г. 19:02, спустя 2 часа 39 минут 26 секунд

    Лучше всех ответил Stasovsky, хотя с ошибками )))
    не помню откуда спиздил такое:

    class Http
    {
    //…
    protected static
    $_acceptLanguages;

    static function getAcceptedLanguages()
    {
    if(self::$_acceptLanguages === NULL) {
    self::$_acceptLanguages = array();
    if(isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) &&
    ($n = preg_match_all('/([\w\-_]+)\s*(;\s*q\s*=\s*(\d*\.\d*))?/', $_SERVER['HTTP_ACCEPT_LANGUAGE'], $matches)) > 0) {
    $languages = array();
    for($i=0; $i < $n; ++$i) {
    $language = strtolower(str_replace('-', '_', $matches[1][$i]));
    $languages[$language] = empty($matches[3][$i])
    ? 1.0
    : floatval($matches[3][$i]);
    }
    arsort($languages);
    self::$_acceptLanguages = array_keys($languages);
    }
    }
    return self::$_acceptLanguages;
    }

    }



    array (
    0 => 'ru_ru',
    1 => 'ru',
    2 => 'en_us',
    3 => 'en',
    )


    Пусть у нас есть эээ…, ну типа "языки локализации", тогда

    $has = array('kz', 'en', 'ru');
    var_export(array_intersect(Http::getAcceptedLanguages(), $has));

    выдаст нам массив чего мы можем этому клиенту дать. первым будет самый предпочтительный язык

    array (
    1 => 'ru',
    3 => 'en',
    )
    ιιlllιlllι унц-унц
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 31 марта 2012 г. 20:23, спустя 5 минут 29 секунд

    ага, воровали кажется в одном месте.
    ιιlllιlllι унц-унц
  • kostyl

    Сообщения: 5210 Репутация: N Группа: Джедаи

    Spritz 31 марта 2012 г. 22:14, спустя 1 час 51 минуту 33 секунды

    Фёдор пропал ))
  • master

    Сообщения: 3244 Репутация: N Группа: Джедаи

    Spritz 1 апреля 2012 г. 8:23, спустя 10 часов 8 минут 27 секунд



    if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
    foreach (explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']) as $value) {
    if (strpos($value, ';') !== false) {
    list($value, ) = explode(';', $value);
    }
    if (strpos($value, '-') !== false) {
    list($value, ) = explode('-', $value);
    }
    $langs[] = $value;
    }
    }

    не всё полезно, что в swap полезло
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 1 апреля 2012 г. 8:59, спустя 36 минут 12 секунд

    что это? master, ты обратил внимание на arsort($languages) ? оно там не зря
    ιιlllιlllι унц-унц
  • master

    Сообщения: 3244 Репутация: N Группа: Джедаи

    Spritz 1 апреля 2012 г. 13:29, спустя 4 часа 30 минут 16 секунд

    artoodetoo, да вроде браузер в accept-language и так первым ставит приоритетный язык
    не всё полезно, что в swap полезло
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 1 апреля 2012 г. 16:22, спустя 2 часа 53 минуты 8 секунд

    это в окне настроек он первый ))) а в строке не факт
    ιιlllιlllι унц-унц
  • master

    Сообщения: 3244 Репутация: N Группа: Джедаи

    Spritz 1 апреля 2012 г. 17:41, спустя 1 час 18 минут 40 секунд

    artoodetoo, проверь
    не всё полезно, что в swap полезло
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 1 апреля 2012 г. 20:26, спустя 2 часа 45 минут 13 секунд

    ты чтоли доебался? у этого заголовка есть Quality factors, это стандарт. хочешь полагаться на сортировку от браузера? я тебе не запрещаю.
    ιιlllιlllι унц-унц
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 1 апреля 2012 г. 21:02, спустя 35 минут 42 секунды

    Yi и Symphony сортируют, а CI не хочет, ок.
    Спустя 187 сек.
    Zend

    ιιlllιlllι унц-унц
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 2 апреля 2012 г. 2:19, спустя 5 часов 17 минут 15 секунд

    главрыб же приводил ссылку, разве это не вторая симфа?
    $languages = $this->splitHttpAcceptHeader($this->headers->get('Accept-Language'));

    хидеры поглубже упрятали
    ιιlllιlllι унц-унц

Пожалуйста, авторизуйтесь, чтобы написать комментарий!