Class lang avec cookie + http_accept_language

Contenu du snippet

Cette classe permet de gérer plusieurs langues pour votre site web.
Celle-ci utilise un fichier class.lang.php, plusieurs fichiers .lng contenant la liste des variables (fr.lng) ainsi que des images .png pour les drapeaux.

La langue de l’utilisateur visitant votre site web est automatiquement récupérée grâce à la variable serveur $_SERVER['HTTP_ACCEPT_LANGUAGE']. Celle-ci est ensuite enregistrée dans un cookie.

Mais l’utilisateur peut très bien choisir la langue souhaitée qui sera passée en $_GET puis à nouveau enregistrée dans un cookie.

Source / Exemple :


/**

  • @author Cr@zy
  • @version 1.0
  • @copyright 2009 @ crazyws.fr
  • /
class Lang { var $lang; var $load = array(); var $listLangs = array(); var $subdir = ''; private $path = "lang/"; private $ext = ".lng"; private $default = "fr"; public function __construct() { $this->GetLangs(); if( !isset($_COOKIE['lang']) ){ $_COOKIE['lang'] = substr( $_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2 ); } if( isset($_GET['lang']) ){ $this->CheckLang($_GET['lang']); } else if( isset($_COOKIE['lang']) ){ $this->CheckLang($_COOKIE['lang']); } setcookie("lang", $this->lang, time() + 365 * 24 * 3600); $this->LoadLang(); } private function CheckLang($lang) { if( in_array($lang . $this->ext, $this->listLangs) ){ $this->lang = $lang; } else { $this->lang = $this->default; } } private function LoadLang() { $file = $this->subdir . $this->path . $this->lang . $this->ext; $handle = fopen($file, "r"); if( $handle ){ while( !feof($handle) ){ $buffer = fgets($handle, 4096); if( (substr($buffer,0,1) == "\n") || (!substr($buffer,0,1)) ){ continue; } if( substr($buffer,0,1) == '[' ){ $prefix = substr($buffer,1,-3); } else { $buffer = trim($buffer); if( !empty($buffer) ){ list($key,$value) = preg_split("/ = /", trim($buffer)); $this->load[$prefix][$key] = substr($value,0); } } } } } private function GetLangs() { if( $handle = opendir($this->subdir . $this->path) ){ while( false !== ($file = readdir($handle)) ){ if( $file != "." && $file != ".." && preg_match("/.lng$/",$file) ){ $this->listLangs[] = $file; } } closedir($handle); } } public function SetParams($string, $params=array()){ foreach($params as $k => $v){ $string = str_replace("{" . $k . "}", $v, $string); } return $string; } }

Conclusion :


J'espère que cette classe aura sû vous aider.
J'attends vos commentaires ou plutôt vos appréciations bonnes ou mauvaises ^^

Pour plus d'infos et télécharger un exemple : http://www.crazyws.fr/blog/?p=1196

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.