Redirect depending on the language

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
Comment
*User:
Email:
Url:
*Comment:
  * Required fields
 
 
RSS RSS RSS