From e18483845108b8ab3844988f6fef8fdf345ef3ef Mon Sep 17 00:00:00 2001 From: "renan.saddam" Date: Wed, 8 Oct 2008 14:01:50 +0000 Subject: [PATCH] Adding tests to L10n and refactoring to be more readable. Removing duplicated entry of es-mx. Fixes #5087. git-svn-id: https://svn.cakephp.org/repo/branches/1.2.x.x@7712 3807eeeb-6ff5-0310-8944-8be069107fe0 --- cake/libs/l10n.php | 92 +++++++++-------- cake/tests/cases/libs/l10n.test.php | 152 +++++++++++++++++++++++++++- 2 files changed, 194 insertions(+), 50 deletions(-) diff --git a/cake/libs/l10n.php b/cake/libs/l10n.php index dfdc8da63..0c139181c 100644 --- a/cake/libs/l10n.php +++ b/cake/libs/l10n.php @@ -233,7 +233,6 @@ class L10n extends Object { 'es-gt' => array('language' => 'Spanish (Guatemala)', 'locale' => 'es_gt', 'localeFallback' => 'spa', 'charset' => 'utf-8'), 'es-hn' => array('language' => 'Spanish (Honduras)', 'locale' => 'es_hn', 'localeFallback' => 'spa', 'charset' => 'utf-8'), 'es-mx' => array('language' => 'Spanish (Mexican)', 'locale' => 'es_mx', 'localeFallback' => 'spa', 'charset' => 'utf-8'), - 'es_mx' => array('language' => 'Spanish (Mexican)', 'locale' => 'es_mx', 'localeFallback' => 'spa', 'charset' => 'utf-8'), 'es-ni' => array('language' => 'Spanish (Nicaragua)', 'locale' => 'es_ni', 'localeFallback' => 'spa', 'charset' => 'utf-8'), 'es-pa' => array('language' => 'Spanish (Panama)', 'locale' => 'es_pa', 'localeFallback' => 'spa', 'charset' => 'utf-8'), 'es-pe' => array('language' => 'Spanish (Peru)', 'locale' => 'es_pe', 'localeFallback' => 'spa', 'charset' => 'utf-8'), @@ -336,10 +335,10 @@ class L10n extends Object { * @access public */ function get($language = null) { - if (!is_null($language)) { + if ($language !== null) { return $this->__setLanguage($language); } elseif ($this->__autoLanguage() === false) { - return $this->__setLanguage($language); + return $this->__setLanguage(); } } /** @@ -350,36 +349,35 @@ class L10n extends Object { * @access private */ function __setLanguage($language = null) { - if ((!is_null($language)) && (isset($this->__l10nMap[$language])) && (isset($this->__l10nCatalog[$this->__l10nMap[$language]]))) { - $this->language = $this->__l10nCatalog[$this->__l10nMap[$language]]['language']; - $this->languagePath = array(0 => $this->__l10nCatalog[$this->__l10nMap[$language]]['locale'], - 1 => $this->__l10nCatalog[$this->__l10nMap[$language]]['localeFallback']); - $this->lang = $language; - $this->locale = $this->__l10nCatalog[$this->__l10nMap[$language]]['locale']; - $this->charset = $this->__l10nCatalog[$this->__l10nMap[$language]]['charset']; + $langKey = null; + if ($language !== null && isset($this->__l10nMap[$language]) && isset($this->__l10nCatalog[$this->__l10nMap[$language]])) { + $langKey = $this->__l10nMap[$language]; + } else if ($language !== null && isset($this->__l10nCatalog[$language])) { + $langKey = $language; + } else if (defined('DEFAULT_LANGUAGE')) { + $langKey = DEFAULT_LANGUAGE; + } - } elseif ((!is_null($language)) && (isset($this->__l10nCatalog[$language]))) { - $this->language = $this->__l10nCatalog[$language]['language']; - $this->languagePath = array(0 => $this->__l10nCatalog[$language]['locale'], - 1 => $this->__l10nCatalog[$language]['localeFallback']); + if ($langKey !== null && isset($this->__l10nCatalog[$langKey])) { + $this->language = $this->__l10nCatalog[$langKey]['language']; + $this->languagePath = array( + $this->__l10nCatalog[$langKey]['locale'], + $this->__l10nCatalog[$langKey]['localeFallback'] + ); $this->lang = $language; - $this->locale = $this->__l10nCatalog[$language]['locale']; - $this->charset = $this->__l10nCatalog[$language]['charset']; - - } elseif (defined('DEFAULT_LANGUAGE')) { - $this->language = $this->__l10nCatalog[$this->__l10nMap[DEFAULT_LANGUAGE]]['language']; - $this->languagePath = array(0 => $this->__l10nCatalog[$this->__l10nMap[DEFAULT_LANGUAGE]]['locale'], - 1 => $this->__l10nCatalog[$this->__l10nMap[DEFAULT_LANGUAGE]]['localeFallback']); - $this->lang = DEFAULT_LANGUAGE; - $this->locale = $this->__l10nCatalog[$this->__l10nMap[DEFAULT_LANGUAGE]]['locale']; - $this->charset = $this->__l10nCatalog[$this->__l10nMap[DEFAULT_LANGUAGE]]['charset']; + $this->locale = $this->__l10nCatalog[$langKey]['locale']; + $this->charset = $this->__l10nCatalog[$langKey]['charset']; } else { $this->lang = $language; - $this->languagePath = array(0 => $language); + $this->languagePath = array($language); } if ($this->default) { - $this->languagePath[2] = $this->__l10nCatalog[$this->__l10nMap[$this->default]]['localeFallback']; + if (isset($this->__l10nMap[$this->default]) && isset($this->__l10nCatalog[$this->__l10nMap[$this->default]])) { + $this->languagePath[] = $this->__l10nCatalog[$this->__l10nMap[$this->default]]['localeFallback']; + } else if (isset($this->__l10nCatalog[$this->default])) { + $this->languagePath[] = $this->__l10nCatalog[$this->default]['localeFallback']; + } } $this->found = true; @@ -387,6 +385,7 @@ class L10n extends Object { Configure::write('Config.language', $this->lang); } Configure::write('charset', $this->charset); + if ($language) { return $language; } @@ -398,24 +397,35 @@ class L10n extends Object { * @access private */ function __autoLanguage() { - $_detectableLanguages = split ('[,;]', env('HTTP_ACCEPT_LANGUAGE')); + $_detectableLanguages = split('[,;]', env('HTTP_ACCEPT_LANGUAGE')); foreach ($_detectableLanguages as $key => $langKey) { $langKey = strtolower($langKey); - if (isset($this->__l10nCatalog[$langKey])) { + if (strpos($langKey, '_') !== false) { + $langKey = str_replace('_', '-', $langKey); + } + if (isset($this->__l10nCatalog[$langKey])) { $this->language = $this->__l10nCatalog[$langKey]['language']; - $this->languagePath = array(0 => $this->__l10nCatalog[$langKey]['locale'], - 1 => $this->__l10nCatalog[$langKey]['localeFallback']); + $this->languagePath = array( + $this->__l10nCatalog[$langKey]['locale'], + $this->__l10nCatalog[$langKey]['localeFallback'] + ); $this->lang = $langKey; $this->locale = $this->__l10nCatalog[$langKey]['locale']; $this->charset = $this->__l10nCatalog[$langKey]['charset']; if ($this->default) { - $this->languagePath[2] = $this->__l10nCatalog[$this->__l10nMap[$this->default]]['localeFallback']; + if (isset($this->__l10nMap[$this->default]) && isset($this->__l10nCatalog[$this->__l10nMap[$this->default]])) { + $this->languagePath[] = $this->__l10nCatalog[$this->__l10nMap[$this->default]]['localeFallback']; + } else if (isset($this->__l10nCatalog[$this->default])) { + $this->languagePath[] = $this->__l10nCatalog[$this->default]['localeFallback']; + } } $this->found = true; + Configure::write('Config.language', $this->lang); Configure::write('charset', $this->charset); + return true; } } @@ -437,17 +447,11 @@ class L10n extends Object { } } return $result; - } - - if (is_string($mixed)) { - if (2 == strlen($mixed)) { - if (in_array($mixed, $this->__l10nMap)) { - return array_search($mixed, $this->__l10nMap); - } - } else { - if (isset($this->__l10nMap[$mixed])) { - return $this->__l10nMap[$mixed]; - } + } else if (is_string($mixed)) { + if (strlen($mixed) === 2 && in_array($mixed, $this->__l10nMap)) { + return array_search($mixed, $this->__l10nMap); + } else if (isset($this->__l10nMap[$mixed])) { + return $this->__l10nMap[$mixed]; } return false; } @@ -468,9 +472,7 @@ class L10n extends Object { } } return $result; - } - - if (is_string($language)) { + } else if (is_string($language)) { if (isset($this->__l10nCatalog[$language])) { return $this->__l10nCatalog[$language]; } diff --git a/cake/tests/cases/libs/l10n.test.php b/cake/tests/cases/libs/l10n.test.php index 3aa564175..584e518f2 100644 --- a/cake/tests/cases/libs/l10n.test.php +++ b/cake/tests/cases/libs/l10n.test.php @@ -28,20 +28,162 @@ */ App::import('Core', 'l10n'); /** - * Short description for class. + * L10nTest class * * @package cake.tests * @subpackage cake.tests.cases.libs */ class L10nTest extends CakeTestCase { /** - * skip method - * + * testGet method + * * @access public * @return void */ - function skip() { - $this->skipif (true, 'L10nTest not implemented'); + function testGet() { + $l10n =& new L10n(); + + // Catalog Entry + $l10n->get('en'); + $result = $l10n->language; + $expected = 'English'; + $this->assertEqual($result, $expected); + + $result = $l10n->languagePath; + $expected = array('eng', 'eng'); + $this->assertEqual($result, $expected); + + $result = $l10n->locale; + $expected = 'eng'; + $this->assertEqual($result, $expected); + + // Map Entry + $l10n->get('eng'); + $result = $l10n->language; + $expected = 'English'; + $this->assertEqual($result, $expected); + + $result = $l10n->languagePath; + $expected = array('eng', 'eng'); + $this->assertEqual($result, $expected); + + $result = $l10n->locale; + $expected = 'eng'; + $this->assertEqual($result, $expected); + + // Catalog Entry + $l10n->get('en-ca'); + $result = $l10n->language; + $expected = 'English (Canadian)'; + $this->assertEqual($result, $expected); + + $result = $l10n->languagePath; + $expected = array('en_ca', 'eng'); + $this->assertEqual($result, $expected); + + $result = $l10n->locale; + $expected = 'en_ca'; + $this->assertEqual($result, $expected); + + // Default Entry + define('DEFAULT_LANGUAGE', 'en-us'); + + $l10n->get('use_default'); + $result = $l10n->language; + $expected = 'English (United States)'; + $this->assertEqual($result, $expected); + + $result = $l10n->languagePath; + $expected = array('en_us', 'eng'); + $this->assertEqual($result, $expected); + + $result = $l10n->locale; + $expected = 'en_us'; + $this->assertEqual($result, $expected); + + // Using $this->default + $l10n = new L10n(); + $l10n->get('use_default'); + $result = $l10n->language; + $expected = 'English (United States)'; + $this->assertEqual($result, $expected); + + $result = $l10n->languagePath; + $expected = array('en_us', 'eng', 'eng'); + $this->assertEqual($result, $expected); + + $result = $l10n->locale; + $expected = 'en_us'; + $this->assertEqual($result, $expected); + } +/** + * testGetAutoLanguage method + * + * @access public + * @return void + */ + function testGetAutoLanguage() { + $__SERVER = $_SERVER; + $_SERVER['HTTP_ACCEPT_LANGUAGE'] = 'inexistent,en-ca'; + + $l10n =& new L10n(); + $l10n->get(); + $result = $l10n->language; + $expected = 'English (Canadian)'; + $this->assertEqual($result, $expected); + + $result = $l10n->languagePath; + $expected = array('en_ca', 'eng', 'eng'); + $this->assertEqual($result, $expected); + + $result = $l10n->locale; + $expected = 'en_ca'; + $this->assertEqual($result, $expected); + + $_SERVER['HTTP_ACCEPT_LANGUAGE'] = 'es_mx'; + $l10n->get(); + $result = $l10n->language; + $expected = 'Spanish (Mexican)'; + $this->assertEqual($result, $expected); + + $result = $l10n->languagePath; + $expected = array('es_mx', 'spa', 'eng'); + $this->assertEqual($result, $expected); + + $result = $l10n->locale; + $expected = 'es_mx'; + $this->assertEqual($result, $expected); + + $_SERVER = $__SERVER; + } +/** + * testMap method + * + * @access public + * @return void + */ + function testMap() { + $l10n =& new L10n(); + + $result = $l10n->map(array('eng', 'en', 'en-us')); + $expected = array('eng' => 'en', 'en' => 'eng'); + $this->assertEqual($result, $expected); + } +/** + * testCatalog method + * + * @access public + * @return void + */ + function testCatalog() { + $l10n =& new L10n(); + + $result = $l10n->catalog(array('eng', 'en', 'en-us')); + $expected = array( + 'en' => array('language' => 'English', 'locale' => 'eng', 'localeFallback' => 'eng', 'charset' => 'utf-8'), + 'en-us' => array('language' => 'English (United States)', 'locale' => 'en_us', 'localeFallback' => 'eng', 'charset' => 'utf-8') + ); + $this->assertEqual($result, $expected); } } ?> \ No newline at end of file