Detect the language used in the user's browser using PHP

How to get the browser language in PHP and how to use this information to create a script that receives this value if no language is configured

At PHP By Rudi Drusian
Published on
Last updated

It is possible to know which language is currently defined in the user's browser using the PHP super global variable $_SERVER, consulting the 'HTTP_ACCEPT_LANGUAGE' index.


   # Expected something like: en,pt-BR;q=0.5

To get only the part that matters, which are the first two letters:


   echo substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2)
   # Expected something like: en

To create a PHP script in which the user can define the language through a form using a GET request and if no language is chosen, the current language of the browser is used as long as it is in a list of predetermined languages.


   if (isset($_GET['lang'])) {
      $lang = $_GET['lang'];
   } else {
      $lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
   if (!in_array($lang, array("en","pt","es"))) $lang = "en";

The in_array function in this script checks if the language is among those configured in the array (en, pt, es), that is, English, Portuguese or Spanish, and if it does not find the language, it sets it to English (en). This guarantees that the $lang variable will always have a valid and expected value.


This is not my original language and I don't speak it very well. I used my little knowledge and translators tools to compose the text of this article. Sorry for possible spelling or grammatical errors, suggestions for corrections are appreciated and can be sent to the contact email in the footer of the site. My intention is to share some knowledge and I hope this translation is good enough.