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