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, 13 Nov 2009

view this page in

http_negotiate_language

(PECL pecl_http >= 0.1.0)

http_negotiate_languageクライアントが希望している言語を選択する

説明

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

この関数は、クライアントが希望している言語を Accept-Language HTTP ヘッダに基づいて選択します。 qualifier も理解し、qualifier の指定されていない言語が最優先されます。 部分的に一致した (つまりプライマリ言語についてのみ一致した) 言語については、qualifier が 10% 割り引かれます。

パラメータ

supported

サポートされる言語を値にもつ配列。

result

選択した結果がこの配列に含まれます。

返り値

選択された言語、あるいは一致するものがなかった場合はデフォルトの言語 (配列の最初のエントリ) を返します。

例1 http_negotiate_language() の使用法

<?php
$langs 
= array(
        
'en-US',// デフォルト
        
'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, 13 Nov 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, 13 Nov 2009
 
 
show source | credits | stats | sitemap | contact | advertising | mirror sites