Nieuws
Foto's
Artikelen
Componenten
Applicaties
Kleinkunst

PHP - Automatisch taal van bezoeker kiezen

Heel wat websites bieden informatie in meerdere talen aan. Als Vlaming of Nederlander is het wel tof om informatie in het Nederlands aan te bieden, maar de rest van de wereldbevolking zal dan niet snel je website terugvinden. Bied je echter interessante zaken (programma's, artikelen, foto's, ...) aan die ook niet-Nederlandstaligen zullen boeien, dan zal je je website geheel- of gedeeltelijk in het Engels moeten maken, eventueel zelfs in het Frans Spaans of Duits.

Op veel websites moet je op de welkomspagina eerst een taalkeuze maken. Nadien wordt de gekozen taal meestal als cookie op de PC bewaard zodat deze stap de volgende keer kan overgeslagen worden. Het kan echter nog iets beter; aan de hand van het IP adres kan je namelijk het land afleiden, en aan de hand van het land ook heel vaak de taal. Dit is natuurlijk niet altijd correct en daarom moet je altijd nog ergens een optie voorzien om van de taal te kunnen wisselen. In 90% van de gevallen zal de taal van het land wel overeenstemmen met de taal van de bezoeker en kan je dus de eerste taalkeuze stap overslaan.

Dit principe heb ik ook zo geïmplementeerd in mijn persoonlijke website SCIP.be. In dit artikeltje toon ik enkele PHP functies waarmee je dit in je eigen website kan inbouwen.

Land opzoeken a.h.v. het IP-adres

Verschillende websites op het internet houden een database met IP-adressen en de overeenkomstige landen bij. Deze databases kan je downloaden en in je eigen website integreren.

IP-To-Country database

Op de website van IP-To-Country database kan je regelmatig een nieuwe database in CSV formaat downloaden. Deze moet je dan in je eigen database importeren met een of andere tool. Noem de tabel bv. IPCOUNTRIES.

Met een eenvoudige SQL opdracht kan je nu het land terugvinden voor een opgegeven IP-adres. Eerst verwijder je alle puntjes uit het adres en dan zoek je dit IP-adres tussen de waarden van het IP_FROM en IP_TO veld.

scIPToCountry functie

function scIPToCountry($strIP = '') {
  if (scConnectToDB()) {
    if ($strIP == '') {
      $strIP = $_SERVER['REMOTE_ADDR'];
    }

    $intLongID = ip2long($strIP);
    $intLongID = sprintf("%u", $intLongID);

    $strSQL = "SELECT Country, C2Code FROM gl_ipcountries WHERE $intLongID BETWEEN IP_From AND IP_To";
    $arrItems = scGetQueryResult($strSQL,'');
    if ($arrItems <> '') {
      foreach ($arrItems as $arrItem) {
        return array('CountryName'=>$arrItem['Country'], 'CountryCode'=>$arrItem['C2Code']);
    }	
   }
    else {
      return array('CountryName'=>'unknown', 'CountryCode'=>'?');
   }
    scDisconnectFromDB();
  }
   else {
     return array('CountryName'=>'unknown', 'CountryCode'=>'?');
  } 
}

 

Nederlands of Engels ?

Van zodra je de landcode van het IP-adres kent, kan je een keuze maken tussen enkele talen. Is het IP adres afkomstig van Nederland of België dan worden de pagina's automatisch in het Nederlands getoond, in alle andere gevallen in het Engels. De potentiële 16 miljoen Nederlanders en 6 miljoen Vlamingen komen dus meteen in de juiste taal terecht. Voor de 4 miljoen Waalse of Duitstalige vrienden die op mijn website zouden kunnen passeren, is het natuurlijk iets moeilijker, hun landcode is ook BE en daarom moeten zij misschien nog op de 'English' link klikken.

scGetDefaultLanguage functie

De scGetDefaultLanguage zal via de scIPToCountry functie het land opzoeken en als dit "NL" of "BE" is, "NL" als taal teruggeven, in alle ander gevallen geeft de functie "EN" terug.

function scGetDefaultLanguage() {
  $strIP = $_SERVER['REMOTE_ADDR'];
  if ($strIP == '127.0.0.1') {
    $strDefaultLanguage = 'NL';
 }
  else {
    $arrCountry = scIPToCountry($strIP);
    $strCountryCode = $arrCountry['CountryCode'];
    if (($strCountryCode == 'BE') or ($strCountryCode == 'NL')) {
      $strDefaultLanguage = 'NL';
    }
    else {
      $strDefaultLanguage = 'EN';
   }
	}
  return($strDefaultLanguage);
}

 

Verder afwerking

Nu is het nog kwestie van informatie in meerdere talen aan te bieden. Statistische pagina's zal je in meerdere talen moeten maken. De bestandsnaam kan je eventueel laten eindigen met de taal. Bv. Welcome_NL.htm en Welkom_EN.htm

Maak je gebruik van dynamische pagina's die op een database gebaseerd zijn, dan kan je de informatie in de gewenste taal uit de database halen. Denk er dan ook aan om de meta-tag "Content-Language" in te stellen met de huidige taal.

meta http-equiv="Content-Language" content="TAAL"