downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

ob_deflatehandler> <http_negotiate_content_type
Last updated: Fri, 14 Aug 2009

view this page in

http_negotiate_language

(PECL pecl_http >= 0.1.0)

http_negotiate_languageNégocie le langage préféré par les clients

Description

string http_negotiate_language ( array $supported [, array &$result ] )

Cette fonction négocie le langage préféré par les clients, basé sur les en-têtes HTTP Accept-Language.

Liste de paramètres

supported

tableau contenant les langages supportés en tant que valeurs

result

contient un tableau, contenant les résultats de la négociation

Valeurs de retour

Retourne le langage négocié ou le langage par défaut (i.e. première entrée du tableau) si aucun ne correspond.

Exemples

Exemple #1 Exemple avec http_negotiate_language()

<?php
$langs 
= array(
    
'en-US',// défaut
    
'fr',
    
'fr-FR',
    
'de',
    
'de-DE',
    
'de-AT',
    
'de-CH',
);

include 
'./langs/'http_negotiate_language($langs$result) .'.php';

print_r($result);
?>



ob_deflatehandler> <http_negotiate_content_type
Last updated: Fri, 14 Aug 2009
 
add a note add a note User Contributed Notes
http_negotiate_language
sh1nto at eveni dot de
09-Mar-2009 06:49
There is an typo in your function.

You should replace $languageprefix by $langprefix.

Thanks very much for that function!
Anonymous
03-Nov-2008 11:23
as I don't have this function available I tried to write it myself. Maybe useful for someone else, too.

<?php
/*
  determine which language out of an available set the user prefers most
 
  $available_languages        array with language-tag-strings (must be lowercase) that are available
  $http_accept_language    a HTTP_ACCEPT_LANGUAGE string (read from $_SERVER['HTTP_ACCEPT_LANGUAGE'] if left out)
*/
function prefered_language ($available_languages,$http_accept_language="auto") {
   
// if $http_accept_language was left out, read it from the HTTP-Header
   
if ($http_accept_language == "auto") $http_accept_language = $_SERVER['HTTP_ACCEPT_LANGUAGE'];

   
// standard  for HTTP_ACCEPT_LANGUAGE is defined under
    // http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.4
    // pattern to find is therefore something like this:
    //    1#( language-range [ ";" "q" "=" qvalue ] )
    // where:
    //    language-range  = ( ( 1*8ALPHA *( "-" 1*8ALPHA ) ) | "*" )
    //    qvalue         = ( "0" [ "." 0*3DIGIT ] )
    //            | ( "1" [ "." 0*3("0") ] )
   
preg_match_all("/([[:alpha:]]{1,8})(-([[:alpha:]|-]{1,8}))?" .
                  
"(\s*;\s*q\s*=\s*(1\.0{0,3}|0\.\d{0,3}))?\s*(,|$)/i",
                  
$http_accept_language, $hits, PREG_SET_ORDER);

   
// default language (in case of no hits) is the first in the array
   
$bestlang = $available_languages[0];
   
$bestqval = 0;

    foreach (
$hits as $arr) {
       
// read data from the array of this hit
       
$langprefix = strtolower ($arr[1]);
        if (!empty(
$arr[3])) {
           
$langrange = strtolower ($arr[3]);
           
$language = $langprefix . "-" . $langrange;
        }
        else
$language = $langprefix;
       
$qvalue = 1.0;
        if (!empty(
$arr[5])) $qvalue = floatval($arr[5]);
     
       
// find q-maximal language 
       
if (in_array($language,$available_languages) && ($qvalue > $bestqval)) {
           
$bestlang = $language;
           
$bestqval = $qvalue;
        }
       
// if no direct hit, try the prefix only but decrease q-value by 10% (as http_negotiate_language does)
       
else if (in_array($languageprefix,$available_languages) && (($qvalue*0.9) > $bestqval)) {
           
$bestlang = $languageprefix;
           
$bestqval = $qvalue*0.9;
        }
    }
    return
$bestlang;
}
?>
galosa at netinform dot hu
09-Jul-2007 09:56
See a list of the available language codes here:
http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes

ob_deflatehandler> <http_negotiate_content_type
Last updated: Fri, 14 Aug 2009
 
 
show source | credits | stats | sitemap | contact | advertising | mirror sites