Paulund

Automatically Detect Browser Language With PHP

When you are working on a multi national website you may need the functionality to translate your website into different languages. There are many ways you can translate a website, in this article I will not go through the different ways you can translate a website. But one thing is that you will always need is to know what language you want display when a user hits your page. There are different options you can do with this, either have a default language and allow the user to switch to the language they want to use, or detect the language set in the browser and switch the language automatically. You can detect the language the browser is set to by looking at the server variable HTTP_ACCEPT_LANGUAGE.


<?php
echo $_SERVER['HTTP_ACCEPT_LANGUAGE'];
?>

This variable will display all the languages that you can set in your browser en-GB,en,en-US. But because you can select multiple languages for your browser they are returned as a comma separated string. From these languages you can explode the string and now you have a list of all languages that the user can read, looping through this list you can find supported languages and display these to the user.


<?php
 
$supportedLangs = array('en-GB', 'fr', 'de');
 
$languages = explode(',',$_SERVER['HTTP_ACCEPT_LANGUAGE']);
 
foreach($languages as $lang)
{
    if(in_array($lang, $supportedLangs))
    {
        // Set the page locale to the first supported language found
        $page->setLocale($lang);
        break;
    }
}
?>