function browser_based_language_backend($modules)
{
    global $lang, $admin_options;
    // If there's no set CP language, load it automatically
    if (!isset($admin_options['cplanguage']) || !$lang->language_exists($admin_options['cplanguage'])) {
        $languages = get_preferred_languages();
        foreach ($languages as $langcode => $priority) {
            $avi = check_if_lang_available(trim($langcode), $mybb->settings['cplanguage'], true);
            if ($avi === true) {
                break;
            } elseif ($avi !== false) {
                global $page;
                $lang->set_language($avi, 'admin');
                $lang->load('global');
                $lang->load('messages', true);
                // Override menu and breadcrumb to set proper language strings..
                $page->_menu = array();
                foreach ($modules as $m => $p) {
                    if ($p == 1) {
                        $lang->load("{$m}_module_meta", false, true);
                        $meta_function = "{$m}_meta";
                        $meta_function();
                    }
                }
                $page->_breadcrumb_trail = array();
                $page->add_breadcrumb_item($lang->home, "index.php");
                break;
            }
        }
    }
    return $modules;
}
Example #2
0
        foreach ($langs as $candidate => $quality) {
            if ($quality === '') {
                $langs[$candidate] = 1;
            }
        }
        arsort($langs, SORT_NUMERIC);
        return array_keys($langs);
    }
    return array();
}
if (!empty($_REQUEST['lang'])) {
    $lang = $_REQUEST['lang'];
} elseif (!empty($_COOKIE['lang'])) {
    $lang = $_COOKIE['lang'];
} elseif (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
    foreach (get_preferred_languages() as $candidate) {
        $candidate_major = current(explode('-', $candidate, 1));
        if (isset($available_languages[$candidate_major])) {
            $lang = $candidate_major;
            break;
        }
    }
}
if (!array_key_exists($lang, $available_languages)) {
    $lang = 'en';
}
/* We have to clean the mess introduced by double cookie at the wrong level */
if (empty($_COOKIE['clear_lang'])) {
    setcookie("lang", 'deleted', 1);
    // Setting it a current domain level, as it stays one level up
    setcookie("clear_lang", "deleted", 1456167472);