Redirect depending on the language
We choose the best language between possible languages and between languages that the browser accepts
Usage:
$accepted = $this->_helper->getHelper('Language')->accepted();
$optimal = $this->_helper->getHelper('Language')->optimal($accepted, array('es', 'en', 'fr', 'de', 'ru'));
if ($optimal != $language) {
$this->_redirector->gotoSimple('index', 'index', 'front', array('language' => $optimal));
}
Code:
<?php
class Helper_Language extends Zend_Controller_Action_Helper_Abstract {
function accepted() {
$langs = array();
if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
// break up string into pieces (languages and q factors)
preg_match_all('/([a-z]{1,8}(-[a-z]{1,8})?)\s*(;\s*q\s*=\s*(1|0\.[0-9]+))?/i', $_SERVER['HTTP_ACCEPT_LANGUAGE'], $lang_parse);
if (count($lang_parse[1])) {
// create a list like "en" => 0.8
$langs = array_combine($lang_parse[1], $lang_parse[4]);
// set default to 1 for any without q factor
foreach ($langs as $lang => $val) {
if ($val === '') $langs[$lang] = 1;
}
// sort list based on value
arsort($langs, SORT_NUMERIC);
}
}
return $langs;
}
function optimal($accepted, $availible) {
foreach ($accepted as $lang => $val) {
$language = substr($lang, 0, 2);
if (in_array($language, $availible)) {
return $language;
}
}
return $availible[0];
}
}
By Efra, published on November 03, 2010
http://www.phpzend.net
http://www.phpzend.net