function bogo_language_switcher($args = '')
{
    $args = wp_parse_args($args, array('echo' => false));
    $links = bogo_language_switcher_links($args);
    $total = count($links);
    $count = 0;
    $output = '';
    foreach ($links as $link) {
        $count += 1;
        $class = array();
        $class[] = bogo_language_tag($link['locale']);
        $class[] = bogo_lang_slug($link['locale']);
        if (get_locale() == $link['locale']) {
            $class[] = 'current';
        }
        if (1 == $count) {
            $class[] = 'first';
        }
        if ($total == $count) {
            $class[] = 'last';
        }
        $class = implode(' ', array_unique($class));
        $label = $link['native_name'] ? $link['native_name'] : $link['title'];
        $title = $link['title'];
        if (empty($link['href'])) {
            $li = esc_html($label);
        } else {
            $li = sprintf('<a rel="alternate" hreflang="%1$s" href="%2$s" title="%3$s">%4$s</a>', $link['lang'], esc_url($link['href']), esc_attr($title), esc_html($label));
        }
        $li = sprintf('<li class="%1$s">%2$s</li>', $class, $li);
        $output .= $li . "\n";
    }
    $output = '<ul class="bogo-language-switcher">' . $output . '</ul>' . "\n";
    $output = apply_filters('bogo_language_switcher', $output, $args);
    if ($args['echo']) {
        echo $output;
    } else {
        return $output;
    }
}
function bogo_get_url_with_lang($url = null, $lang = null, $args = '')
{
    $defaults = array('using_permalinks' => true);
    $args = wp_parse_args($args, $defaults);
    if (!$url) {
        if (!($url = redirect_canonical($url, false))) {
            $url = is_ssl() ? 'https://' : 'http://';
            $url .= $_SERVER['HTTP_HOST'];
            $url .= $_SERVER['REQUEST_URI'];
        }
        if ($frag = strstr($url, '#')) {
            $url = substr($url, 0, -strlen($frag));
        }
        if ($query = @parse_url($url, PHP_URL_QUERY)) {
            parse_str($query, $query_vars);
            foreach (array_keys($query_vars) as $qv) {
                if (!get_query_var($qv)) {
                    $url = remove_query_arg($qv, $url);
                }
            }
        }
    }
    $default_locale = bogo_get_default_locale();
    if (!$lang) {
        $lang = $default_locale;
    }
    $home = set_url_scheme(get_option('home'));
    $home = trailingslashit($home);
    $url = remove_query_arg('lang', $url);
    if (!$args['using_permalinks']) {
        if ($lang != $default_locale) {
            $url = add_query_arg(array('lang' => bogo_lang_slug($lang)), $url);
        }
        return $url;
    }
    $available_languages = array_map('bogo_lang_slug', bogo_available_locales());
    $tail_slashed = '/' == substr($url, -1);
    $url = preg_replace('#^' . preg_quote($home) . '((' . implode('|', $available_languages) . ')/)?#', $home . ($lang == $default_locale ? '' : bogo_lang_slug($lang) . '/'), trailingslashit($url));
    if (!$tail_slashed) {
        $url = untrailingslashit($url);
    }
    return $url;
}