Get the list of accepted languages:
CakeRequest::acceptLanguage();
Check if a specific language is accepted:
CakeRequest::acceptLanguage('es-es');
public static acceptLanguage ( string $language = null ) : mixed | ||
$language | string | The language to test. |
Результат | mixed | If a $language is provided, a boolean. Otherwise the array of accepted languages. |
/** * autoDetectLocale * * If a string or array of cancicates are provided -loop over them * otherwise get the candiate locales from the accept-language header * * Loop over the possible locales, account for regional dialects and * set the currentrequest language to that locale, and return that value * * @param mixed $candidates * @return string matched language */ public static function autoDetectLocale($candidates = null) { $locales = static::locales(); if ($candidates) { if (is_string($candidates)) { $candidates = explode(',', $candidates); } } else { $candidates = CakeRequest::acceptLanguage(); } $candidates = array_filter($candidates, function ($in) { return strpos($in, 'q=') === false; }); $permutations = array(); foreach ($candidates as $langKey) { if (strlen($langKey) === 5) { $permutations[] = substr($langKey, 0, 2) . '_' . strtoupper(substr($langKey, -2, 2)); } $permutations[] = substr($langKey, 0, 2); } $permutations = array_unique($permutations); $match = false; foreach ($permutations as $langKey) { if (!empty($locales[$langKey])) { Configure::write('Config.language', $langKey); $match = $langKey; break; } } return $match; }
/** * Attempts to find the locale settings based on the HTTP_ACCEPT_LANGUAGE variable * * @return boolean Success */ protected function _autoLanguage() { $_detectableLanguages = CakeRequest::acceptLanguage(); foreach ($_detectableLanguages as $langKey) { if (isset($this->_l10nCatalog[$langKey])) { $this->_setLanguage($langKey); return true; } if (strpos($langKey, '-') !== false) { $langKey = substr($langKey, 0, 2); if (isset($this->_l10nCatalog[$langKey])) { $this->_setLanguage($langKey); return true; } } } return false; }
/** * Test accept language * * @return void */ public function testAcceptLanguage() { // Weird language $_SERVER['HTTP_ACCEPT_LANGUAGE'] = 'inexistent,en-ca'; $result = CakeRequest::acceptLanguage(); $this->assertEquals(array('inexistent', 'en-ca'), $result, 'Languages do not match'); // No qualifier $_SERVER['HTTP_ACCEPT_LANGUAGE'] = 'es_mx,en_ca'; $result = CakeRequest::acceptLanguage(); $this->assertEquals(array('es-mx', 'en-ca'), $result, 'Languages do not match'); // With qualifier $_SERVER['HTTP_ACCEPT_LANGUAGE'] = 'en-US,en;q=0.8,pt-BR;q=0.6,pt;q=0.4'; $result = CakeRequest::acceptLanguage(); $this->assertEquals(array('en-us', 'en', 'pt-br', 'pt'), $result, 'Languages do not match'); // With spaces $_SERVER['HTTP_ACCEPT_LANGUAGE'] = 'da, en-gb;q=0.8, en;q=0.7'; $result = CakeRequest::acceptLanguage(); $this->assertEquals(array('da', 'en-gb', 'en'), $result, 'Languages do not match'); // Checking if requested $_SERVER['HTTP_ACCEPT_LANGUAGE'] = 'es_mx,en_ca'; $result = CakeRequest::acceptLanguage(); $result = CakeRequest::acceptLanguage('en-ca'); $this->assertTrue($result); $result = CakeRequest::acceptLanguage('en-CA'); $this->assertTrue($result); $result = CakeRequest::acceptLanguage('en-us'); $this->assertFalse($result); $result = CakeRequest::acceptLanguage('en-US'); $this->assertFalse($result); }
/** * test accept language * * @return void */ public function testAcceptLanguage() { $_SERVER['HTTP_ACCEPT_LANGUAGE'] = 'inexistent,en-ca'; $result = CakeRequest::acceptLanguage(); $this->assertEquals(array('inexistent', 'en-ca'), $result, 'Languages do not match'); $_SERVER['HTTP_ACCEPT_LANGUAGE'] = 'es_mx;en_ca'; $result = CakeRequest::acceptLanguage(); $this->assertEquals(array('es-mx', 'en-ca'), $result, 'Languages do not match'); $result = CakeRequest::acceptLanguage('en-ca'); $this->assertTrue($result); $result = CakeRequest::acceptLanguage('en-us'); $this->assertFalse($result); }