PHP: определение предпочитаемого посетителем языка

В данном уроке демонстрируется техника использования PHP для определения предпочитаемого для посетителя языка. Такой функционал является важной частью сайтов, предназначенных для интернациональной аудитории. Как минимум, он дает возможность установить язык интерфейса, понятный посетителю. Наш скрипт определяет 180 языков.

 

Шаг 1. Таблица языков

Сначала формируем массив с кодами доступных языков:

<?php

// all the possible languages codes
$aLanguages = array(
    'aa' => 'Afar',
    . . .
);
?>

 

Шаг 2. Функция

Основная идея - разобрать глобальную переменную  $_SERVER['HTTP_ACCEPT_LANGUAGE']. Известно, что данная переменная содержит заголовок запроса Accept-Language, который очень похож на Accept, но ограничен набором языков, которые предпочтительны при формировании ответа на запрос. Подробно они описаны в протоколе (на Английском языке).

// Определяем предпочтительный язык
function tryToFindLang($aLanguages, $sWhere, $sDefaultLang) {

    // Устанавливаем текущий язык как язык по умолчанию
    $sLanguage = $sDefaultLang;

    // Изначально используется лучшее качество
    $fBetterQuality = 0;

    // Поиск всех подходящих парметров
    preg_match_all("/([[:alpha:]]{1,8})(-([[:alpha:]|-]{1,8}))?(\s*;\s*q\s*=\s*(1\.0{0,3}|0\.\d{0,3}))?\s*(,|$)/i", $sWhere, $aMatches, PREG_SET_ORDER);
    foreach ($aMatches as $aMatch) {

        // Устанавливаем префикс языка
        $sPrefix = strtolower ($aMatch[1]);

        // Подготоваливаем временный язык
        $sTempLang = (empty($aMatch[3])) ? $sPrefix : $sPrefix . '-' . strtolower ($aMatch[3]);

        // Получаем значения качества (если оно есть)
        $fQuality = (empty($aMatch[5])) ? 1.0 : floatval($aMatch[5]);

        if ($sTempLang) {

            // Определяем наилучшее качество
            if ($fQuality > $fBetterQuality && in_array($sTempLang, array_keys($aLanguages))) {

                // Устанавливаем текущий язык как временный и обновляем значение качества
                $sLanguage = $sTempLang;
                $fBetterQuality = $fQuality;
            } elseif (($fQuality*0.9) > $fBetterQuality && in_array($sPrefix, array_keys($aLanguages))) {

                // Устанавливаем текущий язык как значение префикса и обновляем значение качества
                $sLanguage = $sPrefix;
                $fBetterQuality = $fQuality * 0.9;
            }
        }
    }
    return $sLanguage;
}

А использовать функцию достаточно просто:

// Получаем все доступные коды языков
require_once('langs.php');
$sLanguage = tryToFindLang($aLanguages, $_SERVER['HTTP_ACCEPT_LANGUAGE'], 'en');

В переменной $sLanguage содержится код предпочитаемого языка.


Источник: http://feedproxy.google.com/~r/ruseller/CdHX/~3/7REO1t_DqsM/lessons.php

Читать комменты и комментировать

Добавить комментарий / отзыв



Защитный код
Обновить

PHP: определение предпочитаемого посетителем языка | | 2012-07-23 17:20:47 | | Статьи Web-мастеру | | В данном уроке демонстрируется техника использования PHP для определения предпочитаемого для посетителя языка. Такой функционал является важной частью сайтов, предназначенных для интернациональной | РэдЛайн, создание сайта, заказать сайт, разработка сайтов, реклама в Интернете, продвижение, маркетинговые исследования, дизайн студия, веб дизайн, раскрутка сайта, создать сайт компании, сделать сайт, создание сайтов, изготовление сайта, обслуживание сайтов, изготовление сайтов, заказать интернет сайт, создать сайт, изготовить сайт, разработка сайта, web студия, создание веб сайта, поддержка сайта, сайт на заказ, сопровождение сайта, дизайн сайта, сайт под ключ, заказ сайта, реклама сайта, хостинг, регистрация доменов, хабаровск, краснодар, москва, комсомольск |
 
Поделиться с друзьями: