Pour qu'un programme soit disponible en plusieurs langues, on peut utiliser gettext. Disponible dans le PHP, cette fonctionnalité convertit les chaînes selon un fichier.
<?php
  $locale "en_US.utf8";
  if (isSet($_GET["locale"])) $locale $_GET["locale"];
  // TODO : Check $_GET["locale"] before use it !!!
  $rc=setlocale(LC_MESSAGES$locale);
  // if $rc is FALSE => locale is undefined in system. Check it with 
  // "locale -a"
  $dmn=bindtextdomain("myprog""./locale");
  textdomain("myprog"); // Should be the .mo file
  echo _("FATAL ERROR");
?>

Il faut créer un répertoire locale/fr_FR/LC_MESSAGES/ avec un fichier nommé myprog.po. Ce fichier peut être généré par le logiciel poEdit.

Il est à noter que la locale doit être codée complètement pour fonctionner (c'est-à-dire que le codage utilisé doit être fourni).
La langue peut être déterminée à partir des souhaits du client (en fonction des paramètres du navigateur). Voir http://connaissances.fournier38.fr/display.php?id=207