Checking browser's language by PHP?

Likely just a case sensitivity issue; eregi('en-us') or preg_match('/en-us/i') should have picked it up.

However, just looking for ‘en-us’ in the header may get it wrong sometimes, in particular when both the US and UK languages are listed. “Accept-Language” is actually quite a complicated header, which really you'd want a proper parser for.

If you have PECL the whole job is already done for you: http://www.php.net/manual/en/function.http-negotiate-language.php

I don't know why the other answers are going for the User-Agent header; this is utterly bogus. User-Agent is not mandated to hold a language value in any particular place, and for some browsers (eg. Opera, and some minor browser I've never heard of called ‘Internet Explorer’) it will not at all. Where it does contain a language, that'll be the of language the browser build was installed in, not the user's preferred language which is what you should be looking at. (This setting will default to the build language, but can be customised by the user from the preferences UI.)


Try this:

<?
if(preg_match('/en-us/i', $_SERVER['HTTP_USER_AGENT']))
    include('http://page.com/us.txt');
else
    include('http://page.com/uk.txt');
?>

A probably more reliable way of doing this is to perform a regex on the $_SERVER['HTTP_USER_AGENT'] string.

<?php
  if(preg_match('/en-US/', $_SERVER['HTTP_USER_AGENT']))
    include('http://page.com/us.txt');
  else
    include('http://page.com/uk.txt');
?>

You are not guaranteed to get a valid and useful user-agent string, so make sure that the else statement contains a reasonable alternative.