From d4d2da50c846c8b60f9b141d9f712d54f287e44b Mon Sep 17 00:00:00 2001 From: wei <> Date: Wed, 24 Jan 2007 06:20:33 +0000 Subject: Fixed #505, #508 --- framework/I18N/core/CultureInfo.php | 5 ++++- framework/I18N/core/HTTPNegotiator.php | 23 ++++++++++++----------- 2 files changed, 16 insertions(+), 12 deletions(-) (limited to 'framework/I18N/core') diff --git a/framework/I18N/core/CultureInfo.php b/framework/I18N/core/CultureInfo.php index bcf2f245..404c81fe 100644 --- a/framework/I18N/core/CultureInfo.php +++ b/framework/I18N/core/CultureInfo.php @@ -414,7 +414,7 @@ class CultureInfo * Gets the culture name in English. * Returns array('Language','Country'); * 'Country' is omitted if the culture is neutral. - * @return array array with language and country as elements. + * @return string language (country), it may locale code string if english name does not exist. */ function getEnglishName() { @@ -423,6 +423,9 @@ class CultureInfo $culture = $this->getInvariantCulture(); $language = $culture->findInfo("Languages/{$lang}"); + if(count($language) == 0) + return $this->culture; + $region = $culture->findInfo("Countries/{$reg}"); if($region) return $language[0].' ('.$region[0].')'; diff --git a/framework/I18N/core/HTTPNegotiator.php b/framework/I18N/core/HTTPNegotiator.php index f5eb876c..d4c80b50 100644 --- a/framework/I18N/core/HTTPNegotiator.php +++ b/framework/I18N/core/HTTPNegotiator.php @@ -24,7 +24,7 @@ require_once(dirname(__FILE__).'/CultureInfo.php'); /** * HTTPNegotiator class. - * + * * Get the language and charset information from the client browser. * * @author Xiang Wei Zhuo @@ -35,19 +35,19 @@ class HTTPNegotiator { /** * A list of languages accepted by the browser. - * @var array + * @var array */ protected $languages; /** * A list of charsets accepted by the browser - * @var array + * @var array */ protected $charsets; /** * Get a list of languages acceptable by the client browser - * @return array languages ordered in the user browser preferences. + * @return array languages ordered in the user browser preferences. */ function getLanguages() { @@ -61,14 +61,15 @@ class HTTPNegotiator //$basedir = CultureInfo::dataDir(); //$ext = CultureInfo::fileExt(); + $info = new CultureInfo(); - foreach(explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']) as $lang) + foreach(explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']) as $lang) { // Cut off any q-value that might come after a semi-colon if ($pos = strpos($lang, ';')) $lang = trim(substr($lang, 0, $pos)); - if (strstr($lang, '-')) + if (strstr($lang, '-')) { $codes = explode('-',$lang); if($codes[0] == 'i') @@ -91,16 +92,16 @@ class HTTPNegotiator } } - if(CultureInfo::validCulture($lang)) + if($info->validCulture($lang)) $this->languages[] = $lang; } - + return $this->languages; } /** * Get a list of charsets acceptable by the client browser. - * @return array list of charsets in preferable order. + * @return array list of charsets in preferable order. */ function getCharsets() { @@ -112,9 +113,9 @@ class HTTPNegotiator if (!isset($_SERVER['HTTP_ACCEPT_CHARSET'])) return $this->charsets; - foreach (explode(',', $_SERVER['HTTP_ACCEPT_CHARSET']) as $charset) + foreach (explode(',', $_SERVER['HTTP_ACCEPT_CHARSET']) as $charset) { - if (!empty($charset)) + if (!empty($charset)) $this->charsets[] = preg_replace('/;.*/', '', $charset); } -- cgit v1.2.3