Horde_Registry::preferredLang PHP Method

preferredLang() public method

Selects the most preferred language for the current client session.
public preferredLang ( string $lang = null ) : string
$lang string Force to use this language.
return string The selected language abbreviation.
    public function preferredLang($lang = null)
    {
        /* Check if we have a language set in the session */
        if ($GLOBALS['session']->exists('horde', 'language')) {
            return basename($GLOBALS['session']->get('horde', 'language'));
        }
        /* If language pref exists, we should use that. */
        if (isset($GLOBALS['prefs']) && ($language = $GLOBALS['prefs']->getValue('language'))) {
            return basename($language);
        }
        /* Check if the user selected a language from the login screen */
        if (!empty($lang) && $this->nlsconfig->validLang($lang)) {
            return basename($lang);
        }
        /* Try browser-accepted languages. */
        if (!empty($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
            /* The browser supplies a list, so return the first valid one. */
            $browser_langs = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
            foreach ($browser_langs as $lang) {
                /* Strip quality value for language */
                if (($pos = strpos($lang, ';')) !== false) {
                    $lang = substr($lang, 0, $pos);
                }
                $lang = $this->_mapLang(trim($lang));
                if ($this->nlsconfig->validLang($lang)) {
                    return basename($lang);
                }
                /* In case there's no full match, save our best guess. Try
                 * ll_LL, followed by just ll. */
                if (!isset($partial_lang)) {
                    $ll_LL = Horde_String::lower(substr($lang, 0, 2)) . '_' . Horde_String::upper(substr($lang, 0, 2));
                    if ($this->nlsconfig->validLang($ll_LL)) {
                        $partial_lang = $ll_LL;
                    } else {
                        $ll = $this->_mapLang(substr($lang, 0, 2));
                        if ($this->nlsconfig->validLang($ll)) {
                            $partial_lang = $ll;
                        }
                    }
                }
            }
            if (isset($partial_lang)) {
                return basename($partial_lang);
            }
        }
        /* Use site-wide default, if one is defined */
        return $this->nlsconfig->curr_default ? basename($this->nlsconfig->curr_default) : 'en_US';
    }