2011-01-23 2 views
0

Я хочу знать, просматривает ли пользователь браузер из Великобритании или с помощью британского браузера. Если нет, я могу с уверенностью предположить, что они посетитель из США.Есть ли быстрый способ получить код страны для пользователей?

Я могу найти их IP-адрес в базе данных, но это немного медленнее, и я бы скорее узнал их User-agent или какой-либо другой HTTP-заголовок.

Не имеет значения, если это не всегда правильно, и есть двусмысленности (например, кто-то использует американский компьютер в Великобритании).

+0

Не знал, что есть только две страны в мире. Спасибо, что сообщили нам. –

+0

Да, знал, что это придет. Я сказал, что могу смело сделать это предположение для цели моего заявления. – Matt

ответ

2

Возможно, вы можете проверить поле заголовка Accept-Language.

14,4 Accept-Language

Accept-Language заголовка запроса поле похоже на Accept, но ограничивает набор естественных языков , которые предпочтительны в качестве ответа на запрос. Языковые метки определены в разделе 3.10.

Accept-Language = "Accept-Language" ":" 
        1#(language-range [ ";" "q" "=" qvalue ] 

) языка Диапазон = ((1 * 8ALPHA * ("-" 1 * 8ALPHA)) | "*")

Каждый язык-диапазон может быть предоставлена ​​ соответствующее значение качества, которое представляет собой оценку пользовательского предпочтений для указанных языков . Значение качества по умолчанию соответствует «q = 1». Например,

Accept-Language: da, en-gb;q=0.8, en;q=0.7 

будет означать: «Я предпочитаю датский, но принимает британский английский и другие типы английского языка.» Языковой диапазон соответствует языку-тегу, если он точно равен тегу, или если он точно равен префиксу тега, так что первый знак тега , следующий за префиксом, равен «-». Специальный диапазон «*», если присутствует в поле Accept-Language, соответствует каждому тегу, который не соответствует ни одному другому диапазону , присутствующему в поле Accept-Language .

Note: This use of a prefix matching rule does not imply that 
    language tags are assigned to languages in such a way that it is 
    always true that if a user understands a language with a certain 
    tag, then this user will also understand all languages with tags 
    for which this tag is a prefix. The prefix rule simply allows the 
    use of prefix tags if this is the case. 

добротность языка присвоен к языковой тег по Accept-Language поле это значение качества самого длинного диапазона Язык- в поле, которое соответствует языка-тег. Если ни один языковой диапазон в не совпадает с тегом, то присвоенный языковой коэффициент качества равен 0. Если нет заголовка Accept-Language не присутствует в запросе, сервер

следует считать, что все языки одинаково приемлемы. Если присутствует заголовок Accept-Language, , тогда все языки, которым присвоены , коэффициент качества больше 0, являются приемлемыми.

Это может противоречить частной ожидания пользователя отправить заголовок в Accept-Language с полными языковыми предпочтениями пользователя в каждом запросе. За обсуждение этой проблемы см. Раздел 15.1.4.

Как разборчивость сильно зависит от конкретного пользователя, то рекомендуется, что клиентские приложения делают выбор лингвистических предпочтений, доступных пользователю. Если выбор не доступен, то Поле заголовка Accept-Language ДОЛЖНО НЕ указывается в запросе.

Note: When making the choice of linguistic preference available to 
    the user, we remind implementors of the fact that users are not 
    familiar with the details of language matching as described above, 
    and should provide appropriate guidance. As an example, users 
    might assume that on selecting "en-gb", they will be served any 
    kind of English document if British English is not available. A 
    user agent might suggest in such a case to add "en" to get the 
    best matching behavior. 
1

Я может поиск их IP в базе данных, но это немного медленно

Нет, это не так.


Чтобы определить предпочтительный язык, вы можете использовать Accept-Language HTTP header.

Смежные вопросы